@statewalker/webrun-devtools
Version:
DevTools Extension for the StateWalker WebRun framework
470 lines (462 loc) • 13.7 kB
JavaScript
// List of commands available in the Chrome DevTools Protocol v1.3
// (https://chromedevtools.github.io/devtools-protocol/).
// returning a value.
// This list is used to detect if a command should return a response
// immediately or it should wait a callback from the browser.
//
// To generate this list you need:
// 1. Launch the browser in the debug mode:
// ```sh
// > google-chrome --headless=new --remote-debugging-port=9222 --remote-allow-origins="*" about:empty
// ```
// 2. Load the protocol description from the browser:
// ```
// curl -s http://localhost:9222/json/protocol > protocol.json
// ```
// 3. Extract the list of commands returning some values:
// ```
// const protocol = require("./protocol.json");
// const commands = protocol.domains
// .reduce(
// (acc, d) =>
// acc.concat(
// d.commands
// .filter((c) => !Boolean(c.returns?.length))
// .map((c) => `${d.domain}.${c.name}`)
// ),
// []
// )
// .sort();
// console.log(JSON.stringify(commands, null, 2));
export const commands = [
"Accessibility.disable",
"Accessibility.enable",
"Animation.disable",
"Animation.enable",
"Animation.releaseAnimations",
"Animation.seekAnimations",
"Animation.setPaused",
"Animation.setPlaybackRate",
"Animation.setTiming",
"Audits.checkContrast",
"Audits.disable",
"Audits.enable",
"Autofill.disable",
"Autofill.enable",
"Autofill.setAddresses",
"Autofill.trigger",
"BackgroundService.clearEvents",
"BackgroundService.setRecording",
"BackgroundService.startObserving",
"BackgroundService.stopObserving",
"Browser.addPrivacySandboxEnrollmentOverride",
"Browser.cancelDownload",
"Browser.close",
"Browser.crash",
"Browser.crashGpuProcess",
"Browser.executeBrowserCommand",
"Browser.grantPermissions",
"Browser.resetPermissions",
"Browser.setDockTile",
"Browser.setDownloadBehavior",
"Browser.setPermission",
"Browser.setWindowBounds",
"CSS.disable",
"CSS.enable",
"CSS.forcePseudoState",
"CSS.setEffectivePropertyValueForNode",
"CSS.setLocalFontsEnabled",
"CSS.startRuleUsageTracking",
"CSS.trackComputedStyleUpdates",
"CacheStorage.deleteCache",
"CacheStorage.deleteEntry",
"Cast.disable",
"Cast.enable",
"Cast.setSinkToUse",
"Cast.startDesktopMirroring",
"Cast.startTabMirroring",
"Cast.stopCasting",
"Console.clearMessages",
"Console.disable",
"Console.enable",
"DOM.disable",
"DOM.discardSearchResults",
"DOM.enable",
"DOM.focus",
"DOM.hideHighlight",
"DOM.highlightNode",
"DOM.highlightRect",
"DOM.markUndoableState",
"DOM.redo",
"DOM.removeAttribute",
"DOM.removeNode",
"DOM.requestChildNodes",
"DOM.scrollIntoViewIfNeeded",
"DOM.setAttributeValue",
"DOM.setAttributesAsText",
"DOM.setFileInputFiles",
"DOM.setInspectedNode",
"DOM.setNodeStackTracesEnabled",
"DOM.setNodeValue",
"DOM.setOuterHTML",
"DOM.undo",
"DOMDebugger.removeDOMBreakpoint",
"DOMDebugger.removeEventListenerBreakpoint",
"DOMDebugger.removeInstrumentationBreakpoint",
"DOMDebugger.removeXHRBreakpoint",
"DOMDebugger.setBreakOnCSPViolation",
"DOMDebugger.setDOMBreakpoint",
"DOMDebugger.setEventListenerBreakpoint",
"DOMDebugger.setInstrumentationBreakpoint",
"DOMDebugger.setXHRBreakpoint",
"DOMSnapshot.disable",
"DOMSnapshot.enable",
"DOMStorage.clear",
"DOMStorage.disable",
"DOMStorage.enable",
"DOMStorage.removeDOMStorageItem",
"DOMStorage.setDOMStorageItem",
"Database.disable",
"Database.enable",
"Debugger.continueToLocation",
"Debugger.disable",
"Debugger.pause",
"Debugger.pauseOnAsyncCall",
"Debugger.removeBreakpoint",
"Debugger.resume",
"Debugger.setAsyncCallStackDepth",
"Debugger.setBlackboxPatterns",
"Debugger.setBlackboxedRanges",
"Debugger.setBreakpointsActive",
"Debugger.setPauseOnExceptions",
"Debugger.setReturnValue",
"Debugger.setSkipAllPauses",
"Debugger.setVariableValue",
"Debugger.stepInto",
"Debugger.stepOut",
"Debugger.stepOver",
"DeviceAccess.cancelPrompt",
"DeviceAccess.disable",
"DeviceAccess.enable",
"DeviceAccess.selectPrompt",
"DeviceOrientation.clearDeviceOrientationOverride",
"DeviceOrientation.setDeviceOrientationOverride",
"Emulation.clearDeviceMetricsOverride",
"Emulation.clearGeolocationOverride",
"Emulation.clearIdleOverride",
"Emulation.resetPageScaleFactor",
"Emulation.setAutoDarkModeOverride",
"Emulation.setAutomationOverride",
"Emulation.setCPUThrottlingRate",
"Emulation.setDefaultBackgroundColorOverride",
"Emulation.setDeviceMetricsOverride",
"Emulation.setDisabledImageTypes",
"Emulation.setDocumentCookieDisabled",
"Emulation.setEmitTouchEventsForMouse",
"Emulation.setEmulatedMedia",
"Emulation.setEmulatedVisionDeficiency",
"Emulation.setFocusEmulationEnabled",
"Emulation.setGeolocationOverride",
"Emulation.setHardwareConcurrencyOverride",
"Emulation.setIdleOverride",
"Emulation.setLocaleOverride",
"Emulation.setNavigatorOverrides",
"Emulation.setPageScaleFactor",
"Emulation.setScriptExecutionDisabled",
"Emulation.setScrollbarsHidden",
"Emulation.setTimezoneOverride",
"Emulation.setTouchEmulationEnabled",
"Emulation.setUserAgentOverride",
"Emulation.setVisibleSize",
"EventBreakpoints.removeInstrumentationBreakpoint",
"EventBreakpoints.setInstrumentationBreakpoint",
"FedCm.confirmIdpLogin",
"FedCm.disable",
"FedCm.dismissDialog",
"FedCm.enable",
"FedCm.resetCooldown",
"FedCm.selectAccount",
"Fetch.continueRequest",
"Fetch.continueResponse",
"Fetch.continueWithAuth",
"Fetch.disable",
"Fetch.enable",
"Fetch.failRequest",
"Fetch.fulfillRequest",
"HeadlessExperimental.disable",
"HeadlessExperimental.enable",
"HeapProfiler.addInspectedHeapObject",
"HeapProfiler.collectGarbage",
"HeapProfiler.disable",
"HeapProfiler.enable",
"HeapProfiler.startSampling",
"HeapProfiler.startTrackingHeapObjects",
"HeapProfiler.stopTrackingHeapObjects",
"HeapProfiler.takeHeapSnapshot",
"IO.close",
"IndexedDB.clearObjectStore",
"IndexedDB.deleteDatabase",
"IndexedDB.deleteObjectStoreEntries",
"IndexedDB.disable",
"IndexedDB.enable",
"Input.cancelDragging",
"Input.dispatchDragEvent",
"Input.dispatchKeyEvent",
"Input.dispatchMouseEvent",
"Input.dispatchTouchEvent",
"Input.emulateTouchFromMouseEvent",
"Input.imeSetComposition",
"Input.insertText",
"Input.setIgnoreInputEvents",
"Input.setInterceptDrags",
"Input.synthesizePinchGesture",
"Input.synthesizeScrollGesture",
"Input.synthesizeTapGesture",
"Inspector.disable",
"Inspector.enable",
"LayerTree.disable",
"LayerTree.enable",
"LayerTree.releaseSnapshot",
"Log.clear",
"Log.disable",
"Log.enable",
"Log.startViolationsReport",
"Log.stopViolationsReport",
"Media.disable",
"Media.enable",
"Memory.forciblyPurgeJavaScriptMemory",
"Memory.prepareForLeakDetection",
"Memory.setPressureNotificationsSuppressed",
"Memory.simulatePressureNotification",
"Memory.startSampling",
"Memory.stopSampling",
"Network.clearAcceptedEncodingsOverride",
"Network.clearBrowserCache",
"Network.clearBrowserCookies",
"Network.continueInterceptedRequest",
"Network.deleteCookies",
"Network.disable",
"Network.emulateNetworkConditions",
"Network.enable",
"Network.enableReportingApi",
"Network.replayXHR",
"Network.setAcceptedEncodings",
"Network.setAttachDebugStack",
"Network.setBlockedURLs",
"Network.setBypassServiceWorker",
"Network.setCacheDisabled",
"Network.setCookies",
"Network.setExtraHTTPHeaders",
"Network.setRequestInterception",
"Network.setUserAgentOverride",
"Overlay.disable",
"Overlay.enable",
"Overlay.hideHighlight",
"Overlay.highlightFrame",
"Overlay.highlightNode",
"Overlay.highlightQuad",
"Overlay.highlightRect",
"Overlay.highlightSourceOrder",
"Overlay.setInspectMode",
"Overlay.setPausedInDebuggerMessage",
"Overlay.setShowAdHighlights",
"Overlay.setShowContainerQueryOverlays",
"Overlay.setShowDebugBorders",
"Overlay.setShowFPSCounter",
"Overlay.setShowFlexOverlays",
"Overlay.setShowGridOverlays",
"Overlay.setShowHinge",
"Overlay.setShowHitTestBorders",
"Overlay.setShowIsolatedElements",
"Overlay.setShowLayoutShiftRegions",
"Overlay.setShowPaintRects",
"Overlay.setShowScrollBottleneckRects",
"Overlay.setShowScrollSnapOverlays",
"Overlay.setShowViewportSizeOnResize",
"Overlay.setShowWebVitals",
"Page.addCompilationCache",
"Page.bringToFront",
"Page.clearCompilationCache",
"Page.clearDeviceMetricsOverride",
"Page.clearDeviceOrientationOverride",
"Page.clearGeolocationOverride",
"Page.close",
"Page.crash",
"Page.deleteCookie",
"Page.disable",
"Page.enable",
"Page.generateTestReport",
"Page.handleJavaScriptDialog",
"Page.navigateToHistoryEntry",
"Page.produceCompilationCache",
"Page.reload",
"Page.removeScriptToEvaluateOnLoad",
"Page.removeScriptToEvaluateOnNewDocument",
"Page.resetNavigationHistory",
"Page.screencastFrameAck",
"Page.setAdBlockingEnabled",
"Page.setBypassCSP",
"Page.setDeviceMetricsOverride",
"Page.setDeviceOrientationOverride",
"Page.setDocumentContent",
"Page.setDownloadBehavior",
"Page.setFontFamilies",
"Page.setFontSizes",
"Page.setGeolocationOverride",
"Page.setInterceptFileChooserDialog",
"Page.setLifecycleEventsEnabled",
"Page.setPrerenderingAllowed",
"Page.setRPHRegistrationMode",
"Page.setSPCTransactionMode",
"Page.setTouchEmulationEnabled",
"Page.setWebLifecycleState",
"Page.startScreencast",
"Page.stopLoading",
"Page.stopScreencast",
"Page.waitForDebugger",
"Performance.disable",
"Performance.enable",
"Performance.setTimeDomain",
"PerformanceTimeline.enable",
"Preload.disable",
"Preload.enable",
"Profiler.disable",
"Profiler.enable",
"Profiler.setSamplingInterval",
"Profiler.start",
"Profiler.stopPreciseCoverage",
"Runtime.addBinding",
"Runtime.disable",
"Runtime.discardConsoleEntries",
"Runtime.enable",
"Runtime.releaseObject",
"Runtime.releaseObjectGroup",
"Runtime.removeBinding",
"Runtime.runIfWaitingForDebugger",
"Runtime.setAsyncCallStackDepth",
"Runtime.setCustomObjectFormatterEnabled",
"Runtime.setMaxCallStackSizeToCapture",
"Runtime.terminateExecution",
"Security.disable",
"Security.enable",
"Security.handleCertificateError",
"Security.setIgnoreCertificateErrors",
"Security.setOverrideCertificateErrors",
"ServiceWorker.deliverPushMessage",
"ServiceWorker.disable",
"ServiceWorker.dispatchPeriodicSyncEvent",
"ServiceWorker.dispatchSyncEvent",
"ServiceWorker.enable",
"ServiceWorker.inspectWorker",
"ServiceWorker.setForceUpdateOnPageLoad",
"ServiceWorker.skipWaiting",
"ServiceWorker.startWorker",
"ServiceWorker.stopAllWorkers",
"ServiceWorker.stopWorker",
"ServiceWorker.unregister",
"ServiceWorker.updateRegistration",
"Storage.clearCookies",
"Storage.clearDataForOrigin",
"Storage.clearDataForStorageKey",
"Storage.clearSharedStorageEntries",
"Storage.deleteSharedStorageEntry",
"Storage.deleteStorageBucket",
"Storage.overrideQuotaForOrigin",
"Storage.resetSharedStorageBudget",
"Storage.setAttributionReportingLocalTestingMode",
"Storage.setAttributionReportingTracking",
"Storage.setCookies",
"Storage.setInterestGroupTracking",
"Storage.setSharedStorageEntry",
"Storage.setSharedStorageTracking",
"Storage.setStorageBucketTracking",
"Storage.trackCacheStorageForOrigin",
"Storage.trackCacheStorageForStorageKey",
"Storage.trackIndexedDBForOrigin",
"Storage.trackIndexedDBForStorageKey",
"Storage.untrackCacheStorageForOrigin",
"Storage.untrackCacheStorageForStorageKey",
"Storage.untrackIndexedDBForOrigin",
"Storage.untrackIndexedDBForStorageKey",
"Target.activateTarget",
"Target.autoAttachRelated",
"Target.detachFromTarget",
"Target.disposeBrowserContext",
"Target.exposeDevToolsProtocol",
"Target.sendMessageToTarget",
"Target.setAutoAttach",
"Target.setDiscoverTargets",
"Target.setRemoteLocations",
"Tethering.bind",
"Tethering.unbind",
"Tracing.end",
"Tracing.recordClockSyncMarker",
"Tracing.start",
"WebAudio.disable",
"WebAudio.enable",
"WebAuthn.addCredential",
"WebAuthn.clearCredentials",
"WebAuthn.disable",
"WebAuthn.enable",
"WebAuthn.removeCredential",
"WebAuthn.removeVirtualAuthenticator",
"WebAuthn.setAutomaticPresenceSimulation",
"WebAuthn.setResponseOverrideBits",
"WebAuthn.setUserVerified",
];
const index = commands.reduce((acc, command) => {
acc[command] = true;
return acc;
}, {});
export function commandHasResponse(command) {
return !index[command];
}
// Domains available in the browser:
// (See https://developer.chrome.com/docs/extensions/reference/debugger/)
const inBrowserDomains = [
"Accessibility",
"Audits",
"CSS",
"CacheStorage",
"Console",
"DOM",
"DOMDebugger",
"DOMSnapshot",
"Database",
"Debugger",
"Emulation",
"Fetch",
"IO",
"Input",
"Inspector",
"Log",
"Network",
"Overlay",
"Page",
"Performance",
"Profiler",
"Runtime",
"Storage",
"Target",
"Tracing",
"WebAudio",
"WebAuthn",
];
const inBrowserDomainsIndex = inBrowserDomains.reduce((acc, domain) => {
acc[domain] = true;
return acc;
}, {});
export function isBrowserDomain(domain) {
return !!inBrowserDomainsIndex[domain];
}
export function isBrowserCommand(command) {
return isBrowserDomain(command.split(".")[0]);
}
export function checkCommandResponse(inBrowser) {
return commandHasResponse;
// if (!inBrowser) return commandHasResponse;
// else {
// return (command) =>
// isBrowserCommand(command) && commandHasResponse(command);
// }
}