255 lines
9.7 KiB
JavaScript
255 lines
9.7 KiB
JavaScript
/*
|
|
* Copyright (C) 2013-2021 Apple Inc. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
|
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
InspectorFrontendAPI = {
|
|
_loaded: false,
|
|
_pendingCommands: [],
|
|
|
|
isTimelineProfilingEnabled: function()
|
|
{
|
|
return WI.timelineManager.isCapturing();
|
|
},
|
|
|
|
setTimelineProfilingEnabled: function(enabled)
|
|
{
|
|
if (!WI.targetsAvailable()) {
|
|
WI.whenTargetsAvailable().then(() => {
|
|
InspectorFrontendAPI.setTimelineProfilingEnabled(enabled);
|
|
});
|
|
return;
|
|
}
|
|
|
|
WI.showTimelineTab({
|
|
initiatorHint: WI.TabBrowser.TabNavigationInitiator.FrontendAPI
|
|
});
|
|
|
|
if (WI.timelineManager.isCapturing() === enabled)
|
|
return;
|
|
|
|
if (enabled)
|
|
WI.timelineManager.startCapturing();
|
|
else
|
|
WI.timelineManager.stopCapturing();
|
|
},
|
|
|
|
setElementSelectionEnabled: function(enabled)
|
|
{
|
|
if (!WI.targetsAvailable()) {
|
|
WI.whenTargetsAvailable().then(() => {
|
|
InspectorFrontendAPI.setElementSelectionEnabled(enabled);
|
|
});
|
|
return;
|
|
}
|
|
|
|
WI.domManager.inspectModeEnabled = enabled;
|
|
},
|
|
|
|
setDockingUnavailable: function(unavailable)
|
|
{
|
|
WI.updateDockingAvailability(!unavailable);
|
|
},
|
|
|
|
setDockSide: function(side)
|
|
{
|
|
WI.updateDockedState(side);
|
|
},
|
|
|
|
setIsVisible: function(visible)
|
|
{
|
|
WI.updateVisibilityState(visible);
|
|
},
|
|
|
|
updateFindString: function(findString)
|
|
{
|
|
WI.updateFindString(findString);
|
|
},
|
|
|
|
setDiagnosticLoggingAvailable: function(available)
|
|
{
|
|
if (WI.diagnosticController)
|
|
WI.diagnosticController.diagnosticLoggingAvailable = available;
|
|
},
|
|
|
|
showConsole: function()
|
|
{
|
|
const requestedScope = null;
|
|
WI.showConsoleTab(requestedScope, {
|
|
initiatorHint: WI.TabBrowser.TabNavigationInitiator.FrontendAPI,
|
|
});
|
|
|
|
WI.quickConsole.prompt.focus();
|
|
|
|
// If the page is still loading, focus the quick console again after tabindex autofocus.
|
|
if (document.readyState !== "complete")
|
|
document.addEventListener("readystatechange", this);
|
|
if (document.visibilityState !== "visible")
|
|
document.addEventListener("visibilitychange", this);
|
|
},
|
|
|
|
handleEvent: function(event)
|
|
{
|
|
console.assert(event.type === "readystatechange" || event.type === "visibilitychange");
|
|
|
|
if (document.readyState === "complete" && document.visibilityState === "visible") {
|
|
WI.quickConsole.prompt.focus();
|
|
document.removeEventListener("readystatechange", this);
|
|
document.removeEventListener("visibilitychange", this);
|
|
}
|
|
},
|
|
|
|
showResources: function()
|
|
{
|
|
WI.showSourcesTab({
|
|
initiatorHint: WI.TabBrowser.TabNavigationInitiator.FrontendAPI,
|
|
});
|
|
},
|
|
|
|
// COMPATIBILITY (iOS 13): merged into InspectorFrontendAPI.setTimelineProfilingEnabled.
|
|
showTimelines: function()
|
|
{
|
|
WI.showTimelineTab({
|
|
initiatorHint: WI.TabBrowser.TabNavigationInitiator.FrontendAPI
|
|
});
|
|
},
|
|
|
|
showMainResourceForFrame: function(frameIdentifier)
|
|
{
|
|
WI.showSourceCodeForFrame(frameIdentifier, {
|
|
ignoreNetworkTab: true,
|
|
ignoreSearchTab: true,
|
|
initiatorHint: WI.TabBrowser.TabNavigationInitiator.FrontendAPI,
|
|
});
|
|
},
|
|
|
|
contextMenuItemSelected: function(id)
|
|
{
|
|
WI.ContextMenu.contextMenuItemSelected(id);
|
|
},
|
|
|
|
contextMenuCleared: function()
|
|
{
|
|
WI.ContextMenu.contextMenuCleared();
|
|
},
|
|
|
|
dispatchMessageAsync: function(messageObject)
|
|
{
|
|
WI.dispatchMessageFromBackend(messageObject);
|
|
},
|
|
|
|
dispatchMessage: function(messageObject)
|
|
{
|
|
InspectorBackend.dispatch(messageObject);
|
|
},
|
|
|
|
dispatch: function(signature)
|
|
{
|
|
if (!InspectorFrontendAPI._loaded) {
|
|
InspectorFrontendAPI._pendingCommands.push(signature);
|
|
return null;
|
|
}
|
|
|
|
var methodName = signature.shift();
|
|
console.assert(InspectorFrontendAPI[methodName], "Unexpected InspectorFrontendAPI method name: " + methodName);
|
|
if (!InspectorFrontendAPI[methodName])
|
|
return null;
|
|
|
|
return InspectorFrontendAPI[methodName].apply(InspectorFrontendAPI, signature);
|
|
},
|
|
|
|
loadCompleted: function()
|
|
{
|
|
InspectorFrontendAPI._loaded = true;
|
|
|
|
for (var i = 0; i < InspectorFrontendAPI._pendingCommands.length; ++i)
|
|
InspectorFrontendAPI.dispatch(InspectorFrontendAPI._pendingCommands[i]);
|
|
|
|
delete InspectorFrontendAPI._pendingCommands;
|
|
},
|
|
|
|
// Returns a WI.WebInspectorExtension.ErrorCode if an error occurred, otherwise nothing.
|
|
registerExtension(extensionID, extensionBundleIdentifier, displayName)
|
|
{
|
|
return WI.sharedApp.extensionController.registerExtension(extensionID, extensionBundleIdentifier, displayName);
|
|
},
|
|
|
|
// Returns a WI.WebInspectorExtension.ErrorCode if an error occurred, otherwise nothing.
|
|
unregisterExtension(extensionID)
|
|
{
|
|
return WI.sharedApp.extensionController.unregisterExtension(extensionID);
|
|
},
|
|
|
|
// Returns a string (WI.WebInspectorExtension.ErrorCode) if an error occurred that prevented creating a tab.
|
|
// Returns a Promise that is resolved if the evaluation completes and rejected if there was an internal error.
|
|
// When the promise is fulfilled, it will be either:
|
|
// - resolved with an object containing a 'result' key and value that is the tab identifier for the new tab.
|
|
// - rejected with an object containing an 'error' key and value that is the exception that was thrown while evaluating script.
|
|
createTabForExtension(extensionID, tabName, tabIconURL, sourceURL)
|
|
{
|
|
return WI.sharedApp.extensionController.createTabForExtension(extensionID, tabName, tabIconURL, sourceURL);
|
|
},
|
|
|
|
// Returns a string (WI.WebInspectorExtension.ErrorCode) if an error occurred that prevented evaluation.
|
|
// Returns a Promise that is resolved if the evaluation completes and rejected if there was an internal error.
|
|
// When the promise is fulfilled, it will be either:
|
|
// - resolved with an object containing a 'result' key and value that is the result of the script evaluation.
|
|
// - rejected with an object containing an 'error' key and value that is the exception that was thrown while evaluating script.
|
|
evaluateScriptForExtension(extensionID, scriptSource, {frameURL, contextSecurityOrigin, useContentScriptContext} = {})
|
|
{
|
|
return WI.sharedApp.extensionController.evaluateScriptForExtension(extensionID, scriptSource, {frameURL, contextSecurityOrigin, useContentScriptContext});
|
|
},
|
|
|
|
// Returns a string (WI.WebInspectorExtension.ErrorCode) if an error occurred that prevented reloading.
|
|
reloadForExtension(extensionID, {ignoreCache, userAgent, injectedScript} = {})
|
|
{
|
|
return WI.sharedApp.extensionController.reloadForExtension(extensionID, {ignoreCache, userAgent, injectedScript});
|
|
},
|
|
|
|
// Returns a string (WI.WebInspectorExtension.ErrorCode) if an error occurred before attempting to switch tabs.
|
|
// Returns a Promise that is resolved if the tab could be shown and rejected if the tab could not be shown.
|
|
// When the promise is fulfilled, it will be either:
|
|
// - resolved with no value.
|
|
// - rejected with an object containing an 'error' key and value that is the exception that was thrown while showing the tab.
|
|
showExtensionTab(extensionTabID)
|
|
{
|
|
return WI.sharedApp.extensionController.showExtensionTab(extensionTabID);
|
|
},
|
|
|
|
// Returns a string (WI.WebInspectorExtension.ErrorCode) if an error occurred that prevented evaluation.
|
|
// Returns a Promise that is resolved if the evaluation completes and rejected if there was an internal error.
|
|
// When the promise is fulfilled, it will be either:
|
|
// - resolved with an object containing a 'result' key and value that is the result of the script evaluation.
|
|
// - rejected with an object containing an 'error' key and value that is the exception that was thrown while evaluating script.
|
|
evaluateScriptInExtensionTab(extensionTabID, scriptSource)
|
|
{
|
|
return WI.sharedApp.extensionController.evaluateScriptInExtensionTab(extensionTabID, scriptSource);
|
|
},
|
|
|
|
// Returns a string (WI.WebInspectorExtension.ErrorCode) if an error occurred.
|
|
navigateTabForExtension(extensionTabID, sourceURL)
|
|
{
|
|
return WI.sharedApp.extensionController.navigateTabForExtension(extensionTabID, sourceURL);
|
|
},
|
|
};
|