UNPKG

@statewalker/webrun-devtools

Version:

DevTools Extension for the StateWalker WebRun framework

470 lines (462 loc) • 13.7 kB
// 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); // } }