|  | // Copyright 2012 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | import {$} from 'chrome://resources/js/util_ts.js'; | 
|  |  | 
|  | import {BrowserBridge} from './browser_bridge.js'; | 
|  | import {DivView} from './view.js'; | 
|  |  | 
|  | /** @type {?SocketsView} */ | 
|  | let instance = null; | 
|  |  | 
|  | /** | 
|  | * This view displays information on the state of all socket pools. | 
|  | * | 
|  | *   - Has a button to close idle sockets. | 
|  | *   - Has a button to flush socket pools. | 
|  | */ | 
|  | export class SocketsView extends DivView { | 
|  | constructor() { | 
|  | // Call superclass's constructor. | 
|  | super(SocketsView.MAIN_BOX_ID); | 
|  |  | 
|  | const closeIdleButton = $(SocketsView.CLOSE_IDLE_SOCKETS_BUTTON_ID); | 
|  | closeIdleButton.onclick = this.closeIdleSockets.bind(this); | 
|  |  | 
|  | const flushSocketsButton = $(SocketsView.SOCKET_POOL_FLUSH_BUTTON_ID); | 
|  | flushSocketsButton.onclick = this.flushSocketPools.bind(this); | 
|  | } | 
|  |  | 
|  | closeIdleSockets() { | 
|  | BrowserBridge.getInstance().sendCloseIdleSockets(); | 
|  | } | 
|  |  | 
|  | flushSocketPools() { | 
|  | BrowserBridge.getInstance().sendFlushSocketPools(); | 
|  | } | 
|  |  | 
|  | static getInstance() { | 
|  | return instance || (instance = new SocketsView()); | 
|  | } | 
|  | } | 
|  |  | 
|  | SocketsView.TAB_ID = 'tab-handle-sockets'; | 
|  | SocketsView.TAB_NAME = 'Sockets'; | 
|  | SocketsView.TAB_HASH = '#sockets'; | 
|  |  | 
|  | // IDs for special HTML elements in sockets_view.html | 
|  | SocketsView.MAIN_BOX_ID = 'sockets-view-tab-content'; | 
|  | SocketsView.CLOSE_IDLE_SOCKETS_BUTTON_ID = 'sockets-view-close-idle-button'; | 
|  | SocketsView.SOCKET_POOL_FLUSH_BUTTON_ID = 'sockets-view-flush-button'; |