// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. (function(window) { // DevToolsAPI ---------------------------------------------------------------- /** * @constructor */ function DevToolsAPIImpl() { /** * @type {number} */ this._lastCallId = 0; /** * @type {!Object.} */ this._callbacks = {}; } DevToolsAPIImpl.prototype = { /** * @param {number} id * @param {?Object} arg */ embedderMessageAck: function(id, arg) { var callback = this._callbacks[id]; delete this._callbacks[id]; if (callback) callback(arg); }, /** * @param {string} method * @param {!Array.<*>} args * @param {?function(?Object)} callback */ sendMessageToEmbedder: function(method, args, callback) { var callId = ++this._lastCallId; if (callback) this._callbacks[callId] = callback; var message = { "id": callId, "method": method }; if (args.length) message.params = args; DevToolsHost.sendMessageToEmbedder(JSON.stringify(message)); }, /** * @param {string} method * @param {!Array.<*>} args */ _dispatchOnInspectorFrontendAPI: function(method, args) { var api = window["InspectorFrontendAPI"]; api[method].apply(api, args); }, // API methods below this line -------------------------------------------- /** * @param {!Array.} extensions */ addExtensions: function(extensions) { // Support for legacy front-ends (} devices */ devicesUpdated: function(devices) { this._dispatchOnInspectorFrontendAPI("devicesUpdated", [devices]); }, /** * @param {string} message */ dispatchMessage: function(message) { this._dispatchOnInspectorFrontendAPI("dispatchMessage", [message]); }, /** * @param {string} messageChunk * @param {number} messageSize */ dispatchMessageChunk: function(messageChunk, messageSize) { this._dispatchOnInspectorFrontendAPI("dispatchMessageChunk", [messageChunk, messageSize]); }, enterInspectElementMode: function() { this._dispatchOnInspectorFrontendAPI("enterInspectElementMode", []); }, /** * @param {!Array.} fileSystems */ fileSystemsLoaded: function(fileSystems) { this._dispatchOnInspectorFrontendAPI("fileSystemsLoaded", [fileSystems]); }, /** * @param {string} fileSystemPath */ fileSystemRemoved: function(fileSystemPath) { this._dispatchOnInspectorFrontendAPI("fileSystemRemoved", [fileSystemPath]); }, /** * @param {!{fileSystemName: string, rootURL: string, fileSystemPath: string}} fileSystem */ fileSystemAdded: function(fileSystem) { this._dispatchOnInspectorFrontendAPI("fileSystemAdded", ["", fileSystem]); }, fileSystemFilesChanged: function(path) { this._dispatchOnInspectorFrontendAPI("fileSystemFilesChanged", [path]); }, /** * @param {number} requestId * @param {string} fileSystemPath * @param {number} totalWork */ indexingTotalWorkCalculated: function(requestId, fileSystemPath, totalWork) { this._dispatchOnInspectorFrontendAPI("indexingTotalWorkCalculated", [requestId, fileSystemPath, totalWork]); }, /** * @param {number} requestId * @param {string} fileSystemPath * @param {number} worked */ indexingWorked: function(requestId, fileSystemPath, worked) { this._dispatchOnInspectorFrontendAPI("indexingWorked", [requestId, fileSystemPath, worked]); }, /** * @param {number} requestId * @param {string} fileSystemPath */ indexingDone: function(requestId, fileSystemPath) { this._dispatchOnInspectorFrontendAPI("indexingDone", [requestId, fileSystemPath]); }, /** * @param {{type: string, keyIdentifier: string, keyCode: number, modifiers: number}} event */ keyEventUnhandled: function(event) { this._dispatchOnInspectorFrontendAPI("keyEventUnhandled", [event]); }, /** * @param {boolean} hard */ reloadInspectedPage: function(hard) { this._dispatchOnInspectorFrontendAPI("reloadInspectedPage", [hard]); }, /** * @param {string} url * @param {number} lineNumber * @param {number} columnNumber */ revealSourceLine: function(url, lineNumber, columnNumber) { this._dispatchOnInspectorFrontendAPI("revealSourceLine", [url, lineNumber, columnNumber]); }, /** * @param {string} url */ savedURL: function(url) { this._dispatchOnInspectorFrontendAPI("savedURL", [url]); }, /** * @param {number} requestId * @param {string} fileSystemPath * @param {!Array.} files */ searchCompleted: function(requestId, fileSystemPath, files) { this._dispatchOnInspectorFrontendAPI("searchCompleted", [requestId, fileSystemPath, files]); }, /** * @param {string} tabId */ setInspectedTabId: function(tabId) { // Support for legacy front-ends ()} callback */ getPreferences: function(callback) { DevToolsAPI.sendMessageToEmbedder("getPreferences", [], /** @type {function(?Object)} */ (callback)); }, /** * @override * @param {string} name * @param {string} value */ setPreference: function(name, value) { DevToolsAPI.sendMessageToEmbedder("setPreference", [name, value], null); }, /** * @override * @param {string} name */ removePreference: function(name) { DevToolsAPI.sendMessageToEmbedder("removePreference", [name], null); }, /** * @override */ clearPreferences: function() { DevToolsAPI.sendMessageToEmbedder("clearPreferences", [], null); }, /** * @override * @param {string} origin * @param {string} script */ setInjectedScriptForOrigin: function(origin, script) { DevToolsHost.setInjectedScriptForOrigin(origin, script); }, /** * @override * @param {string} url */ inspectedURLChanged: function(url) { DevToolsAPI.sendMessageToEmbedder("inspectedURLChanged", [url], null); }, /** * @override * @param {string} text */ copyText: function(text) { DevToolsHost.copyText(text); }, /** * @override * @param {string} url */ openInNewTab: function(url) { DevToolsAPI.sendMessageToEmbedder("openInNewTab", [url], null); }, /** * @override * @param {string} url * @param {string} content * @param {boolean} forceSaveAs */ save: function(url, content, forceSaveAs) { DevToolsAPI.sendMessageToEmbedder("save", [url, content, forceSaveAs], null); }, /** * @override * @param {string} url * @param {string} content */ append: function(url, content) { DevToolsAPI.sendMessageToEmbedder("append", [url, content], null); }, /** * @override * @param {string} message */ sendMessageToBackend: function(message) { DevToolsAPI.sendMessageToEmbedder("dispatchProtocolMessage", [message], null); }, /** * @override * @param {string} actionName * @param {number} actionCode * @param {number} bucketSize */ recordEnumeratedHistogram: function(actionName, actionCode, bucketSize) { DevToolsAPI.sendMessageToEmbedder("recordEnumeratedHistogram", [actionName, actionCode, bucketSize], null); }, /** * @override */ requestFileSystems: function() { DevToolsAPI.sendMessageToEmbedder("requestFileSystems", [], null); }, /** * @override * @param {string=} fileSystemPath */ addFileSystem: function(fileSystemPath) { DevToolsAPI.sendMessageToEmbedder("addFileSystem", [fileSystemPath || ""], null); }, /** * @override * @param {string} fileSystemPath */ removeFileSystem: function(fileSystemPath) { DevToolsAPI.sendMessageToEmbedder("removeFileSystem", [fileSystemPath], null); }, /** * @override * @param {string} fileSystemId * @param {string} registeredName * @return {?DOMFileSystem} */ isolatedFileSystem: function(fileSystemId, registeredName) { return DevToolsHost.isolatedFileSystem(fileSystemId, registeredName); }, /** * @override * @param {!FileSystem} fileSystem */ upgradeDraggedFileSystemPermissions: function(fileSystem) { DevToolsHost.upgradeDraggedFileSystemPermissions(fileSystem); }, /** * @override * @param {number} requestId * @param {string} fileSystemPath */ indexPath: function(requestId, fileSystemPath) { DevToolsAPI.sendMessageToEmbedder("indexPath", [requestId, fileSystemPath], null); }, /** * @override * @param {number} requestId */ stopIndexing: function(requestId) { DevToolsAPI.sendMessageToEmbedder("stopIndexing", [requestId], null); }, /** * @override * @param {number} requestId * @param {string} fileSystemPath * @param {string} query */ searchInPath: function(requestId, fileSystemPath, query) { DevToolsAPI.sendMessageToEmbedder("searchInPath", [requestId, fileSystemPath, query], null); }, /** * @override * @return {number} */ zoomFactor: function() { return DevToolsHost.zoomFactor(); }, /** * @override */ zoomIn: function() { DevToolsAPI.sendMessageToEmbedder("zoomIn", [], null); }, /** * @override */ zoomOut: function() { DevToolsAPI.sendMessageToEmbedder("zoomOut", [], null); }, /** * @override */ resetZoom: function() { DevToolsAPI.sendMessageToEmbedder("resetZoom", [], null); }, /** * @override * @param {string} shortcuts */ setWhitelistedShortcuts: function(shortcuts) { DevToolsAPI.sendMessageToEmbedder("setWhitelistedShortcuts", [shortcuts], null); }, /** * @override * @return {boolean} */ isUnderTest: function() { return DevToolsHost.isUnderTest(); }, /** * @override */ readyForTest: function() { DevToolsAPI.sendMessageToEmbedder("readyForTest", [], null); }, /** * @override * @param {boolean} discoverUsbDevices * @param {boolean} portForwardingEnabled * @param {!Adb.PortForwardingConfig} portForwardingConfig */ setDevicesDiscoveryConfig: function(discoverUsbDevices, portForwardingEnabled, portForwardingConfig) { DevToolsAPI.sendMessageToEmbedder("setDevicesDiscoveryConfig", [discoverUsbDevices, portForwardingEnabled, JSON.stringify(portForwardingConfig)], null); }, /** * @override * @param {boolean} enabled */ setDevicesUpdatesEnabled: function(enabled) { DevToolsAPI.sendMessageToEmbedder("setDevicesUpdatesEnabled", [enabled], null); }, /** * @override * @param {string} pageId * @param {string} action */ performActionOnRemotePage: function(pageId, action) { DevToolsAPI.sendMessageToEmbedder("performActionOnRemotePage", [pageId, action], null); }, /** * @override * @param {string} browserId * @param {string} url */ openRemotePage: function(browserId, url) { DevToolsAPI.sendMessageToEmbedder("openRemotePage", [browserId, url], null); }, /** * @override * @param {number} x * @param {number} y * @param {!Array.} items * @param {!Document} document */ showContextMenuAtPoint: function(x, y, items, document) { DevToolsHost.showContextMenuAtPoint(x, y, items, document); }, /** * @override * @return {boolean} */ isHostedMode: function() { return DevToolsHost.isHostedMode(); }, // Backward-compatible methods below this line -------------------------------------------- /** * Support for legacy front-ends (