Web Inspector: add ITML debuggable/target type
authordrousso@apple.com <drousso@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 29 May 2020 17:34:08 +0000 (17:34 +0000)
committerdrousso@apple.com <drousso@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 29 May 2020 17:34:08 +0000 (17:34 +0000)
https://bugs.webkit.org/show_bug.cgi?id=203300
<rdar://problem/56545896>

Reviewed by Joseph Pecoraro and Brian Burg.

Source/JavaScriptCore:

* API/JSContextPrivate.h:
* API/JSContext.mm:
(-[JSContext _setITMLDebuggableType]): Added.
* runtime/JSGlobalObject.h:
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::setIsITML): Added.
Create an SPI for marking a `JSContext` as an ITML context for Web Inspector.

* runtime/JSGlobalObjectDebuggable.h:
(isType):
* inspector/remote/RemoteControllableTarget.h:
* inspector/remote/RemoteInspectionTarget.h:
* inspector/remote/RemoteInspectorConstants.h:

* inspector/JSGlobalObjectInspectorController.cpp:
(Inspector::JSGlobalObjectInspectorController::connectFrontend):
Don't dispatch `Inspector.activateExtraDomains` unless we're a basic `JavaScript` debuggable.

* inspector/remote/cocoa/RemoteInspectorCocoa.mm:
(Inspector::RemoteInspector::listingForInspectionTarget const):

* inspector/scripts/codegen/models.py:
(validate_target_types):
* inspector/scripts/codegen/objc_generator.py:
(ObjCGenerator):
* inspector/scripts/tests/expected/fail-on-command-targetTypes-value.json-error:
* inspector/scripts/tests/expected/fail-on-domain-debuggableTypes-value.json-error:
* inspector/scripts/tests/expected/fail-on-domain-targetTypes-value.json-error:
* inspector/scripts/tests/expected/fail-on-event-targetTypes-value.json-error:

* inspector/protocol/Audit.json:
* inspector/protocol/CSS.json:
* inspector/protocol/Console.json:
* inspector/protocol/DOM.json:
* inspector/protocol/DOMStorage.json:
* inspector/protocol/Database.json:
* inspector/protocol/Debugger.json:
* inspector/protocol/Heap.json:
* inspector/protocol/Inspector.json:
* inspector/protocol/Network.json:
* inspector/protocol/Page.json:
* inspector/protocol/Runtime.json:
* inspector/protocol/Security.json:
Add support for `itml` debuggables and targets, marking non-ITML commands/events with `page`.

Source/WebInspectorUI:

* UserInterface/Base/DebuggableType.js:
(WI.DebuggableType.fromString):
(WI.DebuggableType.supportedTargetTypes): Added.
* UserInterface/Base/TargetType.js:
* UserInterface/Protocol/InspectorBackend.js:
(InspectorBackendClass.prototype.activateDomain):
* UserInterface/Controllers/TargetManager.js:
(WI.TargetManager.prototype.createDirectBackendTarget):
(WI.TargetManager.prototype._initializePageTarget):

* UserInterface/Protocol/RemoteObject.js:
(WI.RemoteObject.prototype.pushNodeToFrontend):
* UserInterface/Controllers/CSSManager.js:
(WI.CSSManager.supportsInspectorStyleSheet): Added.
* UserInterface/Controllers/DOMManager.js:
(WI.DOMManager.prototype.setInspectedNode):
* UserInterface/Controllers/LayerTreeManager.js:
(WI.LayerTreeManager.supportsVisibleCompositingBorders):
* UserInterface/Controllers/NetworkManager.js:
(WI.NetworkManager.prototype._loadAndParseSourceMap):
* UserInterface/Controllers/TimelineManager.js:
(WI.NetworkManager.defaultTimelineTypes):
(WI.NetworkManager.availableTimelineTypes):
(WI.NetworkManager.prototype.set autoCaptureOnPageLoad):
(WI.NetworkManager.prototype.scriptProfilerTrackingCompleted):
* UserInterface/Models/CSSCompletions.js:
(WI.CSSCompletions.initializeCSSCompletions):
* UserInterface/Models/CSSStyleDeclaration.js:
(WI.CSSStyleDeclaration.prototype.get selectorEditable):
* UserInterface/Models/CSSStyleSheet.js:
(WI.CSSStyleSheet.prototype.handleCurrentRevisionContentChange):
* UserInterface/Models/DOMNode.js:
(WI.DOMNode.prototype._makeUndoableCallback):
* UserInterface/Models/SourceMapResource.js:
(WI.SourceMapResource.prototype.requestContentFromBackend):
* UserInterface/Base/Main.js:
(WI._updateDownloadToolbarButton):
(WI.undo):
(WI.redo):
(WI.canArchiveMainFrame):
* UserInterface/Views/ComputedStyleDetailsPanel.js:
(WI.ComputedStyleDetailsPanel.prototype.refresh):
* UserInterface/Views/ContextMenuUtilities.js:
(WI.appendContextMenuItemsForDOMNode):
* UserInterface/Views/CookieStorageContentView.js:
(WI.CookieStorageContentView):
(WI.CookieStorageContentView.prototype.get navigationItems):
(WI.CookieStorageContentView.prototype.tableCellContextMenuClicked):
(WI.CookieStorageContentView.prototype._reloadCookies):
(WI.CookieStorageContentView.prototype._handleTableKeyDown):
* UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
(WI.DOMNodeDetailsSidebarPanel.prototype.initialLayout):
* UserInterface/Views/DOMTreeContentView.js:
(WI.DOMTreeContentView):
(WI.DOMTreeContentView.prototype._restoreSelectedNodeAfterUpdate):
(WI.DOMTreeContentView.prototype._showPrintStylesChanged):
* UserInterface/Views/DOMTreeElement.js:
(WI.DOMTreeElement.prototype.populateDOMNodeContextMenu):
(WI.DOMTreeElement.prototype._startEditingTagName):
* UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
(WI.GeneralStyleDetailsSidebarPanel.prototype.initialLayout):
* UserInterface/Views/SearchSidebarPanel.js:
(WI.SearchSidebarPanel.prototype.performSearch):
* UserInterface/Views/SourceCodeTextEditor.js:
(WI.SourceCodeTextEditor.prototype.customPerformSearch):
* UserInterface/Views/SourcesNavigationSidebarPanel.js:
(WI.SourcesNavigationSidebarPanel):
(WI.SourcesNavigationSidebarPanel.prototype._populateCreateResourceContextMenu):
* UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
(WI.SpreadsheetCSSStyleDeclarationSection.prototype._populateIconElementContextMenu):
* UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
(WI.SpreadsheetRulesStyleDetailsPanel.prototype.get supportsNewRule):
* UserInterface/Views/SpreadsheetStyleProperty.js:
(WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidBlur):
* UserInterface/Views/TimelineTabContentView.js:
(WI.TimelineTabContentView):

* UserInterface/Controllers/AppControllerBase.js:
(WI.AppControllerBase.prototype.get hasExtraDomains): Deleted.
* UserInterface/Controllers/AppController.js:
(WI.AppController):
(WI.AppController.prototype.activateExtraDomains):
(WI.AppController.prototype.get hasExtraDomains): Deleted.
* UserInterface/Test/TestAppController.js:
(WI.TestAppController.prototype.get hasExtraDomains): Deleted.

* UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/12.2/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/13.0/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/13.4/InspectorBackendCommands.js:
* Versions/Inspector-iOS-11.0.json:
* Versions/Inspector-iOS-11.3.json:
* Versions/Inspector-iOS-12.0.json:
* Versions/Inspector-iOS-12.2.json:
* Versions/Inspector-iOS-13.0.json:
* Versions/Inspector-iOS-13.4.json:
Update protocol files for older versions of iOS.

* Localizations/en.lproj/localizedStrings.js:

Source/WebKit:

* UIProcess/API/Cocoa/_WKInspectorDebuggableInfo.h:
* UIProcess/API/Cocoa/_WKInspectorDebuggableInfoInternal.h:
(fromWKInspectorDebuggableType):
(toWKInspectorDebuggableType):
* UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.h:
* UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
(legacyDebuggableTypeToModernDebuggableType):

* UIProcess/socket/RemoteInspectorProtocolHandler.cpp:
(WebKit::parseDebuggableTypeFromString):

LayoutTests:

* inspector/protocol/target-types-for-debuggable-type.html: Added.
* inspector/protocol/target-types-for-debuggable-type-expected.txt: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@262302 268f45cc-cd09-0410-ab3c-d52691b4dbfc

93 files changed:
LayoutTests/ChangeLog
LayoutTests/inspector/protocol/target-types-for-debuggable-type-expected.txt [new file with mode: 0644]
LayoutTests/inspector/protocol/target-types-for-debuggable-type.html [new file with mode: 0644]
Source/JavaScriptCore/API/JSContext.mm
Source/JavaScriptCore/API/JSContextPrivate.h
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp
Source/JavaScriptCore/inspector/protocol/Audit.json
Source/JavaScriptCore/inspector/protocol/CSS.json
Source/JavaScriptCore/inspector/protocol/Console.json
Source/JavaScriptCore/inspector/protocol/DOM.json
Source/JavaScriptCore/inspector/protocol/DOMStorage.json
Source/JavaScriptCore/inspector/protocol/Debugger.json
Source/JavaScriptCore/inspector/protocol/Heap.json
Source/JavaScriptCore/inspector/protocol/Inspector.json
Source/JavaScriptCore/inspector/protocol/Network.json
Source/JavaScriptCore/inspector/protocol/Page.json
Source/JavaScriptCore/inspector/protocol/Runtime.json
Source/JavaScriptCore/inspector/protocol/ScriptProfiler.json
Source/JavaScriptCore/inspector/protocol/Security.json
Source/JavaScriptCore/inspector/remote/RemoteControllableTarget.h
Source/JavaScriptCore/inspector/remote/RemoteInspectionTarget.h
Source/JavaScriptCore/inspector/remote/RemoteInspectorConstants.h
Source/JavaScriptCore/inspector/remote/cocoa/RemoteInspectorCocoa.mm
Source/JavaScriptCore/inspector/scripts/codegen/models.py
Source/JavaScriptCore/inspector/scripts/codegen/objc_generator.py
Source/JavaScriptCore/inspector/scripts/tests/expected/fail-on-command-targetTypes-value.json-error
Source/JavaScriptCore/inspector/scripts/tests/expected/fail-on-domain-debuggableTypes-value.json-error
Source/JavaScriptCore/inspector/scripts/tests/expected/fail-on-domain-targetTypes-value.json-error
Source/JavaScriptCore/inspector/scripts/tests/expected/fail-on-event-targetTypes-value.json-error
Source/JavaScriptCore/runtime/JSGlobalObject.cpp
Source/JavaScriptCore/runtime/JSGlobalObject.h
Source/JavaScriptCore/runtime/JSGlobalObjectDebuggable.h
Source/WebCore/inspector/InspectorDebuggableType.h
Source/WebCore/inspector/InspectorFrontendHost.cpp
Source/WebCore/inspector/agents/InspectorDOMAgent.cpp
Source/WebCore/inspector/agents/InspectorDOMAgent.h
Source/WebInspectorUI/ChangeLog
Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js
Source/WebInspectorUI/UserInterface/Base/DebuggableType.js
Source/WebInspectorUI/UserInterface/Base/Main.js
Source/WebInspectorUI/UserInterface/Base/TargetType.js
Source/WebInspectorUI/UserInterface/Controllers/AppController.js
Source/WebInspectorUI/UserInterface/Controllers/AppControllerBase.js
Source/WebInspectorUI/UserInterface/Controllers/CSSManager.js
Source/WebInspectorUI/UserInterface/Controllers/DOMManager.js
Source/WebInspectorUI/UserInterface/Controllers/DOMStorageManager.js
Source/WebInspectorUI/UserInterface/Controllers/LayerTreeManager.js
Source/WebInspectorUI/UserInterface/Controllers/NetworkManager.js
Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js
Source/WebInspectorUI/UserInterface/Controllers/TimelineManager.js
Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js
Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js
Source/WebInspectorUI/UserInterface/Models/CSSStyleSheet.js
Source/WebInspectorUI/UserInterface/Models/DOMNode.js
Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js
Source/WebInspectorUI/UserInterface/Protocol/DirectBackendTarget.js
Source/WebInspectorUI/UserInterface/Protocol/InspectorBackend.js
Source/WebInspectorUI/UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js
Source/WebInspectorUI/UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js
Source/WebInspectorUI/UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js
Source/WebInspectorUI/UserInterface/Protocol/Legacy/12.2/InspectorBackendCommands.js
Source/WebInspectorUI/UserInterface/Protocol/Legacy/13.0/InspectorBackendCommands.js
Source/WebInspectorUI/UserInterface/Protocol/Legacy/13.4/InspectorBackendCommands.js
Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js
Source/WebInspectorUI/UserInterface/Protocol/Target.js
Source/WebInspectorUI/UserInterface/Test/TestAppController.js
Source/WebInspectorUI/UserInterface/Views/ComputedStyleDetailsPanel.js
Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js
Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.js
Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js
Source/WebInspectorUI/UserInterface/Views/DOMTreeContentView.js
Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js
Source/WebInspectorUI/UserInterface/Views/GeneralStyleDetailsSidebarPanel.js
Source/WebInspectorUI/UserInterface/Views/SearchSidebarPanel.js
Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js
Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js
Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js
Source/WebInspectorUI/UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js
Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js
Source/WebInspectorUI/UserInterface/Views/TimelineTabContentView.js
Source/WebInspectorUI/Versions/Inspector-iOS-11.0.json
Source/WebInspectorUI/Versions/Inspector-iOS-11.3.json
Source/WebInspectorUI/Versions/Inspector-iOS-12.0.json
Source/WebInspectorUI/Versions/Inspector-iOS-12.2.json
Source/WebInspectorUI/Versions/Inspector-iOS-13.0.json
Source/WebInspectorUI/Versions/Inspector-iOS-13.4.json
Source/WebKit/ChangeLog
Source/WebKit/UIProcess/API/Cocoa/_WKInspectorDebuggableInfo.h
Source/WebKit/UIProcess/API/Cocoa/_WKInspectorDebuggableInfoInternal.h
Source/WebKit/UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.h
Source/WebKit/UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm
Source/WebKit/UIProcess/Inspector/socket/RemoteInspectorProtocolHandler.cpp

index 385b92f..c7295fc 100644 (file)
@@ -1,3 +1,14 @@
+2020-05-29  Devin Rousso  <drousso@apple.com>
+
+        Web Inspector: add ITML debuggable/target type
+        https://bugs.webkit.org/show_bug.cgi?id=203300
+        <rdar://problem/56545896>
+
+        Reviewed by Joseph Pecoraro and Brian Burg.
+
+        * inspector/protocol/target-types-for-debuggable-type.html: Added.
+        * inspector/protocol/target-types-for-debuggable-type-expected.txt: Added.
+
 2020-05-29  Jason Lawrence  <lawrence.j@apple.com>
 
         webkit-test-runner: Add support for the reftest-wait class name
diff --git a/LayoutTests/inspector/protocol/target-types-for-debuggable-type-expected.txt b/LayoutTests/inspector/protocol/target-types-for-debuggable-type-expected.txt
new file mode 100644 (file)
index 0000000..48061bc
--- /dev/null
@@ -0,0 +1,9 @@
+Tests to validate the relationship between debuggable types and target types.
+
+
+== Running test suite: WI.DebuggableType.supportedTargetTypes
+-- Running test case: WI.DebuggableType.supportedTargetTypes.WebPage
+PASS: Should have a 'DOM' domain.
+PASS: Should have a 'DOM.requestNode' command.
+PASS: Should not have a 'DOM.getDataBindingsForNode' command.
+
diff --git a/LayoutTests/inspector/protocol/target-types-for-debuggable-type.html b/LayoutTests/inspector/protocol/target-types-for-debuggable-type.html
new file mode 100644 (file)
index 0000000..5827066
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
+<script>
+function test()
+{
+    let suite = InspectorTest.createSyncSuite("WI.DebuggableType.supportedTargetTypes");
+
+    suite.addTestCase({
+        name: "WI.DebuggableType.supportedTargetTypes.WebPage",
+        description: "Check that protocol domains/events/commands with non-matching targets are not hooked up.",
+        test() {
+            InspectorTest.expectTrue(InspectorBackend.hasDomain("DOM"), "Should have a 'DOM' domain.");
+            InspectorTest.expectTrue(InspectorBackend.hasCommand("DOM.requestNode"), "Should have a 'DOM.requestNode' command.");
+            InspectorTest.expectFalse(InspectorBackend.hasCommand("DOM.getDataBindingsForNode"), "Should not have a 'DOM.getDataBindingsForNode' command.");
+        },
+    });
+
+    suite.runTestCasesAndFinish();
+}
+</script>
+</head>
+<body onload="runTest()">
+    <p>Tests to validate the relationship between debuggable types and target types.</p>
+</body>
+</html>
index e0f63a3..e65bca7 100644 (file)
     return [JSValue valueWithJSValueRef:toRef(vm, result) inContext:self];
 }
 
+- (void)_setITMLDebuggableType
+{
+    JSC::JSGlobalObject* globalObject = toJS(m_context);
+    JSC::VM& vm = globalObject->vm();
+    JSC::JSLockHolder locker(vm);
+
+    globalObject->setIsITML();
+}
+
 - (void)setException:(JSValue *)value
 {
     JSC::JSGlobalObject* globalObject = toJS(m_context);
index 75f526b..ee40207 100644 (file)
  */
 - (JSValue *)dependencyIdentifiersForModuleJSScript:(JSScript *)script JSC_API_AVAILABLE(macos(10.15), ios(13.0));
 
+/*!
+ @method
+ @abstract Mark this JSContext as an ITMLKit context for the purposes of remote inspection capabilities.
+ */
+- (void)_setITMLDebuggableType JSC_API_AVAILABLE(macos(JSC_MAC_TBA), ios(JSC_IOS_TBA));
+
 @end
 
 #endif
index 89d61c2..887270e 100644 (file)
@@ -1,3 +1,56 @@
+2020-05-29  Devin Rousso  <drousso@apple.com>
+
+        Web Inspector: add ITML debuggable/target type
+        https://bugs.webkit.org/show_bug.cgi?id=203300
+        <rdar://problem/56545896>
+
+        Reviewed by Joseph Pecoraro and Brian Burg.
+
+        * API/JSContextPrivate.h:
+        * API/JSContext.mm:
+        (-[JSContext _setITMLDebuggableType]): Added.
+        * runtime/JSGlobalObject.h:
+        * runtime/JSGlobalObject.cpp:
+        (JSC::JSGlobalObject::setIsITML): Added.
+        Create an SPI for marking a `JSContext` as an ITML context for Web Inspector.
+
+        * runtime/JSGlobalObjectDebuggable.h:
+        (isType):
+        * inspector/remote/RemoteControllableTarget.h:
+        * inspector/remote/RemoteInspectionTarget.h:
+        * inspector/remote/RemoteInspectorConstants.h:
+
+        * inspector/JSGlobalObjectInspectorController.cpp:
+        (Inspector::JSGlobalObjectInspectorController::connectFrontend):
+        Don't dispatch `Inspector.activateExtraDomains` unless we're a basic `JavaScript` debuggable.
+
+        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
+        (Inspector::RemoteInspector::listingForInspectionTarget const):
+
+        * inspector/scripts/codegen/models.py:
+        (validate_target_types):
+        * inspector/scripts/codegen/objc_generator.py:
+        (ObjCGenerator):
+        * inspector/scripts/tests/expected/fail-on-command-targetTypes-value.json-error:
+        * inspector/scripts/tests/expected/fail-on-domain-debuggableTypes-value.json-error:
+        * inspector/scripts/tests/expected/fail-on-domain-targetTypes-value.json-error:
+        * inspector/scripts/tests/expected/fail-on-event-targetTypes-value.json-error:
+
+        * inspector/protocol/Audit.json:
+        * inspector/protocol/CSS.json:
+        * inspector/protocol/Console.json:
+        * inspector/protocol/DOM.json:
+        * inspector/protocol/DOMStorage.json:
+        * inspector/protocol/Database.json:
+        * inspector/protocol/Debugger.json:
+        * inspector/protocol/Heap.json:
+        * inspector/protocol/Inspector.json:
+        * inspector/protocol/Network.json:
+        * inspector/protocol/Page.json:
+        * inspector/protocol/Runtime.json:
+        * inspector/protocol/Security.json:
+        Add support for `itml` debuggables and targets, marking non-ITML commands/events with `page`.
+
 2020-05-29  Mark Lam  <mark.lam@apple.com>
 
         Add a check for errors when computing a utf string in jsc shell's runInteractive().
index c974586..36cbf83 100644 (file)
@@ -115,7 +115,8 @@ void JSGlobalObjectInspectorController::connectFrontend(FrontendChannel& fronten
     m_agents.didCreateFrontendAndBackend(nullptr, nullptr);
 
 #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
-    ensureInspectorAgent().activateExtraDomains(m_agents.extraDomains());
+    if (m_globalObject.inspectorDebuggable().type() == Inspector::RemoteControllableTarget::Type::JavaScript)
+        ensureInspectorAgent().activateExtraDomains(m_agents.extraDomains());
 
     if (m_augmentingClient)
         m_augmentingClient->inspectorConnected();
@@ -269,7 +270,8 @@ void JSGlobalObjectInspectorController::appendExtraAgent(std::unique_ptr<Inspect
 
     m_agents.appendExtraAgent(WTFMove(agent));
 
-    ensureInspectorAgent().activateExtraDomain(domainName);
+    if (m_globalObject.inspectorDebuggable().type() == Inspector::RemoteControllableTarget::Type::JavaScript)
+        ensureInspectorAgent().activateExtraDomain(domainName);
 }
 #endif
 
index 12a28bc..82dd120 100644 (file)
@@ -2,7 +2,8 @@
     "domain": "Audit",
     "description": "",
     "version": 3,
-    "targetTypes": ["javascript", "page", "service-worker", "worker"],
+    "debuggableTypes": ["itml", "javascript", "page", "service-worker", "web-page"],
+    "targetTypes": ["itml", "javascript", "page", "service-worker", "worker"],
     "commands": [
         {
             "name": "setup",
index f9f5578..bc96db9 100644 (file)
@@ -1,8 +1,8 @@
 {
     "domain": "CSS",
     "description": "This domain exposes CSS read/write operations. All CSS objects, like stylesheets, rules, and styles, have an associated <code>id</code> used in subsequent operations on the related object. Each object type has a specific <code>id</code> structure, and those are not interchangeable between objects of different kinds. CSS objects can be loaded using the <code>get*ForNode()</code> calls (which accept a DOM node id). Alternatively, a client can discover all the existing stylesheets with the <code>getAllStyleSheets()</code> method and subsequently load the required stylesheet contents using the <code>getStyleSheet[Text]()</code> methods.",
-    "debuggableTypes": ["page", "web-page"],
-    "targetTypes": ["page"],
+    "debuggableTypes": ["itml", "page", "web-page"],
+    "targetTypes": ["itml", "page"],
     "types": [
         {
             "id": "StyleSheetId",
         {
             "name": "setRuleSelector",
             "description": "Modifies the rule selector.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "ruleId", "$ref": "CSSRuleId" },
                 { "name": "selector", "type": "string" }
         {
             "name": "createStyleSheet",
             "description": "Creates a new special \"inspector\" stylesheet in the frame with given <code>frameId</code>.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "frameId", "$ref": "Network.FrameId", "description": "Identifier of the frame where the new \"inspector\" stylesheet should be created." }
             ],
         {
             "name": "addRule",
             "description": "Creates a new empty rule with the given <code>selector</code> in a stylesheet with given <code>styleSheetId</code>.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "styleSheetId", "$ref": "StyleSheetId" },
                 { "name": "selector", "type": "string" }
         {
             "name": "getSupportedSystemFontFamilyNames",
             "description": "Returns all supported system font family names.",
+            "targetTypes": ["page"],
             "returns": [
                 { "name": "fontFamilyNames", "type": "array", "items": { "type": "string" }, "description": "Supported system font families." }
             ]
         {
             "name": "forcePseudoState",
             "description": "Ensures that the given node will have specified pseudo-classes whenever its style is computed by the browser.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "DOM.NodeId", "description": "The element id for which to force the pseudo state." },
                 { "name": "forcedPseudoClasses", "type": "array", "items": { "type": "string", "enum": ["active", "focus", "hover", "visited"] }, "description": "Element pseudo classes to force when computing the element's style." }
         {
             "name": "styleSheetAdded",
             "description": "Fired whenever an active document stylesheet is added.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "header", "$ref": "CSSStyleSheetHeader", "description": "Added stylesheet metainfo." }
             ]
         {
             "name": "styleSheetRemoved",
             "description": "Fired whenever an active document stylesheet is removed.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "styleSheetId", "$ref": "StyleSheetId", "description": "Identifier of the removed stylesheet." }
             ]
index 8160424..b36a0ee 100644 (file)
@@ -1,7 +1,8 @@
 {
     "domain": "Console",
     "description": "Console domain defines methods and events for interaction with the JavaScript console. Console collects messages created by means of the <a href='http://getfirebug.com/wiki/index.php/Console_API'>JavaScript Console API</a>. One needs to enable this domain using <code>enable</code> command in order to start receiving the console messages. Browser collects messages issued while console domain is not enabled as well and reports them using <code>messageAdded</code> notification upon enabling.",
-    "targetTypes": ["javascript", "page", "service-worker", "worker"],
+    "debuggableTypes": ["itml", "javascript", "page", "service-worker", "web-page"],
+    "targetTypes": ["itml", "javascript", "page", "service-worker", "worker"],
     "types": [
         {
             "id": "ChannelSource",
index 329b325..f3a7753 100644 (file)
@@ -1,8 +1,8 @@
 {
     "domain": "DOM",
     "description": "This domain exposes DOM read/write operations. Each DOM Node is represented with its mirror object that has an <code>id</code>. This <code>id</code> can be used to get additional information on the Node, resolve it into the JavaScript object wrapper, etc. It is important that client receives DOM events only for the nodes that are known to the client. Backend keeps track of the nodes that were sent to the client and never sends the same node twice. It is client's responsibility to collect information about the nodes that were sent to the client.<p>Note that <code>iframe</code> owner elements will return corresponding document elements as their child nodes.</p>",
-    "debuggableTypes": ["page", "web-page"],
-    "targetTypes": ["page"],
+    "debuggableTypes": ["itml", "page", "web-page"],
+    "targetTypes": ["itml", "page"],
     "types": [
         {
             "id": "NodeId",
         {
             "name": "querySelector",
             "description": "Executes <code>querySelector</code> on a given node.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to query upon." },
                 { "name": "selector", "type": "string", "description": "Selector string." }
         {
             "name": "querySelectorAll",
             "description": "Executes <code>querySelectorAll</code> on a given node.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to query upon." },
                 { "name": "selector", "type": "string", "description": "Selector string." }
         {
             "name": "setNodeName",
             "description": "Sets node name for a node with given id.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to set name for." },
                 { "name": "name", "type": "string", "description": "New node's name." }
         {
             "name": "getDataBindingsForNode",
             "description": "Returns all data binding relationships between data that is associated with the node and the node itself.",
+            "condition": "defined(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) && ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS",
+            "targetTypes": ["itml"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to get data bindings for." }
             ],
         {
             "name": "getAssociatedDataForNode",
             "description": "Returns all data that has been associated with the node and is available for data binding.",
+            "condition": "defined(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS) && ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS",
+            "targetTypes": ["itml"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to get associated data for." }
             ],
         {
             "name": "setBreakpointForEventListener",
             "description": "Set a breakpoint on the given event listener.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "eventListenerId", "$ref": "EventListenerId" }
             ]
         {
             "name": "removeBreakpointForEventListener",
             "description": "Remove any breakpoints on the given event listener.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "eventListenerId", "$ref": "EventListenerId" }
             ]
         },
         {
             "name": "insertAdjacentHTML",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId" },
                 { "name": "position", "type": "string" },
         {
             "name": "requestNode",
             "description": "Requests that the node is sent to the caller given the JavaScript node object reference. All nodes that form the path from the node to the root are also sent to the client as a series of <code>setChildNodes</code> notifications.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "objectId", "$ref": "Runtime.RemoteObjectId", "description": "JavaScript object id to convert into node." }
             ],
         {
             "name": "highlightRect",
             "description": "Highlights given rectangle. Coordinates are absolute with respect to the main frame viewport.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "x", "type": "integer", "description": "X coordinate" },
                 { "name": "y", "type": "integer", "description": "Y coordinate" },
         {
             "name": "highlightQuad",
             "description": "Highlights given quad. Coordinates are absolute with respect to the main frame viewport.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "quad", "$ref": "Quad", "description": "Quad to highlight" },
                 { "name": "color", "$ref": "RGBAColor", "optional": true, "description": "The highlight fill color (default: transparent)." },
         {
             "name": "highlightSelector",
             "description": "Highlights all DOM nodes that match a given selector. A string containing a CSS selector must be specified.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "highlightConfig", "$ref": "HighlightConfig", "description": "A descriptor for the highlight appearance." },
                 { "name": "selectorString", "type": "string", "description": "A CSS selector for finding matching nodes to highlight." },
         },
         {
             "name": "highlightFrame",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "frameId", "$ref": "Network.FrameId", "description": "Identifier of the frame to highlight." },
                 { "name": "contentColor", "$ref": "RGBAColor", "optional": true, "description": "The content box highlight fill color (default: transparent)." },
         {
             "name": "pushNodeByPathToFrontend",
             "description": "Requests that the node is sent to the caller given its path.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "path", "type": "string", "description": "Path to node in the proprietary format." }
             ],
         {
             "name": "resolveNode",
             "description": "Resolves JavaScript node object for given node id.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to resolve." },
                 { "name": "objectGroup", "type": "string", "optional": true, "description": "Symbolic group name that can be used to release multiple objects." }
         },
         {
             "name": "undo",
-            "description": "Undoes the last performed action."
+            "description": "Undoes the last performed action.",
+            "targetTypes": ["page"]
         },
         {
             "name": "redo",
-            "description": "Re-does the last undone action."
+            "description": "Re-does the last undone action.",
+            "targetTypes": ["page"]
         },
         {
             "name": "markUndoableState",
-            "description": "Marks last undoable state."
+            "description": "Marks last undoable state.",
+            "targetTypes": ["page"]
         },
         {
             "name": "focus",
             "description": "Focuses the given element.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId", "description": "Id of the node to focus." }
             ]
         {
             "name": "setInspectedNode",
             "description": "Enables console to refer to the node with given id via $0 (see Command Line API for more details).",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId", "description": "DOM node id to be accessible by means of $0 command line API." }
             ]
         {
             "name": "setAllowEditingUserAgentShadowTrees",
             "description": "Controls whether any DOM commands work for nodes inside a UserAgent shadow tree.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "allow", "type": "boolean" }
             ]
         {
             "name": "shadowRootPushed",
             "description": "Called when shadow root is pushed into the element.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "hostId", "$ref": "NodeId", "description": "Host element id." },
                 { "name": "root", "$ref": "Node", "description": "Shadow root." }
         {
             "name": "shadowRootPopped",
             "description": "Called when shadow root is popped from the element.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "hostId", "$ref": "NodeId", "description": "Host element id." },
                 { "name": "rootId", "$ref": "NodeId", "description": "Shadow root id." }
         {
             "name": "customElementStateChanged",
             "description": "Called when the custom element state is changed.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId", "description": "Element id." },
                 { "name": "customElementState", "$ref": "CustomElementState", "description": "Custom element state." }
         {
             "name": "pseudoElementAdded",
             "description": "Called when a pseudo element is added to an element.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "parentId", "$ref": "NodeId", "description": "Pseudo element's parent element id." },
                 { "name": "pseudoElement", "$ref": "Node", "description": "The added pseudo element." }
         {
             "name": "pseudoElementRemoved",
             "description": "Called when a pseudo element is removed from an element.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "parentId", "$ref": "NodeId", "description": "Pseudo element's parent element id." },
                 { "name": "pseudoElementId", "$ref": "NodeId", "description": "The removed pseudo element id." }
         {
             "name": "didFireEvent",
             "description": "Called when an event is fired on a node.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId" },
                 { "name": "eventName", "type": "string" },
             "name": "powerEfficientPlaybackStateChanged",
             "description": "Called when an element enters/exits a power efficient playback state.",
             "condition": "defined(ENABLE_VIDEO) && ENABLE_VIDEO",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "NodeId" },
                 { "name": "timestamp", "$ref": "Network.Timestamp" },
index ad00dd7..d687c9f 100644 (file)
@@ -1,8 +1,8 @@
 {
     "domain": "DOMStorage",
     "description": "Query and modify DOM storage.",
-    "debuggableTypes": ["page", "web-page"],
-    "targetTypes": ["page"],
+    "debuggableTypes": ["itml", "page", "web-page"],
+    "targetTypes": ["itml", "page"],
     "types": [
         {
             "id": "StorageId",
@@ -55,6 +55,7 @@
         },
         {
             "name": "clearDOMStorageItems",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "storageId", "$ref": "StorageId" }
             ]
index d1dce57..7e8f459 100644 (file)
@@ -1,7 +1,8 @@
 {
     "domain": "Debugger",
     "description": "Debugger domain exposes JavaScript debugging capabilities. It allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc.",
-    "targetTypes": ["javascript", "page", "service-worker", "worker"],
+    "debuggableTypes": ["itml", "javascript", "page", "service-worker", "web-page"],
+    "targetTypes": ["itml", "javascript", "page", "service-worker", "worker"],
     "types": [
         {
             "id": "BreakpointId",
index 2f37f75..dec4e86 100644 (file)
@@ -1,7 +1,8 @@
 {
     "domain": "Heap",
     "description": "Heap domain exposes JavaScript heap attributes and capabilities.",
-    "targetTypes": ["javascript", "page", "service-worker", "worker"],
+    "debuggableTypes": ["itml", "javascript", "page", "service-worker", "web-page"],
+    "targetTypes": ["itml", "javascript", "page", "service-worker", "worker"],
     "types": [
         {
             "id": "GarbageCollection",
index 7ae2e99..048880f 100644 (file)
@@ -1,7 +1,7 @@
 {
     "domain": "Inspector",
-    "debuggableTypes": ["javascript", "page", "web-page"],
-    "targetTypes": ["javascript", "page"],
+    "debuggableTypes": ["itml", "javascript", "page", "web-page"],
+    "targetTypes": ["itml", "javascript", "page"],
     "commands": [
         {
             "name": "enable",
index 777a541..f2425dd 100644 (file)
@@ -1,8 +1,8 @@
 {
     "domain": "Network",
     "description": "Network domain allows tracking network activities of the page. It exposes information about http, file, data and other requests and responses, their headers, bodies, timing, etc.",
-    "debuggableTypes": ["page", "service-worker", "web-page"],
-    "targetTypes": ["page", "service-worker"],
+    "debuggableTypes": ["itml", "page", "service-worker", "web-page"],
+    "targetTypes": ["itml", "page", "service-worker"],
     "types": [
         {
             "id": "LoaderId",
         {
             "name": "setExtraHTTPHeaders",
             "description": "Specifies whether to always send extra HTTP headers with the requests from this page.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "headers", "$ref": "Headers", "description": "Map with extra HTTP headers." }
             ]
         {
             "name": "loadResource",
             "description": "Loads a resource in the context of a frame on the inspected page without cross origin checks.",
+            "targetTypes": ["page"],
             "async": true,
             "parameters": [
                 { "name": "frameId", "$ref": "FrameId", "description": "Frame to load the resource from." },
         {
             "name": "getSerializedCertificate",
             "description": "Fetches a serialized secure certificate for the given requestId to be displayed via InspectorFrontendHost.showCertificate.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId" }
             ],
         {
             "name": "resolveWebSocket",
             "description": "Resolves JavaScript WebSocket object for given request id.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId", "description": "Identifier of the WebSocket resource to resolve." },
                 { "name": "objectGroup", "type": "string", "optional": true, "description": "Symbolic group name that can be used to release multiple objects." }
         {
             "name": "setInterceptionEnabled",
             "description": "Enable interception of network requests.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "enabled", "type": "boolean" }
             ]
         {
             "name": "addInterception",
             "description": "Add an interception.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "url", "type": "string" },
                 { "name": "caseSensitive", "type": "boolean", "optional": true, "description": "If false, ignores letter casing of `url` parameter." },
         {
             "name": "removeInterception",
             "description": "Remove an interception.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "url", "type": "string" },
                 { "name": "caseSensitive", "type": "boolean", "optional": true, "description": "If false, ignores letter casing of `url` parameter." },
         {
             "name": "interceptContinue",
             "description": "Continue an interception with no modifications.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId", "description": "Identifier for the intercepted Network request or response to continue." }
             ]
         {
             "name": "interceptWithResponse",
             "description": "Provide response content for an intercepted response.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId", "description": "Identifier for the intercepted Network response to modify." },
                 { "name": "content", "type": "string" },
         {
             "name": "responseIntercepted",
             "description": "Fired when HTTP response has been intercepted. The frontend must response with <code>Network.interceptContinue</code> or <code>Network.interceptWithRespons</code>` to continue this response.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId", "description": "Identifier for this intercepted network. Corresponds with an earlier <code>Network.requestWillBeSent</code>." },
                 { "name": "response", "$ref": "Response", "description": "Original response content that would proceed if this is continued." }
         {
             "name": "webSocketWillSendHandshakeRequest",
             "description": "Fired when WebSocket is about to initiate handshake.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId", "description": "Request identifier." },
                 { "name": "timestamp", "$ref": "Timestamp" },
         {
             "name": "webSocketHandshakeResponseReceived",
             "description": "Fired when WebSocket handshake response becomes available.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId", "description": "Request identifier." },
                 { "name": "timestamp", "$ref": "Timestamp" },
         {
             "name": "webSocketCreated",
             "description": "Fired upon WebSocket creation.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId", "description": "Request identifier." },
                 { "name": "url", "type": "string", "description": "WebSocket request URL." }
         {
             "name": "webSocketClosed",
             "description": "Fired when WebSocket is closed.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId", "description": "Request identifier." },
                 { "name": "timestamp", "$ref": "Timestamp", "description": "Timestamp." }
         {
             "name": "webSocketFrameReceived",
             "description": "Fired when WebSocket frame is received.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId", "description": "Request identifier." },
                 { "name": "timestamp", "$ref": "Timestamp", "description": "Timestamp." },
         {
             "name": "webSocketFrameError",
             "description": "Fired when WebSocket frame error occurs.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId", "description": "Request identifier." },
                 { "name": "timestamp", "$ref": "Timestamp", "description": "Timestamp." },
         {
             "name": "webSocketFrameSent",
             "description": "Fired when WebSocket frame is sent.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "requestId", "$ref": "RequestId", "description": "Request identifier." },
                 { "name": "timestamp", "$ref": "Timestamp", "description": "Timestamp." },
index 4f70977..3b8fa18 100644 (file)
@@ -1,8 +1,8 @@
 {
     "domain": "Page",
     "description": "Actions and events related to the inspected page belong to the page domain.",
-    "debuggableTypes": ["page", "web-page"],
-    "targetTypes": ["page"],
+    "debuggableTypes": ["itml", "page", "web-page"],
+    "targetTypes": ["itml", "page"],
     "types": [
         {
             "id": "Setting",
         {
             "name": "navigate",
             "description": "Navigates current page to the given URL.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "url", "type": "string", "description": "URL to navigate the page to." }
             ]
         {
             "name": "overrideUserAgent",
             "description": "Override's the user agent of the inspected page",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "value", "type": "string", "optional": true, "description": "Value to override the user agent with. If this value is not provided, the override is removed. Overrides are removed when Web Inspector closes/disconnects." }
             ]
         {
             "name": "overrideSetting",
             "description": "Allows the frontend to override the inspected page's settings.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "setting", "$ref": "Setting" },
                 { "name": "value", "type": "boolean", "optional": true, "description": "Value to override the setting with. If this value is not provided, the override is removed. Overrides are removed when Web Inspector closes/disconnects." }
         {
             "name": "getCookies",
             "description": "Returns all browser cookies. Depending on the backend support, will return detailed cookie information in the <code>cookies</code> field.",
+            "targetTypes": ["page"],
             "returns": [
                 { "name": "cookies", "type": "array", "items": { "$ref": "Cookie"}, "description": "Array of cookie objects." }
             ]
         {
             "name": "setCookie",
             "description": "Sets a new browser cookie with the given name, domain, and path.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "cookie", "$ref": "Cookie" }
             ]
         {
             "name": "deleteCookie",
             "description": "Deletes browser cookie with given name, domain, and path.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "cookieName", "type": "string", "description": "Name of the cookie to remove." },
                 { "name": "url", "type": "string", "description": "URL to match cookie domain and path." }
         },
         {
             "name": "setBootstrapScript",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "source", "type": "string", "optional": true, "description": "If `source` is provided (and not empty), it will be injected into all future global objects as soon as they're created. Omitting `source` will stop this from happening." }
             ]
         {
             "name": "searchInResource",
             "description": "Searches for given string in resource content.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "frameId", "$ref": "Network.FrameId", "description": "Frame id for resource to search in." },
                 { "name": "url", "type": "string", "description": "URL of the resource to search in." },
         {
             "name": "searchInResources",
             "description": "Searches for given string in frame / resource tree structure.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "text", "type": "string", "description": "String to search for." },
                 { "name": "caseSensitive", "type": "boolean", "optional": true, "description": "If true, search is case sensitive." },
             "name": "setShowRulers",
             "description": "Requests that backend draw rulers in the inspector overlay",
             "condition": "!(defined(WTF_PLATFORM_IOS_FAMILY) && WTF_PLATFORM_IOS_FAMILY)",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "result", "type": "boolean", "description": "True for showing rulers" }
             ]
         {
             "name": "setShowPaintRects",
             "description": "Requests that backend shows paint rectangles",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "result", "type": "boolean", "description": "True for showing paint rectangles" }
             ]
         {
             "name": "setEmulatedMedia",
             "description": "Emulates the given media for CSS media queries.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "media", "type": "string", "description": "Media type to emulate. Empty string disables the override." }
             ]
             "name": "setForcedAppearance",
             "description": "Forces the given appearance for the page.",
             "condition": "(defined(ENABLE_DARK_MODE_CSS) && ENABLE_DARK_MODE_CSS) || (defined(HAVE_OS_DARK_MODE_SUPPORT) && HAVE_OS_DARK_MODE_SUPPORT)",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "appearance", "$ref": "Appearance", "description": "Appearance name to force. Empty string disables the override." }
             ]
         {
             "name": "snapshotNode",
             "description": "Capture a snapshot of the specified node that does not include unrelated layers.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "nodeId", "$ref": "DOM.NodeId", "description": "Id of the node to snapshot." }
             ],
         {
             "name": "snapshotRect",
             "description": "Capture a snapshot of the page within the specified rectangle and coordinate system.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "x", "type": "integer", "description": "X coordinate" },
                 { "name": "y", "type": "integer", "description": "Y coordinate" },
             "name": "archive",
             "description": "Grab an archive of the page.",
             "condition": "(defined(ENABLE_WEB_ARCHIVE) && ENABLE_WEB_ARCHIVE) && (defined(USE_CF) && USE_CF)",
+            "targetTypes": ["page"],
             "returns": [
                 { "name": "data", "type": "string", "description": "Base64-encoded web archive." }
             ]
     "events": [
         {
             "name": "domContentEventFired",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "timestamp", "type": "number" }
             ]
         },
         {
             "name": "loadEventFired",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "timestamp", "type": "number" }
             ]
         {
             "name": "frameDetached",
             "description": "Fired when frame has been detached from its parent.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "frameId", "$ref": "Network.FrameId", "description": "Id of the frame that has been detached." }
             ]
         {
             "name": "frameScheduledNavigation",
             "description": "Fired when frame schedules a potential navigation.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "frameId", "$ref": "Network.FrameId", "description": "Id of the frame that has scheduled a navigation." },
                 { "name": "delay", "type": "number", "description": "Delay (in seconds) until the navigation is scheduled to begin. The navigation is not guaranteed to start." }
         {
             "name": "frameClearedScheduledNavigation",
             "description": "Fired when frame no longer has a scheduled navigation.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "frameId", "$ref": "Network.FrameId", "description": "Id of the frame that has cleared its scheduled navigation." }
             ]
             "name": "defaultAppearanceDidChange",
             "description": "Fired when page's default appearance changes, even if there is a forced appearance.",
             "condition": "(defined(ENABLE_DARK_MODE_CSS) && ENABLE_DARK_MODE_CSS) || (defined(HAVE_OS_DARK_MODE_SUPPORT) && HAVE_OS_DARK_MODE_SUPPORT)",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "appearance", "$ref": "Appearance", "description": "Name of the appearance that is active (not considering any forced appearance.)" }
             ]
index 6eebc4a..274b015 100644 (file)
@@ -1,7 +1,8 @@
 {
     "domain": "Runtime",
     "description": "Runtime domain exposes JavaScript runtime by means of remote evaluation and mirror objects. Evaluation results are returned as mirror object that expose object type, string representation and unique identifier that can be used for further object reference. Original objects are maintained in memory unless they are either explicitly released or are released along with the other objects in their object group.",
-    "targetTypes": ["javascript", "page", "service-worker", "worker"],
+    "debuggableTypes": ["itml", "javascript", "page", "service-worker", "web-page"],
+    "targetTypes": ["itml", "javascript", "page", "service-worker", "worker"],
     "types": [
         {
             "id": "RemoteObjectId",
index d7136cc..50e3bd0 100644 (file)
@@ -1,8 +1,8 @@
 {
     "domain": "ScriptProfiler",
     "description": "Profiler domain exposes JavaScript evaluation timing and profiling.",
-    "debuggableTypes": ["javascript", "page", "web-page"],
-    "targetTypes": ["javascript", "page"],
+    "debuggableTypes": ["itml", "javascript", "page", "web-page"],
+    "targetTypes": ["itml", "javascript", "page"],
     "types": [
         {
             "id": "EventType",
index 97bcb1c..4645299 100644 (file)
@@ -1,8 +1,8 @@
 {
     "domain": "Security",
     "description": "Security domain allows the frontend to query for information relating to the security of the page (e.g. HTTPS info, TLS info, user activity, etc.).",
-    "debuggableTypes": ["page", "service-worker", "web-page"],
-    "targetTypes": ["page", "service-worker"],
+    "debuggableTypes": ["itml", "page", "service-worker", "web-page"],
+    "targetTypes": ["itml", "page", "service-worker"],
     "types": [
         {
             "id": "Connection",
index e715966..20d974d 100644 (file)
@@ -55,6 +55,7 @@ public:
 
     enum class Type {
         Automation,
+        ITML,
         JavaScript,
         Page,
         ServiceWorker,
index 83b87f9..b55e627 100644 (file)
@@ -46,8 +46,8 @@ public:
     void setTargetRunLoop(CFRunLoopRef runLoop) { m_runLoop = runLoop; }
 #endif
 
-    virtual String name() const { return String(); } // JavaScript and Web
-    virtual String url() const { return String(); } // Web
+    virtual String name() const { return String(); } // ITML JavaScript Page ServiceWorker WebPage
+    virtual String url() const { return String(); } // Page ServiceWorker WebPage
     virtual bool hasLocalDebugger() const = 0;
 
     virtual void setIndicating(bool) { } // Default is to do nothing.
index 4300488..0048561 100644 (file)
@@ -74,6 +74,7 @@
 #define WIRConnectionDiedMessage                @"WIRConnectionDiedMessage"
 #define WIRTypeKey                              @"WIRTypeKey"
 #define WIRTypeAutomation                       @"WIRTypeAutomation"
+#define WIRTypeITML                             @"WIRTypeITML"
 #define WIRTypeJavaScript                       @"WIRTypeJavaScript"
 #define WIRTypePage                             @"WIRTypePage"
 #define WIRTypeServiceWorker                    @"WIRTypeServiceWorker"
index 7e8486f..430a317 100644 (file)
@@ -379,6 +379,10 @@ RetainPtr<NSDictionary> RemoteInspector::listingForInspectionTarget(const Remote
     [listing setObject:@(target.targetIdentifier()) forKey:WIRTargetIdentifierKey];
 
     switch (target.type()) {
+    case RemoteInspectionTarget::Type::ITML:
+        [listing setObject:target.name() forKey:WIRTypeKey];
+        [listing setObject:WIRTypeITML forKey:WIRTypeKey];
+        break;
     case RemoteInspectionTarget::Type::JavaScript:
         [listing setObject:target.name() forKey:WIRTitleKey];
         [listing setObject:WIRTypeJavaScript forKey:WIRTypeKey];
index 1df2bdf..45376f1 100755 (executable)
@@ -41,17 +41,20 @@ def find_duplicates(l):
 def validate_target_types(debuggable_types, target_types):
     for target_type in target_types:
         required_debuggable_types = set()
-        if target_type == 'javascript':
-            if not 'javascript' in debuggable_types:
+        if target_type == 'itml':
+            if 'itml' not in debuggable_types:
+                return False
+        elif target_type == 'javascript':
+            if 'javascript' not in debuggable_types:
                 return False
         elif target_type == 'page' or target_type == 'worker':
-            if not 'page' in debuggable_types:
+            if 'page' not in debuggable_types:
                 return False
         elif target_type == 'service-worker':
-            if not 'service-worker' in debuggable_types:
+            if 'service-worker' not in debuggable_types:
                 return False
         elif target_type == 'web-page':
-            if not 'web-page' in debuggable_types:
+            if 'web-page' not in debuggable_types:
                 return False
     return True
 
@@ -84,8 +87,8 @@ _FRAMEWORK_CONFIG_MAP = {
     }
 }
 
-_ALLOWED_DEBUGGABLE_TYPE_STRINGS = frozenset(['javascript', 'page', 'service-worker', 'web-page'])
-_ALLOWED_TARGET_TYPE_STRINGS = frozenset(['javascript', 'page', 'service-worker', 'web-page', 'worker'])
+_ALLOWED_DEBUGGABLE_TYPE_STRINGS = frozenset(['itml', 'javascript', 'page', 'service-worker', 'web-page'])
+_ALLOWED_TARGET_TYPE_STRINGS = frozenset(['itml', 'javascript', 'page', 'service-worker', 'web-page', 'worker'])
 
 
 class ParseException(Exception):
index 682fc7f..3508503 100755 (executable)
@@ -122,7 +122,7 @@ class ObjCGenerator(Generator):
 
     # Generate ObjC types, command handlers, and event dispatchers for a subset of domains.
 
-    DOMAINS_TO_GENERATE = ['CSS', 'DOM', 'DOMDebugger', 'DOMStorage', 'Network', 'Security', 'Page', 'Automation', 'GenericTypes']
+    DOMAINS_TO_GENERATE = ['CSS', 'DOM', 'DOMStorage', 'Network', 'Security', 'Page', 'Automation', 'GenericTypes']
 
     def should_generate_types_for_domain(self, domain):
         if not len(self.type_declarations_for_domain(domain)):
index 21a3656..d395f83 100644 (file)
@@ -1 +1 @@
-ERROR: Malformed domain specification: targetTypes list for command PageOnly is an unsupported string. Was: "[u'pagee']", Allowed values: service-worker, javascript, worker, page, web-page
+ERROR: Malformed domain specification: targetTypes list for command PageOnly is an unsupported string. Was: "[u'pagee']", Allowed values: service-worker, itml, javascript, worker, page, web-page
index bf71d47..d09d2ef 100644 (file)
@@ -1 +1 @@
-ERROR: Malformed domain specification: debuggableTypes for domain WebOnly is an unsupported string. Was: "[u'webb']", Allowed values: service-worker, javascript, page, web-page
+ERROR: Malformed domain specification: debuggableTypes for domain WebOnly is an unsupported string. Was: "[u'webb']", Allowed values: itml, service-worker, javascript, page, web-page
index 46807f7..5c5e8ef 100644 (file)
@@ -1 +1 @@
-ERROR: Malformed domain specification: targetTypes for domain PageOnly is an unsupported string. Was: "[u'pagee']", Allowed values: service-worker, javascript, worker, page, web-page
+ERROR: Malformed domain specification: targetTypes for domain PageOnly is an unsupported string. Was: "[u'pagee']", Allowed values: service-worker, itml, javascript, worker, page, web-page
index 83012a9..1752986 100644 (file)
@@ -1 +1 @@
-ERROR: Malformed domain specification: targetTypes for event PageOnly is an unsupported string. Was: "[u'pagee']", Allowed values: service-worker, javascript, worker, page, web-page
+ERROR: Malformed domain specification: targetTypes for event PageOnly is an unsupported string. Was: "[u'pagee']", Allowed values: service-worker, itml, javascript, worker, page, web-page
index cea8f84..cf3e0ae 100644 (file)
@@ -2144,6 +2144,13 @@ bool JSGlobalObject::remoteDebuggingEnabled() const
 #endif
 }
 
+void JSGlobalObject::setIsITML()
+{
+#if ENABLE(REMOTE_INSPECTOR)
+    m_inspectorDebuggable->setIsITML();
+#endif
+}
+
 void JSGlobalObject::setName(const String& name)
 {
     m_name = name;
index d21215d..2bf61eb 100644 (file)
@@ -796,6 +796,8 @@ public:
     JS_EXPORT_PRIVATE void setRemoteDebuggingEnabled(bool);
     JS_EXPORT_PRIVATE bool remoteDebuggingEnabled() const;
 
+    void setIsITML();
+
     RegExpGlobalData& regExpGlobalData() { return m_regExpGlobalData; }
     static ptrdiff_t regExpGlobalDataOffset() { return OBJECT_OFFSETOF(JSGlobalObject, m_regExpGlobalData); }
 
index 7cbc0c2..97c2197 100644 (file)
@@ -46,7 +46,8 @@ public:
     JSGlobalObjectDebuggable(JSGlobalObject&);
     ~JSGlobalObjectDebuggable() { }
 
-    Inspector::RemoteControllableTarget::Type type() const final { return Inspector::RemoteControllableTarget::Type::JavaScript; }
+    Inspector::RemoteControllableTarget::Type type() const final { return m_type; }
+    void setIsITML() { m_type = Inspector::RemoteControllableTarget::Type::ITML; }
 
     String name() const final;
     bool hasLocalDebugger() const final { return false; }
@@ -60,10 +61,17 @@ public:
 
 private:
     JSGlobalObject& m_globalObject;
+    Inspector::RemoteControllableTarget::Type m_type { Inspector::RemoteControllableTarget::Type::JavaScript };
 };
 
 } // namespace JSC
 
-SPECIALIZE_TYPE_TRAITS_CONTROLLABLE_TARGET(JSC::JSGlobalObjectDebuggable, JavaScript);
+SPECIALIZE_TYPE_TRAITS_BEGIN(JSC::JSGlobalObjectDebuggable)
+    static bool isType(const Inspector::RemoteControllableTarget& target)
+    {
+        return target.type() == Inspector::RemoteControllableTarget::Type::JavaScript
+            || target.type() == Inspector::RemoteControllableTarget::Type::ITML;
+    }
+SPECIALIZE_TYPE_TRAITS_END()
 
 #endif // ENABLE(REMOTE_INSPECTOR)
index 5ad5a21..b443439 100644 (file)
@@ -28,6 +28,7 @@
 namespace Inspector {
 
 enum class DebuggableType : uint8_t {
+    ITML,          // -[JSContext _setITMLDebuggableType]
     JavaScript,    // JSC::JSGlobalObject
     Page,          // WebCore::Page
     ServiceWorker, // WebCore::ServiceWorkerThreadProxy
@@ -41,6 +42,7 @@ namespace WTF {
 template<> struct EnumTraits<Inspector::DebuggableType> {
     using values = EnumValues<
     Inspector::DebuggableType,
+    Inspector::DebuggableType::ITML,
     Inspector::DebuggableType::JavaScript,
     Inspector::DebuggableType::Page,
     Inspector::DebuggableType::ServiceWorker,
index 248f492..f1a72ad 100644 (file)
@@ -336,6 +336,8 @@ String InspectorFrontendHost::backendCommandsURL() const
 static String debuggableTypeToString(DebuggableType debuggableType)
 {
     switch (debuggableType) {
+    case DebuggableType::ITML:
+        return "itml"_s;
     case DebuggableType::JavaScript:
         return "javascript"_s;
     case DebuggableType::Page:
index c35a058..912999f 100644 (file)
@@ -885,6 +885,7 @@ void InspectorDOMAgent::getSupportedEventNames(ErrorString&, RefPtr<JSON::ArrayO
 #undef DOM_EVENT_NAMES_ADD
 }
 
+#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
 void InspectorDOMAgent::getDataBindingsForNode(ErrorString& errorString, int /* nodeId */, RefPtr<JSON::ArrayOf<Inspector::Protocol::DOM::DataBinding>>& /* dataBindings */)
 {
     errorString = "Not supported"_s;
@@ -894,6 +895,7 @@ void InspectorDOMAgent::getAssociatedDataForNode(ErrorString& errorString, int /
 {
     errorString = "Not supported"_s;
 }
+#endif
 
 void InspectorDOMAgent::getEventListenersForNode(ErrorString& errorString, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::DOM::EventListener>>& listenersArray)
 {
index e8a74f6..7e6d3f6 100644 (file)
@@ -119,8 +119,10 @@ public:
     void insertAdjacentHTML(ErrorString&, int nodeId, const String& position, const String& html) override;
     void setNodeValue(ErrorString&, int nodeId, const String& value) override;
     void getSupportedEventNames(ErrorString&, RefPtr<JSON::ArrayOf<String>>& eventNames) override;
+#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
     void getDataBindingsForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::DOM::DataBinding>>& dataArray) override;
     void getAssociatedDataForNode(ErrorString&, int nodeId, Optional<String>& associatedData) override;
+#endif
     void getEventListenersForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::DOM::EventListener>>& listenersArray) override;
     void setEventListenerDisabled(ErrorString&, int eventListenerId, bool disabled) override;
     void setBreakpointForEventListener(ErrorString&, int eventListenerId) override;
index d8fde29..3cfba2c 100644 (file)
@@ -1,3 +1,113 @@
+2020-05-29  Devin Rousso  <drousso@apple.com>
+
+        Web Inspector: add ITML debuggable/target type
+        https://bugs.webkit.org/show_bug.cgi?id=203300
+        <rdar://problem/56545896>
+
+        Reviewed by Joseph Pecoraro and Brian Burg.
+
+        * UserInterface/Base/DebuggableType.js:
+        (WI.DebuggableType.fromString):
+        (WI.DebuggableType.supportedTargetTypes): Added.
+        * UserInterface/Base/TargetType.js:
+        * UserInterface/Protocol/InspectorBackend.js:
+        (InspectorBackendClass.prototype.activateDomain):
+        * UserInterface/Controllers/TargetManager.js:
+        (WI.TargetManager.prototype.createDirectBackendTarget):
+        (WI.TargetManager.prototype._initializePageTarget):
+
+        * UserInterface/Protocol/RemoteObject.js:
+        (WI.RemoteObject.prototype.pushNodeToFrontend):
+        * UserInterface/Controllers/CSSManager.js:
+        (WI.CSSManager.supportsInspectorStyleSheet): Added.
+        * UserInterface/Controllers/DOMManager.js:
+        (WI.DOMManager.prototype.setInspectedNode):
+        * UserInterface/Controllers/LayerTreeManager.js:
+        (WI.LayerTreeManager.supportsVisibleCompositingBorders):
+        * UserInterface/Controllers/NetworkManager.js:
+        (WI.NetworkManager.prototype._loadAndParseSourceMap):
+        * UserInterface/Controllers/TimelineManager.js:
+        (WI.NetworkManager.defaultTimelineTypes):
+        (WI.NetworkManager.availableTimelineTypes):
+        (WI.NetworkManager.prototype.set autoCaptureOnPageLoad):
+        (WI.NetworkManager.prototype.scriptProfilerTrackingCompleted):
+        * UserInterface/Models/CSSCompletions.js:
+        (WI.CSSCompletions.initializeCSSCompletions):
+        * UserInterface/Models/CSSStyleDeclaration.js:
+        (WI.CSSStyleDeclaration.prototype.get selectorEditable):
+        * UserInterface/Models/CSSStyleSheet.js:
+        (WI.CSSStyleSheet.prototype.handleCurrentRevisionContentChange):
+        * UserInterface/Models/DOMNode.js:
+        (WI.DOMNode.prototype._makeUndoableCallback):
+        * UserInterface/Models/SourceMapResource.js:
+        (WI.SourceMapResource.prototype.requestContentFromBackend):
+        * UserInterface/Base/Main.js:
+        (WI._updateDownloadToolbarButton):
+        (WI.undo):
+        (WI.redo):
+        (WI.canArchiveMainFrame):
+        * UserInterface/Views/ComputedStyleDetailsPanel.js:
+        (WI.ComputedStyleDetailsPanel.prototype.refresh):
+        * UserInterface/Views/ContextMenuUtilities.js:
+        (WI.appendContextMenuItemsForDOMNode):
+        * UserInterface/Views/CookieStorageContentView.js:
+        (WI.CookieStorageContentView):
+        (WI.CookieStorageContentView.prototype.get navigationItems):
+        (WI.CookieStorageContentView.prototype.tableCellContextMenuClicked):
+        (WI.CookieStorageContentView.prototype._reloadCookies):
+        (WI.CookieStorageContentView.prototype._handleTableKeyDown):
+        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
+        (WI.DOMNodeDetailsSidebarPanel.prototype.initialLayout):
+        * UserInterface/Views/DOMTreeContentView.js:
+        (WI.DOMTreeContentView):
+        (WI.DOMTreeContentView.prototype._restoreSelectedNodeAfterUpdate):
+        (WI.DOMTreeContentView.prototype._showPrintStylesChanged):
+        * UserInterface/Views/DOMTreeElement.js:
+        (WI.DOMTreeElement.prototype.populateDOMNodeContextMenu):
+        (WI.DOMTreeElement.prototype._startEditingTagName):
+        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
+        (WI.GeneralStyleDetailsSidebarPanel.prototype.initialLayout):
+        * UserInterface/Views/SearchSidebarPanel.js:
+        (WI.SearchSidebarPanel.prototype.performSearch):
+        * UserInterface/Views/SourceCodeTextEditor.js:
+        (WI.SourceCodeTextEditor.prototype.customPerformSearch):
+        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
+        (WI.SourcesNavigationSidebarPanel):
+        (WI.SourcesNavigationSidebarPanel.prototype._populateCreateResourceContextMenu):
+        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
+        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._populateIconElementContextMenu):
+        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
+        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.get supportsNewRule):
+        * UserInterface/Views/SpreadsheetStyleProperty.js:
+        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidBlur):
+        * UserInterface/Views/TimelineTabContentView.js:
+        (WI.TimelineTabContentView):
+
+        * UserInterface/Controllers/AppControllerBase.js:
+        (WI.AppControllerBase.prototype.get hasExtraDomains): Deleted.
+        * UserInterface/Controllers/AppController.js:
+        (WI.AppController):
+        (WI.AppController.prototype.activateExtraDomains):
+        (WI.AppController.prototype.get hasExtraDomains): Deleted.
+        * UserInterface/Test/TestAppController.js:
+        (WI.TestAppController.prototype.get hasExtraDomains): Deleted.
+
+        * UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/12.2/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/13.0/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/13.4/InspectorBackendCommands.js:
+        * Versions/Inspector-iOS-11.0.json:
+        * Versions/Inspector-iOS-11.3.json:
+        * Versions/Inspector-iOS-12.0.json:
+        * Versions/Inspector-iOS-12.2.json:
+        * Versions/Inspector-iOS-13.0.json:
+        * Versions/Inspector-iOS-13.4.json:
+        Update protocol files for older versions of iOS.
+
+        * Localizations/en.lproj/localizedStrings.js:
+
 2020-05-28  Devin Rousso  <drousso@apple.com>
 
         Web Inspector: Network: statistics don't update when filtering
index 2958a29..6642f32 100644 (file)
@@ -659,6 +659,7 @@ localizedStrings["Host"] = "Host";
 localizedStrings["ICO"] = "ICO";
 localizedStrings["IP"] = "IP";
 localizedStrings["IP Address"] = "IP Address";
+localizedStrings["ITML Context"] = "ITML Context";
 localizedStrings["ITP Debug Mode"] = "ITP Debug Mode";
 localizedStrings["Identity"] = "Identity";
 localizedStrings["Idle"] = "Idle";
index 7b31e2b..6f8d29a 100644 (file)
@@ -24,6 +24,7 @@
  */
 
 WI.DebuggableType = {
+    ITML: "itml",
     JavaScript: "javascript",
     Page: "page",
     ServiceWorker: "service-worker",
@@ -32,6 +33,8 @@ WI.DebuggableType = {
 
 WI.DebuggableType.fromString = function(type) {
     switch (type) {
+    case "itml":
+        return WI.DebuggableType.ITML;
     case "javascript":
         return WI.DebuggableType.JavaScript;
     case "page":
@@ -45,3 +48,35 @@ WI.DebuggableType.fromString = function(type) {
     console.assert(false, "Unknown debuggable type", type);
     return null;
 };
+
+WI.DebuggableType.supportedTargetTypes = function(debuggableType) {
+    let targetTypes = new Set;
+
+    switch (debuggableType) {
+    case WI.DebuggableType.ITML:
+        targetTypes.add(WI.TargetType.ITML);
+        break;
+
+    case WI.DebuggableType.JavaScript:
+        targetTypes.add(WI.TargetType.JavaScript);
+        break;
+
+    case WI.DebuggableType.Page:
+        targetTypes.add(WI.TargetType.Page);
+        targetTypes.add(WI.TargetType.Worker);
+        break;
+
+    case WI.DebuggableType.ServiceWorker:
+        targetTypes.add(WI.TargetType.ServiceWorker);
+        break;
+
+    case WI.DebuggableType.WebPage:
+        targetTypes.add(WI.TargetType.Page);
+        targetTypes.add(WI.TargetType.WebPage);
+        targetTypes.add(WI.TargetType.Worker);
+        break;
+    }
+
+    console.assert(targetTypes.size, "Unknown debuggable type", debuggableType);
+    return targetTypes;
+};
index 3543918..6e6a03f 100644 (file)
@@ -426,7 +426,7 @@ WI.contentLoaded = function()
         }
 
         let reloadToolTip;
-        if (WI.sharedApp.debuggableType === WI.DebuggableType.JavaScript)
+        if (WI.sharedApp.debuggableType === WI.DebuggableType.JavaScript || WI.sharedApp.debuggableType === WI.DebuggableType.ITML)
             reloadToolTip = WI.UIString("Restart (%s)").format(WI._reloadPageKeyboardShortcut.displayName);
         else
             reloadToolTip = WI.UIString("Reload page (%s)\nReload page ignoring cache (%s)").format(WI._reloadPageKeyboardShortcut.displayName, WI._reloadPageFromOriginKeyboardShortcut.displayName);
@@ -3173,13 +3173,15 @@ WI._redoKeyboardShortcut = function(event)
 WI.undo = function()
 {
     let target = WI.assumingMainTarget();
-    target.DOMAgent.undo();
+    if (target.hasCommand("DOM.undo"))
+        target.DOMAgent.undo();
 };
 
 WI.redo = function()
 {
     let target = WI.assumingMainTarget();
-    target.DOMAgent.redo();
+    if (target.hasCommand("DOM.redo"))
+        target.DOMAgent.redo();
 };
 
 WI.highlightRangesWithStyleClass = function(element, resultRanges, styleClass, changes)
@@ -3299,7 +3301,7 @@ WI.archiveMainFrame = function()
 
 WI.canArchiveMainFrame = function()
 {
-    if (!WI.sharedApp.isWebDebuggable())
+    if (!InspectorBackend.hasCommand("Page.archive"))
         return false;
 
     if (!WI.networkManager.mainFrame || !WI.networkManager.mainFrame.mainResource)
index 6dea59d..39a1f56 100644 (file)
  */
 
 WI.TargetType = {
+    ITML: "itml",
     JavaScript: "javascript",
     Page: "page",
     ServiceWorker: "service-worker",
     WebPage: "web-page",
     Worker: "worker",
 };
+
+WI.TargetType.all = Object.values(WI.TargetType);
index aedaad2..bd592a3 100644 (file)
@@ -29,8 +29,6 @@ WI.AppController = class AppController extends WI.AppControllerBase
     {
         super();
 
-        this._hasExtraDomains = false;
-
         this._debuggableType = WI.DebuggableType.fromString(InspectorFrontendHost.debuggableInfo.debuggableType);
         console.assert(this._debuggableType);
         if (!this._debuggableType)
@@ -39,24 +37,24 @@ WI.AppController = class AppController extends WI.AppControllerBase
 
     // Properties.
 
-    get hasExtraDomains() { return this._hasExtraDomains; }
     get debuggableType() { return this._debuggableType; }
 
     // API.
 
     activateExtraDomains(domains)
     {
-        if (this._hasExtraDomains)
-            throw new Error("Extra domains have already been activated, cannot activate again.");
-
-        this._hasExtraDomains = true;
-
-        console.assert(WI.mainTarget instanceof WI.DirectBackendTarget);
-        console.assert(WI.mainTarget.type === WI.TargetType.JavaScript);
-        console.assert(WI.sharedApp.debuggableType === WI.DebuggableType.JavaScript);
+        console.assert(this._debuggableType === WI.DebuggableType.JavaScript);
         console.assert(WI.targets.length === 1);
 
         let target = WI.mainTarget;
+        console.assert(target instanceof WI.DirectBackendTarget);
+        console.assert(target.type === WI.TargetType.JavaScript);
+
+        if (this._debuggableType === WI.DebuggableType.ITML || target.type === WI.TargetType.ITML)
+            throw new Error("Extra domains have already been activated, cannot activate again.");
+
+        this._debuggableType = WI.DebuggableType.ITML;
+        target._type = WI.TargetType.ITML;
 
         for (let domain of domains) {
             InspectorBackend.activateDomain(domain);
index e59444a..61d4c45 100644 (file)
@@ -45,7 +45,6 @@ WI.AppControllerBase = class AppControllerBase
 
     // Public
 
-    get hasExtraDomains() { throw WI.NotImplementedError.subclassMustOverride(); }
     get debuggableType() { throw WI.NotImplementedError.subclassMustOverride(); }
 
     // Since various members of the app controller depend on the global singleton to exist,
index f9bdb09..91389c4 100644 (file)
@@ -60,6 +60,11 @@ WI.CSSManager = class CSSManager extends WI.Object
 
     // Static
 
+    static supportsInspectorStyleSheet()
+    {
+        return InspectorBackend.hasCommand("CSS.createStyleSheet");
+    }
+
     static protocolStyleSheetOriginToEnum(origin)
     {
         switch (origin) {
index 73d27b6..6f2978d 100644 (file)
@@ -620,7 +620,8 @@ WI.DOMManager = class DOMManager extends WI.Object
 
         // COMPATIBILITY (iOS 11): DOM.setInspectedNode did not exist.
         if (!target.hasCommand("DOM.setInspectedNode")) {
-            target.ConsoleAgent.addInspectedNode(node.id, callback);
+            if (target.hasCommand("Console.addInspectedNode"))
+                target.ConsoleAgent.addInspectedNode(node.id, callback);
             return;
         }
 
index ec54281..6f330cc 100644 (file)
@@ -212,7 +212,7 @@ WI.DOMStorageManager = class DOMStorageManager extends WI.Object
         if (!this._enabled)
             return;
 
-        if (!InspectorBackend.hasDomain("DOMStorage"))
+        if (!InspectorBackend.hasCommand("Page.getCookies"))
             return;
 
         // Add the host of the frame that changed the main resource to the list of hosts there could be cookies for.
index 3613d9f..bf23127 100644 (file)
@@ -67,7 +67,7 @@ WI.LayerTreeManager = class LayerTreeManager extends WI.Object
     static supportsVisibleCompositingBorders()
     {
         return InspectorBackend.hasCommand("Page.setCompositingBordersVisible")
-            || (InspectorBackend.Enum.Page.Setting.ShowDebugBorders && InspectorBackend.Enum.Page.Setting.ShowRepaintCounter);
+            || (InspectorBackend.hasCommand("Page.overrideSetting") && InspectorBackend.Enum.Page.Setting.ShowDebugBorders && InspectorBackend.Enum.Page.Setting.ShowRepaintCounter);
     }
 
     // Public
index 1c81260..9376349 100644 (file)
@@ -1292,7 +1292,8 @@ WI.NetworkManager = class NetworkManager extends WI.Object
             return;
         }
 
-        if (!InspectorBackend.hasDomain("Network")) {
+        let target = WI.assumingMainTarget();
+        if (!target.hasCommand("Network.loadResource")) {
             this._sourceMapLoadAndParseFailed(sourceMapURL);
             return;
         }
@@ -1304,7 +1305,6 @@ WI.NetworkManager = class NetworkManager extends WI.Object
         if (!frameIdentifier)
             frameIdentifier = WI.networkManager.mainFrame ? WI.networkManager.mainFrame.id : "";
 
-        let target = WI.assumingMainTarget();
         target.NetworkAgent.loadResource(frameIdentifier, sourceMapURL, sourceMapLoaded);
     }
 
index 335e5eb..d69cc85 100644 (file)
@@ -121,7 +121,7 @@ WI.TargetManager = class TargetManager extends WI.Object
 
         this._initializeBackendTarget(target);
 
-        if (WI.sharedApp.debuggableType === WI.DebuggableType.Page)
+        if (WI.sharedApp.debuggableType === WI.DebuggableType.ITML || WI.sharedApp.debuggableType === WI.DebuggableType.Page)
             this._initializePageTarget(target);
 
         this.addTarget(target);
@@ -255,7 +255,7 @@ WI.TargetManager = class TargetManager extends WI.Object
 
     _initializePageTarget(target)
     {
-        console.assert(WI.sharedApp.isWebDebuggable());
+        console.assert(WI.sharedApp.isWebDebuggable() || WI.sharedApp.debuggableType === WI.DebuggableType.ITML);
         console.assert(target.type === WI.TargetType.Page || target instanceof WI.DirectBackendTarget);
 
         WI.pageTarget = target;
index 833aaa1..f325f59 100644 (file)
@@ -102,7 +102,7 @@ WI.TimelineManager = class TimelineManager extends WI.Object
 
     static defaultTimelineTypes()
     {
-        if (WI.sharedApp.debuggableType === WI.DebuggableType.JavaScript) {
+        if (WI.sharedApp.debuggableType === WI.DebuggableType.JavaScript || WI.sharedApp.debuggableType === WI.DebuggableType.ITML) {
             return [
                 WI.TimelineRecord.Type.Script,
                 WI.TimelineRecord.Type.HeapAllocations,
@@ -133,7 +133,7 @@ WI.TimelineManager = class TimelineManager extends WI.Object
     static availableTimelineTypes()
     {
         let types = WI.TimelineManager.defaultTimelineTypes();
-        if (WI.sharedApp.debuggableType === WI.DebuggableType.JavaScript || WI.sharedApp.debuggableType === WI.DebuggableType.ServiceWorker)
+        if (WI.sharedApp.debuggableType === WI.DebuggableType.JavaScript || WI.sharedApp.debuggableType === WI.DebuggableType.ServiceWorker || WI.sharedApp.debuggableType === WI.DebuggableType.ITML)
             return types;
 
         types.push(WI.TimelineRecord.Type.Memory);
@@ -206,8 +206,10 @@ WI.TimelineManager = class TimelineManager extends WI.Object
 
         this._autoCaptureOnPageLoad = autoCapture;
 
-        for (let target of WI.targets)
-            target.TimelineAgent.setAutoCaptureEnabled(this._autoCaptureOnPageLoad);
+        for (let target of WI.targets) {
+            if (target.hasCommand("Timeline.setAutoCaptureEnabled"))
+                target.TimelineAgent.setAutoCaptureEnabled(this._autoCaptureOnPageLoad);
+        }
     }
 
     get enabledTimelineTypes()
@@ -678,7 +680,7 @@ WI.TimelineManager = class TimelineManager extends WI.Object
 
             // Associate the ScriptProfiler created records with Web Timeline records.
             // Filter out the already added ScriptProfiler events which should not have been wrapped.
-            if (WI.sharedApp.debuggableType !== WI.DebuggableType.JavaScript) {
+            if (WI.sharedApp.debuggableType !== WI.DebuggableType.JavaScript && WI.sharedApp.debuggableType !== WI.DebuggableType.ITML) {
                 this._scriptProfilerRecords = this._scriptProfilerRecords.filter((x) => x.__scriptProfilerType === InspectorBackend.Enum.ScriptProfiler.EventType.Other);
                 this._mergeScriptProfileRecords();
             }
index 64ced8c..5c1877e 100644 (file)
@@ -165,7 +165,8 @@ WI.CSSCompletions = class CSSCompletions
         }
 
         target.CSSAgent.getSupportedCSSProperties(propertyNamesCallback);
-        target.CSSAgent.getSupportedSystemFontFamilyNames(fontFamilyNamesCallback);
+        if (target.hasCommand("CSS.getSupportedSystemFontFamilyNames"))
+            target.CSSAgent.getSupportedSystemFontFamilyNames(fontFamilyNamesCallback);
     }
 
     static completeUnbalancedValue(value)
index 43fdabd..709101f 100644 (file)
@@ -107,7 +107,7 @@ WI.CSSStyleDeclaration = class CSSStyleDeclaration extends WI.Object
 
     get selectorEditable()
     {
-        return this._ownerRule && this._ownerRule.editable;
+        return this._ownerRule && this._ownerRule.editable && InspectorBackend.hasCommand("CSS.setRuleSelector");
     }
 
     get locked() { return this._locked; }
index 8ca1c74..3229c4f 100644 (file)
@@ -180,7 +180,8 @@ WI.CSSStyleSheet = class CSSStyleSheet extends WI.SourceCode
             if (error)
                 return;
 
-            target.DOMAgent.markUndoableState();
+            if (target.hasCommand("DOM.markUndoableState"))
+                target.DOMAgent.markUndoableState();
 
             this.dispatchEventToListeners(WI.CSSStyleSheet.Event.ContentDidChange);
         }
index 0cb9f5f..1b540db 100644 (file)
@@ -1058,7 +1058,8 @@ WI.DOMNode = class DOMNode extends WI.Object
         return (...args) => {
             if (!args[0]) { // error
                 let target = WI.assumingMainTarget();
-                target.DOMAgent.markUndoableState();
+                if (target.hasCommand("DOM.markUndoableState"))
+                    target.DOMAgent.markUndoableState();
             }
 
             if (callback)
index 00d239d..780f03b 100644 (file)
@@ -143,7 +143,7 @@ WI.SourceMapResource = class SourceMapResource extends WI.Resource
             });
         }
 
-        if (!InspectorBackend.hasDomain("Network"))
+        if (!this._target.hasCommand("Network.loadResource"))
             return sourceMapResourceLoadError.call(this);
 
         var frameIdentifier = null;
index bcfe22a..34d2852 100644 (file)
@@ -44,6 +44,11 @@ WI.DirectBackendTarget = class DirectBackendTarget extends WI.Target
     static connectionInfoForDebuggable()
     {
         switch (WI.sharedApp.debuggableType) {
+        case WI.DebuggableType.ITML:
+            return {
+                type: WI.TargetType.ITML,
+                displayName: WI.UIString("ITML Context"),
+            };
         case WI.DebuggableType.JavaScript:
             return {
                 type: WI.TargetType.JavaScript,
index c9e85a1..6a2bedd 100644 (file)
@@ -142,7 +142,7 @@ InspectorBackendClass = class InspectorBackendClass
 
     registerDomain(domainName, targetTypes)
     {
-        targetTypes = targetTypes || Object.values(WI.TargetType);
+        targetTypes = targetTypes || WI.TargetType.all;
         for (let targetType of targetTypes)
             this._supportedDomainsForTargetType.add(targetType, domainName);
 
@@ -186,7 +186,11 @@ InspectorBackendClass = class InspectorBackendClass
     {
         // FIXME: <https://webkit.org/b/201150> Web Inspector: remove "extra domains" concept now that domains can be added based on the debuggable type
 
-        if (debuggableTypes && !debuggableTypes.includes(InspectorFrontendHost.debuggableInfo.debuggableType))
+        // Ask `WI.sharedApp` (if it exists) as it may have a different debuggable type if extra
+        // domains were activated, which is the only other time this will be called.
+        let currentDebuggableType = WI.sharedApp?.debuggableType || InspectorFrontendHost.debuggableInfo.debuggableType;
+
+        if (debuggableTypes && !debuggableTypes.includes(currentDebuggableType))
             return;
 
         console.assert(domainName in this._registeredDomains);
@@ -195,7 +199,12 @@ InspectorBackendClass = class InspectorBackendClass
         let domain = this._registeredDomains[domainName];
         this._activeDomains[domainName] = domain;
 
-        for (let command of domain._supportedCommandsForTargetType.values()) {
+        let supportedTargetTypes = WI.DebuggableType.supportedTargetTypes(currentDebuggableType);
+
+        for (let [targetType, command] of domain._supportedCommandsForTargetType) {
+            if (!supportedTargetTypes.has(targetType))
+                continue;
+
             let parameters = this._supportedCommandParameters.get(command._qualifiedName);
             if (!parameters) {
                 parameters = new Set;
@@ -204,7 +213,10 @@ InspectorBackendClass = class InspectorBackendClass
             parameters.addAll(command._callSignature.map((item) => item.name));
         }
 
-        for (let event of domain._supportedEventsForTargetType.values()) {
+        for (let [targetType, event] of domain._supportedEventsForTargetType) {
+            if (!supportedTargetTypes.has(targetType))
+                continue;
+
             let parameters = this._supportedEventParameters.get(event._qualifiedName);
             if (!parameters) {
                 parameters = new Set;
@@ -232,7 +244,7 @@ InspectorBackendClass = class InspectorBackendClass
 
     supportedDomainsForTargetType(type)
     {
-        console.assert(Object.values(WI.TargetType).includes(type), "Unknown target type", type);
+        console.assert(WI.TargetType.all.includes(type), "Unknown target type", type);
 
         return this._supportedDomainsForTargetType.get(type) || new Set;
     }
@@ -328,14 +340,14 @@ InspectorBackend.Domain = class InspectorBackendDomain
 
     _addCommand(targetTypes, command)
     {
-        targetTypes = targetTypes || Object.values(WI.TargetType);
+        targetTypes = targetTypes || WI.TargetType.all;
         for (let type of targetTypes)
             this._supportedCommandsForTargetType.add(type, command);
     }
 
     _addEvent(targetTypes, event)
     {
-        targetTypes = targetTypes || Object.values(WI.TargetType);
+        targetTypes = targetTypes || WI.TargetType.all;
         for (let type of targetTypes)
             this._supportedEventsForTargetType.add(type, event);
     }
index 64d74b3..c11d328 100644 (file)
@@ -40,7 +40,7 @@ InspectorBackend.registerApplicationCacheDispatcher = InspectorBackend.registerD
 InspectorBackend.activateDomain("ApplicationCache", ["page"]);
 
 // CSS
-InspectorBackend.registerDomain("CSS", ["page"]);
+InspectorBackend.registerDomain("CSS", ["itml", "page"]);
 InspectorBackend.registerEnum("CSS.StyleSheetOrigin", {User: "user", UserAgent: "user-agent", Inspector: "inspector", Regular: "regular"});
 InspectorBackend.registerEnum("CSS.CSSPropertyStatus", {Active: "active", Inactive: "inactive", Disabled: "disabled", Style: "style"});
 InspectorBackend.registerEnum("CSS.CSSMediaSource", {MediaRule: "mediaRule", ImportRule: "importRule", LinkedSheet: "linkedSheet", InlineSheet: "inlineSheet"});
@@ -55,44 +55,44 @@ InspectorBackend.registerCommand("CSS.getStyleSheet", null, [{"name": "styleShee
 InspectorBackend.registerCommand("CSS.getStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}], ["text"]);
 InspectorBackend.registerCommand("CSS.setStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}, {"name": "text", "type": "string"}], []);
 InspectorBackend.registerCommand("CSS.setStyleText", null, [{"name": "styleId", "type": "object"}, {"name": "text", "type": "string"}], ["style"]);
-InspectorBackend.registerCommand("CSS.setRuleSelector", null, [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
-InspectorBackend.registerCommand("CSS.createStyleSheet", null, [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
-InspectorBackend.registerCommand("CSS.addRule", null, [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.setRuleSelector", ["page"], [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.createStyleSheet", ["page"], [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
+InspectorBackend.registerCommand("CSS.addRule", ["page"], [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
 InspectorBackend.registerCommand("CSS.getSupportedCSSProperties", null, [], ["cssProperties"]);
-InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", null, [], ["fontFamilyNames"]);
-InspectorBackend.registerCommand("CSS.forcePseudoState", null, [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
-InspectorBackend.registerCommand("CSS.getNamedFlowCollection", null, [{"name": "documentNodeId", "type": "number"}], ["namedFlows"]);
+InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", ["page"], [], ["fontFamilyNames"]);
+InspectorBackend.registerCommand("CSS.forcePseudoState", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
+InspectorBackend.registerCommand("CSS.getNamedFlowCollection", ["page"], [{"name": "documentNodeId", "type": "number"}], ["namedFlows"]);
 InspectorBackend.registerEvent("CSS.mediaQueryResultChanged", null, []);
 InspectorBackend.registerEvent("CSS.styleSheetChanged", null, ["styleSheetId"]);
-InspectorBackend.registerEvent("CSS.styleSheetAdded", null, ["header"]);
-InspectorBackend.registerEvent("CSS.styleSheetRemoved", null, ["styleSheetId"]);
-InspectorBackend.registerEvent("CSS.namedFlowCreated", null, ["namedFlow"]);
-InspectorBackend.registerEvent("CSS.namedFlowRemoved", null, ["documentNodeId", "flowName"]);
-InspectorBackend.registerEvent("CSS.regionOversetChanged", null, ["namedFlow"]);
-InspectorBackend.registerEvent("CSS.registeredNamedFlowContentElement", null, ["documentNodeId", "flowName", "contentNodeId", "nextContentNodeId"]);
-InspectorBackend.registerEvent("CSS.unregisteredNamedFlowContentElement", null, ["documentNodeId", "flowName", "contentNodeId"]);
+InspectorBackend.registerEvent("CSS.styleSheetAdded", ["page"], ["header"]);
+InspectorBackend.registerEvent("CSS.styleSheetRemoved", ["page"], ["styleSheetId"]);
+InspectorBackend.registerEvent("CSS.namedFlowCreated", ["page"], ["namedFlow"]);
+InspectorBackend.registerEvent("CSS.namedFlowRemoved", ["page"], ["documentNodeId", "flowName"]);
+InspectorBackend.registerEvent("CSS.regionOversetChanged", ["page"], ["namedFlow"]);
+InspectorBackend.registerEvent("CSS.registeredNamedFlowContentElement", ["page"], ["documentNodeId", "flowName", "contentNodeId", "nextContentNodeId"]);
+InspectorBackend.registerEvent("CSS.unregisteredNamedFlowContentElement", ["page"], ["documentNodeId", "flowName", "contentNodeId"]);
 InspectorBackend.registerCSSDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "CSS");
-InspectorBackend.activateDomain("CSS", ["page"]);
+InspectorBackend.activateDomain("CSS", ["itml", "page"]);
 
 // Console
-InspectorBackend.registerDomain("Console", ["javascript", "page", "worker"]);
+InspectorBackend.registerDomain("Console", ["itml", "javascript", "page", "worker"]);
 InspectorBackend.registerEnum("Console.ConsoleMessageSource", {XML: "xml", JavaScript: "javascript", Network: "network", ConsoleAPI: "console-api", Storage: "storage", Appcache: "appcache", Rendering: "rendering", CSS: "css", Security: "security", ContentBlocker: "content-blocker", Other: "other"});
 InspectorBackend.registerEnum("Console.ConsoleMessageLevel", {Log: "log", Info: "info", Warning: "warning", Error: "error", Debug: "debug"});
 InspectorBackend.registerEnum("Console.ConsoleMessageType", {Log: "log", Dir: "dir", DirXML: "dirxml", Table: "table", Trace: "trace", Clear: "clear", StartGroup: "startGroup", StartGroupCollapsed: "startGroupCollapsed", EndGroup: "endGroup", Assert: "assert", Timing: "timing", Profile: "profile", ProfileEnd: "profileEnd"});
 InspectorBackend.registerCommand("Console.enable", null, [], []);
 InspectorBackend.registerCommand("Console.disable", null, [], []);
 InspectorBackend.registerCommand("Console.clearMessages", null, [], []);
-InspectorBackend.registerCommand("Console.setMonitoringXHREnabled", null, [{"name": "enabled", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Console.addInspectedNode", null, [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("Console.setMonitoringXHREnabled", ["page"], [{"name": "enabled", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Console.addInspectedNode", ["page"], [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerEvent("Console.messageAdded", null, ["message"]);
 InspectorBackend.registerEvent("Console.messageRepeatCountUpdated", null, ["count"]);
 InspectorBackend.registerEvent("Console.messagesCleared", null, []);
 InspectorBackend.registerEvent("Console.heapSnapshot", null, ["timestamp", "snapshotData", "title"]);
 InspectorBackend.registerConsoleDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Console");
-InspectorBackend.activateDomain("Console", ["javascript", "page"]);
+InspectorBackend.activateDomain("Console", ["itml", "javascript", "page"]);
 
 // DOM
-InspectorBackend.registerDomain("DOM", ["page"]);
+InspectorBackend.registerDomain("DOM", ["itml", "page"]);
 InspectorBackend.registerEnum("DOM.PseudoType", {Before: "before", After: "after"});
 InspectorBackend.registerEnum("DOM.ShadowRootType", {UserAgent: "user-agent", Open: "open", Closed: "closed"});
 InspectorBackend.registerEnum("DOM.CustomElementState", {Builtin: "builtin", Custom: "custom", Waiting: "waiting", Failed: "failed"});
@@ -103,9 +103,9 @@ InspectorBackend.registerEnum("DOM.AccessibilityPropertiesInvalid", {True: "true
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesLiveRegionStatus", {Assertive: "assertive", Polite: "polite", Off: "off"});
 InspectorBackend.registerCommand("DOM.getDocument", null, [], ["root"]);
 InspectorBackend.registerCommand("DOM.requestChildNodes", null, [{"name": "nodeId", "type": "number"}, {"name": "depth", "type": "number", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.querySelector", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.querySelectorAll", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
-InspectorBackend.registerCommand("DOM.setNodeName", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelector", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelectorAll", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
+InspectorBackend.registerCommand("DOM.setNodeName", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setNodeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "value", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.removeNode", null, [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerCommand("DOM.setAttributeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}, {"name": "value", "type": "string"}], []);
@@ -118,22 +118,22 @@ InspectorBackend.registerCommand("DOM.setOuterHTML", null, [{"name": "nodeId", "
 InspectorBackend.registerCommand("DOM.performSearch", null, [{"name": "query", "type": "string"}, {"name": "nodeIds", "type": "object", "optional": true}], ["searchId", "resultCount"]);
 InspectorBackend.registerCommand("DOM.getSearchResults", null, [{"name": "searchId", "type": "string"}, {"name": "fromIndex", "type": "number"}, {"name": "toIndex", "type": "number"}], ["nodeIds"]);
 InspectorBackend.registerCommand("DOM.discardSearchResults", null, [{"name": "searchId", "type": "string"}], []);
-InspectorBackend.registerCommand("DOM.requestNode", null, [{"name": "objectId", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.requestNode", ["page"], [{"name": "objectId", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setInspectModeEnabled", null, [{"name": "enabled", "type": "boolean"}, {"name": "highlightConfig", "type": "object", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightQuad", null, [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightSelector", null, [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightQuad", ["page"], [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightSelector", ["page"], [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.highlightNode", null, [{"name": "highlightConfig", "type": "object"}, {"name": "nodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.hideHighlight", null, [], []);
-InspectorBackend.registerCommand("DOM.highlightFrame", null, [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", null, [{"name": "path", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.resolveNode", null, [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("DOM.highlightFrame", ["page"], [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", ["page"], [{"name": "path", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.resolveNode", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerCommand("DOM.getAttributes", null, [{"name": "nodeId", "type": "number"}], ["attributes"]);
 InspectorBackend.registerCommand("DOM.moveTo", null, [{"name": "nodeId", "type": "number"}, {"name": "targetNodeId", "type": "number"}, {"name": "insertBeforeNodeId", "type": "number", "optional": true}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.undo", null, [], []);
-InspectorBackend.registerCommand("DOM.redo", null, [], []);
-InspectorBackend.registerCommand("DOM.markUndoableState", null, [], []);
-InspectorBackend.registerCommand("DOM.focus", null, [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.undo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.redo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.markUndoableState", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.focus", ["page"], [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerEvent("DOM.documentUpdated", null, []);
 InspectorBackend.registerEvent("DOM.setChildNodes", null, ["parentId", "nodes"]);
 InspectorBackend.registerEvent("DOM.attributeModified", null, ["nodeId", "name", "value"]);
@@ -143,13 +143,13 @@ InspectorBackend.registerEvent("DOM.characterDataModified", null, ["nodeId", "ch
 InspectorBackend.registerEvent("DOM.childNodeCountUpdated", null, ["nodeId", "childNodeCount"]);
 InspectorBackend.registerEvent("DOM.childNodeInserted", null, ["parentNodeId", "previousNodeId", "node"]);
 InspectorBackend.registerEvent("DOM.childNodeRemoved", null, ["parentNodeId", "nodeId"]);
-InspectorBackend.registerEvent("DOM.shadowRootPushed", null, ["hostId", "root"]);
-InspectorBackend.registerEvent("DOM.shadowRootPopped", null, ["hostId", "rootId"]);
-InspectorBackend.registerEvent("DOM.customElementStateChanged", null, ["nodeId", "customElementState"]);
-InspectorBackend.registerEvent("DOM.pseudoElementAdded", null, ["parentId", "pseudoElement"]);
-InspectorBackend.registerEvent("DOM.pseudoElementRemoved", null, ["parentId", "pseudoElementId"]);
+InspectorBackend.registerEvent("DOM.shadowRootPushed", ["page"], ["hostId", "root"]);
+InspectorBackend.registerEvent("DOM.shadowRootPopped", ["page"], ["hostId", "rootId"]);
+InspectorBackend.registerEvent("DOM.customElementStateChanged", ["page"], ["nodeId", "customElementState"]);
+InspectorBackend.registerEvent("DOM.pseudoElementAdded", ["page"], ["parentId", "pseudoElement"]);
+InspectorBackend.registerEvent("DOM.pseudoElementRemoved", ["page"], ["parentId", "pseudoElementId"]);
 InspectorBackend.registerDOMDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOM");
-InspectorBackend.activateDomain("DOM", ["page"]);
+InspectorBackend.activateDomain("DOM", ["itml", "page"]);
 
 // DOMDebugger
 InspectorBackend.registerDomain("DOMDebugger", ["page"]);
@@ -165,7 +165,7 @@ InspectorBackend.registerCommand("DOMDebugger.removeXHRBreakpoint", null, [{"nam
 InspectorBackend.activateDomain("DOMDebugger", ["page"]);
 
 // DOMStorage
-InspectorBackend.registerDomain("DOMStorage", ["page"]);
+InspectorBackend.registerDomain("DOMStorage", ["itml", "page"]);
 InspectorBackend.registerCommand("DOMStorage.enable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.disable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.getDOMStorageItems", null, [{"name": "storageId", "type": "object"}], ["entries"]);
@@ -176,7 +176,7 @@ InspectorBackend.registerEvent("DOMStorage.domStorageItemRemoved", null, ["stora
 InspectorBackend.registerEvent("DOMStorage.domStorageItemAdded", null, ["storageId", "key", "newValue"]);
 InspectorBackend.registerEvent("DOMStorage.domStorageItemUpdated", null, ["storageId", "key", "oldValue", "newValue"]);
 InspectorBackend.registerDOMStorageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOMStorage");
-InspectorBackend.activateDomain("DOMStorage", ["page"]);
+InspectorBackend.activateDomain("DOMStorage", ["itml", "page"]);
 
 // Database
 InspectorBackend.registerDomain("Database", ["page"]);
@@ -189,7 +189,7 @@ InspectorBackend.registerDatabaseDispatcher = InspectorBackend.registerDispatche
 InspectorBackend.activateDomain("Database", ["page"]);
 
 // Debugger
-InspectorBackend.registerDomain("Debugger", ["javascript", "page", "worker"]);
+InspectorBackend.registerDomain("Debugger", ["itml", "javascript", "page", "worker"]);
 InspectorBackend.registerEnum("Debugger.BreakpointActionType", {Log: "log", Evaluate: "evaluate", Sound: "sound", Probe: "probe"});
 InspectorBackend.registerEnum("Debugger.ScopeType", {Global: "global", With: "with", Closure: "closure", Catch: "catch", FunctionName: "functionName", GlobalLexicalEnvironment: "globalLexicalEnvironment", NestedLexical: "nestedLexical"});
 InspectorBackend.registerCommand("Debugger.enable", null, [], []);
@@ -222,10 +222,10 @@ InspectorBackend.registerEvent("Debugger.resumed", null, []);
 InspectorBackend.registerEvent("Debugger.didSampleProbe", null, ["sample"]);
 InspectorBackend.registerEvent("Debugger.playBreakpointActionSound", null, ["breakpointActionId"]);
 InspectorBackend.registerDebuggerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Debugger");
-InspectorBackend.activateDomain("Debugger", ["javascript", "page"]);
+InspectorBackend.activateDomain("Debugger", ["itml", "javascript", "page"]);
 
 // Heap
-InspectorBackend.registerDomain("Heap", ["javascript", "page", "worker"]);
+InspectorBackend.registerDomain("Heap", ["itml", "javascript", "page", "worker"]);
 InspectorBackend.registerEnum("Heap.GarbageCollectionType", {Full: "full", Partial: "partial"});
 InspectorBackend.registerCommand("Heap.enable", null, [], []);
 InspectorBackend.registerCommand("Heap.disable", null, [], []);
@@ -239,7 +239,7 @@ InspectorBackend.registerEvent("Heap.garbageCollected", null, ["collection"]);
 InspectorBackend.registerEvent("Heap.trackingStart", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerEvent("Heap.trackingComplete", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerHeapDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Heap");
-InspectorBackend.activateDomain("Heap", ["javascript", "page"]);
+InspectorBackend.activateDomain("Heap", ["itml", "javascript", "page"]);
 
 // IndexedDB
 InspectorBackend.registerDomain("IndexedDB", ["page"]);
@@ -255,7 +255,7 @@ InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDispatch
 InspectorBackend.activateDomain("IndexedDB", ["page"]);
 
 // Inspector
-InspectorBackend.registerDomain("Inspector", ["javascript", "page"]);
+InspectorBackend.registerDomain("Inspector", ["itml", "javascript", "page"]);
 InspectorBackend.registerCommand("Inspector.enable", null, [], []);
 InspectorBackend.registerCommand("Inspector.disable", null, [], []);
 InspectorBackend.registerCommand("Inspector.initialized", null, [], []);
@@ -263,7 +263,7 @@ InspectorBackend.registerEvent("Inspector.evaluateForTestInFrontend", null, ["sc
 InspectorBackend.registerEvent("Inspector.inspect", null, ["object", "hints"]);
 InspectorBackend.registerEvent("Inspector.activateExtraDomains", null, ["domains"]);
 InspectorBackend.registerInspectorDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Inspector");
-InspectorBackend.activateDomain("Inspector", ["javascript", "page"]);
+InspectorBackend.activateDomain("Inspector", ["itml", "javascript", "page"]);
 
 // LayerTree
 InspectorBackend.registerDomain("LayerTree", ["page"]);
@@ -291,67 +291,67 @@ InspectorBackend.registerMemoryDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Memory", ["page"]);
 
 // Network
-InspectorBackend.registerDomain("Network", ["page"]);
+InspectorBackend.registerDomain("Network", ["itml", "page"]);
 InspectorBackend.registerEnum("Network.ResponseSource", {Unknown: "unknown", Network: "network", MemoryCache: "memory-cache", DiskCache: "disk-cache"});
 InspectorBackend.registerEnum("Network.MetricsPriority", {Low: "low", Medium: "medium", High: "high"});
 InspectorBackend.registerEnum("Network.InitiatorType", {Parser: "parser", Script: "script", Other: "other"});
 InspectorBackend.registerCommand("Network.enable", null, [], []);
 InspectorBackend.registerCommand("Network.disable", null, [], []);
-InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", null, [{"name": "headers", "type": "object"}], []);
+InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", ["page"], [{"name": "headers", "type": "object"}], []);
 InspectorBackend.registerCommand("Network.getResponseBody", null, [{"name": "requestId", "type": "string"}], ["body", "base64Encoded"]);
 InspectorBackend.registerCommand("Network.setResourceCachingDisabled", null, [{"name": "disabled", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Network.loadResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
-InspectorBackend.registerCommand("Network.resolveWebSocket", null, [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("Network.loadResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
+InspectorBackend.registerCommand("Network.resolveWebSocket", ["page"], [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerEvent("Network.requestWillBeSent", null, ["requestId", "frameId", "loaderId", "documentURL", "request", "timestamp", "initiator", "redirectResponse", "type", "targetId"]);
 InspectorBackend.registerEvent("Network.responseReceived", null, ["requestId", "frameId", "loaderId", "timestamp", "type", "response"]);
 InspectorBackend.registerEvent("Network.dataReceived", null, ["requestId", "timestamp", "dataLength", "encodedDataLength"]);
 InspectorBackend.registerEvent("Network.loadingFinished", null, ["requestId", "timestamp", "sourceMapURL", "metrics"]);
 InspectorBackend.registerEvent("Network.loadingFailed", null, ["requestId", "timestamp", "errorText", "canceled"]);
 InspectorBackend.registerEvent("Network.requestServedFromMemoryCache", null, ["requestId", "frameId", "loaderId", "documentURL", "timestamp", "initiator", "resource"]);
-InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", null, ["requestId", "timestamp", "walltime", "request"]);
-InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketCreated", null, ["requestId", "url"]);
-InspectorBackend.registerEvent("Network.webSocketClosed", null, ["requestId", "timestamp"]);
-InspectorBackend.registerEvent("Network.webSocketFrameReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketFrameError", null, ["requestId", "timestamp", "errorMessage"]);
-InspectorBackend.registerEvent("Network.webSocketFrameSent", null, ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", ["page"], ["requestId", "timestamp", "walltime", "request"]);
+InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketCreated", ["page"], ["requestId", "url"]);
+InspectorBackend.registerEvent("Network.webSocketClosed", ["page"], ["requestId", "timestamp"]);
+InspectorBackend.registerEvent("Network.webSocketFrameReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketFrameError", ["page"], ["requestId", "timestamp", "errorMessage"]);
+InspectorBackend.registerEvent("Network.webSocketFrameSent", ["page"], ["requestId", "timestamp", "response"]);
 InspectorBackend.registerNetworkDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Network");
-InspectorBackend.activateDomain("Network", ["page"]);
+InspectorBackend.activateDomain("Network", ["itml", "page"]);
 
 // Page
-InspectorBackend.registerDomain("Page", ["page"]);
+InspectorBackend.registerDomain("Page", ["itml", "page"]);
 InspectorBackend.registerEnum("Page.ResourceType", {Document: "Document", Stylesheet: "Stylesheet", Image: "Image", Font: "Font", Script: "Script", XHR: "XHR", Fetch: "Fetch", WebSocket: "WebSocket", Other: "Other"});
 InspectorBackend.registerEnum("Page.CoordinateSystem", {Viewport: "Viewport", Page: "Page"});
 InspectorBackend.registerCommand("Page.enable", null, [], []);
 InspectorBackend.registerCommand("Page.disable", null, [], []);
 InspectorBackend.registerCommand("Page.reload", null, [{"name": "ignoreCache", "type": "boolean", "optional": true}, {"name": "revalidateAllResources", "type": "boolean", "optional": true}, {"name": "scriptToEvaluateOnLoad", "type": "string", "optional": true}], []);
-InspectorBackend.registerCommand("Page.navigate", null, [{"name": "url", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.getCookies", null, [], ["cookies"]);
-InspectorBackend.registerCommand("Page.deleteCookie", null, [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.navigate", ["page"], [{"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.getCookies", ["page"], [], ["cookies"]);
+InspectorBackend.registerCommand("Page.deleteCookie", ["page"], [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
 InspectorBackend.registerCommand("Page.getResourceTree", null, [], ["frameTree"]);
 InspectorBackend.registerCommand("Page.getResourceContent", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "base64Encoded"]);
-InspectorBackend.registerCommand("Page.searchInResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.searchInResources", null, [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.setShowPaintRects", null, [{"name": "result", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.setEmulatedMedia", null, [{"name": "media", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.getCompositingBordersVisible", null, [], ["result"]);
-InspectorBackend.registerCommand("Page.setCompositingBordersVisible", null, [{"name": "visible", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.snapshotNode", null, [{"name": "nodeId", "type": "number"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.snapshotRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.archive", null, [], ["data"]);
-InspectorBackend.registerEvent("Page.domContentEventFired", null, ["timestamp"]);
-InspectorBackend.registerEvent("Page.loadEventFired", null, ["timestamp"]);
+InspectorBackend.registerCommand("Page.searchInResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.searchInResources", ["page"], [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.setShowPaintRects", ["page"], [{"name": "result", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.setEmulatedMedia", ["page"], [{"name": "media", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.getCompositingBordersVisible", ["page"], [], ["result"]);
+InspectorBackend.registerCommand("Page.setCompositingBordersVisible", ["page"], [{"name": "visible", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.snapshotNode", ["page"], [{"name": "nodeId", "type": "number"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.snapshotRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.archive", ["page"], [], ["data"]);
+InspectorBackend.registerEvent("Page.domContentEventFired", ["page"], ["timestamp"]);
+InspectorBackend.registerEvent("Page.loadEventFired", ["page"], ["timestamp"]);
 InspectorBackend.registerEvent("Page.frameNavigated", null, ["frame"]);
-InspectorBackend.registerEvent("Page.frameDetached", null, ["frameId"]);
+InspectorBackend.registerEvent("Page.frameDetached", ["page"], ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStartedLoading", null, ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStoppedLoading", null, ["frameId"]);
-InspectorBackend.registerEvent("Page.frameScheduledNavigation", null, ["frameId", "delay"]);
-InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", null, ["frameId"]);
+InspectorBackend.registerEvent("Page.frameScheduledNavigation", ["page"], ["frameId", "delay"]);
+InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", ["page"], ["frameId"]);
 InspectorBackend.registerPageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Page");
-InspectorBackend.activateDomain("Page", ["page"]);
+InspectorBackend.activateDomain("Page", ["itml", "page"]);
 
 // Runtime
-InspectorBackend.registerDomain("Runtime", ["javascript", "page", "worker"]);
+InspectorBackend.registerDomain("Runtime", ["itml", "javascript", "page", "worker"]);
 InspectorBackend.registerEnum("Runtime.RemoteObjectType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol"});
 InspectorBackend.registerEnum("Runtime.RemoteObjectSubtype", {Array: "array", Null: "null", Node: "node", Regexp: "regexp", Date: "date", Error: "error", Map: "map", Set: "set", Weakmap: "weakmap", Weakset: "weakset", Iterator: "iterator", Class: "class", Proxy: "proxy"});
 InspectorBackend.registerEnum("Runtime.ObjectPreviewType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol"});
@@ -379,10 +379,10 @@ InspectorBackend.registerCommand("Runtime.disableControlFlowProfiler", null, [],
 InspectorBackend.registerCommand("Runtime.getBasicBlocks", null, [{"name": "sourceID", "type": "string"}], ["basicBlocks"]);
 InspectorBackend.registerEvent("Runtime.executionContextCreated", null, ["context"]);
 InspectorBackend.registerRuntimeDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Runtime");
-InspectorBackend.activateDomain("Runtime", ["javascript", "page"]);
+InspectorBackend.activateDomain("Runtime", ["itml", "javascript", "page"]);
 
 // ScriptProfiler
-InspectorBackend.registerDomain("ScriptProfiler", ["javascript", "page"]);
+InspectorBackend.registerDomain("ScriptProfiler", ["itml", "javascript", "page"]);
 InspectorBackend.registerEnum("ScriptProfiler.EventType", {API: "API", Microtask: "Microtask", Other: "Other"});
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", null, [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", null, [], []);
@@ -392,7 +392,7 @@ InspectorBackend.registerEvent("ScriptProfiler.trackingComplete", null, ["sample
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStarted", null, []);
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStopped", null, []);
 InspectorBackend.registerScriptProfilerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "ScriptProfiler");
-InspectorBackend.activateDomain("ScriptProfiler", ["javascript", "page"]);
+InspectorBackend.activateDomain("ScriptProfiler", ["itml", "javascript", "page"]);
 
 // Timeline
 InspectorBackend.registerDomain("Timeline", ["page"]);
index 1ab0749..2125d3d 100644 (file)
@@ -40,7 +40,7 @@ InspectorBackend.registerApplicationCacheDispatcher = InspectorBackend.registerD
 InspectorBackend.activateDomain("ApplicationCache", ["page"]);
 
 // CSS
-InspectorBackend.registerDomain("CSS", ["page"]);
+InspectorBackend.registerDomain("CSS", ["itml", "page"]);
 InspectorBackend.registerEnum("CSS.StyleSheetOrigin", {User: "user", UserAgent: "user-agent", Inspector: "inspector", Regular: "regular"});
 InspectorBackend.registerEnum("CSS.CSSPropertyStatus", {Active: "active", Inactive: "inactive", Disabled: "disabled", Style: "style"});
 InspectorBackend.registerEnum("CSS.CSSMediaSource", {MediaRule: "mediaRule", ImportRule: "importRule", LinkedSheet: "linkedSheet", InlineSheet: "inlineSheet"});
@@ -54,18 +54,18 @@ InspectorBackend.registerCommand("CSS.getStyleSheet", null, [{"name": "styleShee
 InspectorBackend.registerCommand("CSS.getStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}], ["text"]);
 InspectorBackend.registerCommand("CSS.setStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}, {"name": "text", "type": "string"}], []);
 InspectorBackend.registerCommand("CSS.setStyleText", null, [{"name": "styleId", "type": "object"}, {"name": "text", "type": "string"}], ["style"]);
-InspectorBackend.registerCommand("CSS.setRuleSelector", null, [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
-InspectorBackend.registerCommand("CSS.createStyleSheet", null, [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
-InspectorBackend.registerCommand("CSS.addRule", null, [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.setRuleSelector", ["page"], [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.createStyleSheet", ["page"], [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
+InspectorBackend.registerCommand("CSS.addRule", ["page"], [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
 InspectorBackend.registerCommand("CSS.getSupportedCSSProperties", null, [], ["cssProperties"]);
-InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", null, [], ["fontFamilyNames"]);
-InspectorBackend.registerCommand("CSS.forcePseudoState", null, [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
+InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", ["page"], [], ["fontFamilyNames"]);
+InspectorBackend.registerCommand("CSS.forcePseudoState", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
 InspectorBackend.registerEvent("CSS.mediaQueryResultChanged", null, []);
 InspectorBackend.registerEvent("CSS.styleSheetChanged", null, ["styleSheetId"]);
-InspectorBackend.registerEvent("CSS.styleSheetAdded", null, ["header"]);
-InspectorBackend.registerEvent("CSS.styleSheetRemoved", null, ["styleSheetId"]);
+InspectorBackend.registerEvent("CSS.styleSheetAdded", ["page"], ["header"]);
+InspectorBackend.registerEvent("CSS.styleSheetRemoved", ["page"], ["styleSheetId"]);
 InspectorBackend.registerCSSDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "CSS");
-InspectorBackend.activateDomain("CSS", ["page"]);
+InspectorBackend.activateDomain("CSS", ["itml", "page"]);
 
 // Canvas
 InspectorBackend.registerDomain("Canvas", ["page"]);
@@ -95,7 +95,7 @@ InspectorBackend.registerCanvasDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Canvas", ["page"]);
 
 // Console
-InspectorBackend.registerDomain("Console", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Console", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Console.ChannelSource", {XML: "xml", JavaScript: "javascript", Network: "network", ConsoleAPI: "console-api", Storage: "storage", Appcache: "appcache", Rendering: "rendering", CSS: "css", Security: "security", ContentBlocker: "content-blocker", Media: "media", WebRTC: "webrtc", Other: "other"});
 InspectorBackend.registerEnum("Console.ChannelLevel", {Off: "off", Basic: "basic", Verbose: "verbose"});
 InspectorBackend.registerEnum("Console.ConsoleMessageLevel", {Log: "log", Info: "info", Warning: "warning", Error: "error", Debug: "debug"});
@@ -110,10 +110,10 @@ InspectorBackend.registerEvent("Console.messageRepeatCountUpdated", null, ["coun
 InspectorBackend.registerEvent("Console.messagesCleared", null, []);
 InspectorBackend.registerEvent("Console.heapSnapshot", null, ["timestamp", "snapshotData", "title"]);
 InspectorBackend.registerConsoleDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Console");
-InspectorBackend.activateDomain("Console", ["javascript", "page", "service-worker"]);
+InspectorBackend.activateDomain("Console", ["itml", "javascript", "page", "service-worker"]);
 
 // DOM
-InspectorBackend.registerDomain("DOM", ["page"]);
+InspectorBackend.registerDomain("DOM", ["itml", "page"]);
 InspectorBackend.registerEnum("DOM.PseudoType", {Before: "before", After: "after"});
 InspectorBackend.registerEnum("DOM.ShadowRootType", {UserAgent: "user-agent", Open: "open", Closed: "closed"});
 InspectorBackend.registerEnum("DOM.CustomElementState", {Builtin: "builtin", Custom: "custom", Waiting: "waiting", Failed: "failed"});
@@ -124,9 +124,9 @@ InspectorBackend.registerEnum("DOM.AccessibilityPropertiesInvalid", {True: "true
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesLiveRegionStatus", {Assertive: "assertive", Polite: "polite", Off: "off"});
 InspectorBackend.registerCommand("DOM.getDocument", null, [], ["root"]);
 InspectorBackend.registerCommand("DOM.requestChildNodes", null, [{"name": "nodeId", "type": "number"}, {"name": "depth", "type": "number", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.querySelector", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.querySelectorAll", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
-InspectorBackend.registerCommand("DOM.setNodeName", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelector", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelectorAll", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
+InspectorBackend.registerCommand("DOM.setNodeName", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setNodeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "value", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.removeNode", null, [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerCommand("DOM.setAttributeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}, {"name": "value", "type": "string"}], []);
@@ -137,28 +137,28 @@ InspectorBackend.registerCommand("DOM.setEventListenerDisabled", null, [{"name":
 InspectorBackend.registerCommand("DOM.getAccessibilityPropertiesForNode", null, [{"name": "nodeId", "type": "number"}], ["properties"]);
 InspectorBackend.registerCommand("DOM.getOuterHTML", null, [{"name": "nodeId", "type": "number"}], ["outerHTML"]);
 InspectorBackend.registerCommand("DOM.setOuterHTML", null, [{"name": "nodeId", "type": "number"}, {"name": "outerHTML", "type": "string"}], []);
-InspectorBackend.registerCommand("DOM.insertAdjacentHTML", null, [{"name": "nodeId", "type": "number"}, {"name": "position", "type": "string"}, {"name": "html", "type": "string"}], []);
+InspectorBackend.registerCommand("DOM.insertAdjacentHTML", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "position", "type": "string"}, {"name": "html", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.performSearch", null, [{"name": "query", "type": "string"}, {"name": "nodeIds", "type": "object", "optional": true}], ["searchId", "resultCount"]);
 InspectorBackend.registerCommand("DOM.getSearchResults", null, [{"name": "searchId", "type": "string"}, {"name": "fromIndex", "type": "number"}, {"name": "toIndex", "type": "number"}], ["nodeIds"]);
 InspectorBackend.registerCommand("DOM.discardSearchResults", null, [{"name": "searchId", "type": "string"}], []);
-InspectorBackend.registerCommand("DOM.requestNode", null, [{"name": "objectId", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.requestNode", ["page"], [{"name": "objectId", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setInspectModeEnabled", null, [{"name": "enabled", "type": "boolean"}, {"name": "highlightConfig", "type": "object", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightQuad", null, [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightSelector", null, [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightQuad", ["page"], [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightSelector", ["page"], [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.highlightNode", null, [{"name": "highlightConfig", "type": "object"}, {"name": "nodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.highlightNodeList", null, [{"name": "nodeIds", "type": "object"}, {"name": "highlightConfig", "type": "object"}], []);
 InspectorBackend.registerCommand("DOM.hideHighlight", null, [], []);
-InspectorBackend.registerCommand("DOM.highlightFrame", null, [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", null, [{"name": "path", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.resolveNode", null, [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("DOM.highlightFrame", ["page"], [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", ["page"], [{"name": "path", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.resolveNode", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerCommand("DOM.getAttributes", null, [{"name": "nodeId", "type": "number"}], ["attributes"]);
 InspectorBackend.registerCommand("DOM.moveTo", null, [{"name": "nodeId", "type": "number"}, {"name": "targetNodeId", "type": "number"}, {"name": "insertBeforeNodeId", "type": "number", "optional": true}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.undo", null, [], []);
-InspectorBackend.registerCommand("DOM.redo", null, [], []);
-InspectorBackend.registerCommand("DOM.markUndoableState", null, [], []);
-InspectorBackend.registerCommand("DOM.focus", null, [{"name": "nodeId", "type": "number"}], []);
-InspectorBackend.registerCommand("DOM.setInspectedNode", null, [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.undo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.redo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.markUndoableState", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.focus", ["page"], [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.setInspectedNode", ["page"], [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerEvent("DOM.documentUpdated", null, []);
 InspectorBackend.registerEvent("DOM.inspect", null, ["nodeId"]);
 InspectorBackend.registerEvent("DOM.setChildNodes", null, ["parentId", "nodes"]);
@@ -169,15 +169,15 @@ InspectorBackend.registerEvent("DOM.characterDataModified", null, ["nodeId", "ch
 InspectorBackend.registerEvent("DOM.childNodeCountUpdated", null, ["nodeId", "childNodeCount"]);
 InspectorBackend.registerEvent("DOM.childNodeInserted", null, ["parentNodeId", "previousNodeId", "node"]);
 InspectorBackend.registerEvent("DOM.childNodeRemoved", null, ["parentNodeId", "nodeId"]);
-InspectorBackend.registerEvent("DOM.shadowRootPushed", null, ["hostId", "root"]);
-InspectorBackend.registerEvent("DOM.shadowRootPopped", null, ["hostId", "rootId"]);
-InspectorBackend.registerEvent("DOM.customElementStateChanged", null, ["nodeId", "customElementState"]);
-InspectorBackend.registerEvent("DOM.pseudoElementAdded", null, ["parentId", "pseudoElement"]);
-InspectorBackend.registerEvent("DOM.pseudoElementRemoved", null, ["parentId", "pseudoElementId"]);
+InspectorBackend.registerEvent("DOM.shadowRootPushed", ["page"], ["hostId", "root"]);
+InspectorBackend.registerEvent("DOM.shadowRootPopped", ["page"], ["hostId", "rootId"]);
+InspectorBackend.registerEvent("DOM.customElementStateChanged", ["page"], ["nodeId", "customElementState"]);
+InspectorBackend.registerEvent("DOM.pseudoElementAdded", ["page"], ["parentId", "pseudoElement"]);
+InspectorBackend.registerEvent("DOM.pseudoElementRemoved", ["page"], ["parentId", "pseudoElementId"]);
 InspectorBackend.registerEvent("DOM.didAddEventListener", null, ["nodeId"]);
 InspectorBackend.registerEvent("DOM.willRemoveEventListener", null, ["nodeId"]);
 InspectorBackend.registerDOMDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOM");
-InspectorBackend.activateDomain("DOM", ["page"]);
+InspectorBackend.activateDomain("DOM", ["itml", "page"]);
 
 // DOMDebugger
 InspectorBackend.registerDomain("DOMDebugger", ["page"]);
@@ -193,7 +193,7 @@ InspectorBackend.registerCommand("DOMDebugger.removeXHRBreakpoint", null, [{"nam
 InspectorBackend.activateDomain("DOMDebugger", ["page"]);
 
 // DOMStorage
-InspectorBackend.registerDomain("DOMStorage", ["page"]);
+InspectorBackend.registerDomain("DOMStorage", ["itml", "page"]);
 InspectorBackend.registerCommand("DOMStorage.enable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.disable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.getDOMStorageItems", null, [{"name": "storageId", "type": "object"}], ["entries"]);
@@ -204,7 +204,7 @@ InspectorBackend.registerEvent("DOMStorage.domStorageItemRemoved", null, ["stora
 InspectorBackend.registerEvent("DOMStorage.domStorageItemAdded", null, ["storageId", "key", "newValue"]);
 InspectorBackend.registerEvent("DOMStorage.domStorageItemUpdated", null, ["storageId", "key", "oldValue", "newValue"]);
 InspectorBackend.registerDOMStorageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOMStorage");
-InspectorBackend.activateDomain("DOMStorage", ["page"]);
+InspectorBackend.activateDomain("DOMStorage", ["itml", "page"]);
 
 // Database
 InspectorBackend.registerDomain("Database", ["page"]);
@@ -217,7 +217,7 @@ InspectorBackend.registerDatabaseDispatcher = InspectorBackend.registerDispatche
 InspectorBackend.activateDomain("Database", ["page"]);
 
 // Debugger
-InspectorBackend.registerDomain("Debugger", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Debugger", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Debugger.BreakpointActionType", {Log: "log", Evaluate: "evaluate", Sound: "sound", Probe: "probe"});
 InspectorBackend.registerEnum("Debugger.ScopeType", {Global: "global", With: "with", Closure: "closure", Catch: "catch", FunctionName: "functionName", GlobalLexicalEnvironment: "globalLexicalEnvironment", NestedLexical: "nestedLexical"});
 InspectorBackend.registerCommand("Debugger.enable", null, [], []);
@@ -250,10 +250,10 @@ InspectorBackend.registerEvent("Debugger.resumed", null, []);
 InspectorBackend.registerEvent("Debugger.didSampleProbe", null, ["sample"]);
 InspectorBackend.registerEvent("Debugger.playBreakpointActionSound", null, ["breakpointActionId"]);
 InspectorBackend.registerDebuggerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Debugger");
-InspectorBackend.activateDomain("Debugger", ["javascript", "page", "service-worker"]);
+InspectorBackend.activateDomain("Debugger", ["itml", "javascript", "page", "service-worker"]);
 
 // Heap
-InspectorBackend.registerDomain("Heap", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Heap", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Heap.GarbageCollectionType", {Full: "full", Partial: "partial"});
 InspectorBackend.registerCommand("Heap.enable", null, [], []);
 InspectorBackend.registerCommand("Heap.disable", null, [], []);
@@ -267,7 +267,7 @@ InspectorBackend.registerEvent("Heap.garbageCollected", null, ["collection"]);
 InspectorBackend.registerEvent("Heap.trackingStart", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerEvent("Heap.trackingComplete", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerHeapDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Heap");
-InspectorBackend.activateDomain("Heap", ["javascript", "page", "service-worker"]);
+InspectorBackend.activateDomain("Heap", ["itml", "javascript", "page", "service-worker"]);
 
 // IndexedDB
 InspectorBackend.registerDomain("IndexedDB", ["page"]);
@@ -283,7 +283,7 @@ InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDispatch
 InspectorBackend.activateDomain("IndexedDB", ["page"]);
 
 // Inspector
-InspectorBackend.registerDomain("Inspector", ["javascript", "page"]);
+InspectorBackend.registerDomain("Inspector", ["itml", "javascript", "page"]);
 InspectorBackend.registerCommand("Inspector.enable", null, [], []);
 InspectorBackend.registerCommand("Inspector.disable", null, [], []);
 InspectorBackend.registerCommand("Inspector.initialized", null, [], []);
@@ -291,7 +291,7 @@ InspectorBackend.registerEvent("Inspector.evaluateForTestInFrontend", null, ["sc
 InspectorBackend.registerEvent("Inspector.inspect", null, ["object", "hints"]);
 InspectorBackend.registerEvent("Inspector.activateExtraDomains", null, ["domains"]);
 InspectorBackend.registerInspectorDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Inspector");
-InspectorBackend.activateDomain("Inspector", ["javascript", "page"]);
+InspectorBackend.activateDomain("Inspector", ["itml", "javascript", "page"]);
 
 // LayerTree
 InspectorBackend.registerDomain("LayerTree", ["page"]);
@@ -319,72 +319,72 @@ InspectorBackend.registerMemoryDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Memory", ["page"]);
 
 // Network
-InspectorBackend.registerDomain("Network", ["page", "service-worker"]);
+InspectorBackend.registerDomain("Network", ["itml", "page", "service-worker"]);
 InspectorBackend.registerEnum("Network.ResponseSource", {Unknown: "unknown", Network: "network", MemoryCache: "memory-cache", DiskCache: "disk-cache", ServiceWorker: "service-worker"});
 InspectorBackend.registerEnum("Network.MetricsPriority", {Low: "low", Medium: "medium", High: "high"});
 InspectorBackend.registerEnum("Network.InitiatorType", {Parser: "parser", Script: "script", Other: "other"});
 InspectorBackend.registerCommand("Network.enable", null, [], []);
 InspectorBackend.registerCommand("Network.disable", null, [], []);
-InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", null, [{"name": "headers", "type": "object"}], []);
+InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", ["page"], [{"name": "headers", "type": "object"}], []);
 InspectorBackend.registerCommand("Network.getResponseBody", null, [{"name": "requestId", "type": "string"}], ["body", "base64Encoded"]);
 InspectorBackend.registerCommand("Network.setResourceCachingDisabled", null, [{"name": "disabled", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Network.loadResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
-InspectorBackend.registerCommand("Network.resolveWebSocket", null, [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("Network.loadResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
+InspectorBackend.registerCommand("Network.resolveWebSocket", ["page"], [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerEvent("Network.requestWillBeSent", null, ["requestId", "frameId", "loaderId", "documentURL", "request", "timestamp", "walltime", "initiator", "redirectResponse", "type", "targetId"]);
 InspectorBackend.registerEvent("Network.responseReceived", null, ["requestId", "frameId", "loaderId", "timestamp", "type", "response"]);
 InspectorBackend.registerEvent("Network.dataReceived", null, ["requestId", "timestamp", "dataLength", "encodedDataLength"]);
 InspectorBackend.registerEvent("Network.loadingFinished", null, ["requestId", "timestamp", "sourceMapURL", "metrics"]);
 InspectorBackend.registerEvent("Network.loadingFailed", null, ["requestId", "timestamp", "errorText", "canceled"]);
 InspectorBackend.registerEvent("Network.requestServedFromMemoryCache", null, ["requestId", "frameId", "loaderId", "documentURL", "timestamp", "initiator", "resource"]);
-InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", null, ["requestId", "timestamp", "walltime", "request"]);
-InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketCreated", null, ["requestId", "url"]);
-InspectorBackend.registerEvent("Network.webSocketClosed", null, ["requestId", "timestamp"]);
-InspectorBackend.registerEvent("Network.webSocketFrameReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketFrameError", null, ["requestId", "timestamp", "errorMessage"]);
-InspectorBackend.registerEvent("Network.webSocketFrameSent", null, ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", ["page"], ["requestId", "timestamp", "walltime", "request"]);
+InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketCreated", ["page"], ["requestId", "url"]);
+InspectorBackend.registerEvent("Network.webSocketClosed", ["page"], ["requestId", "timestamp"]);
+InspectorBackend.registerEvent("Network.webSocketFrameReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketFrameError", ["page"], ["requestId", "timestamp", "errorMessage"]);
+InspectorBackend.registerEvent("Network.webSocketFrameSent", ["page"], ["requestId", "timestamp", "response"]);
 InspectorBackend.registerNetworkDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Network");
-InspectorBackend.activateDomain("Network", ["page", "service-worker"]);
+InspectorBackend.activateDomain("Network", ["itml", "page", "service-worker"]);
 
 // Page
-InspectorBackend.registerDomain("Page", ["page"]);
+InspectorBackend.registerDomain("Page", ["itml", "page"]);
 InspectorBackend.registerEnum("Page.ResourceType", {Document: "Document", Stylesheet: "Stylesheet", Image: "Image", Font: "Font", Script: "Script", XHR: "XHR", Fetch: "Fetch", Ping: "Ping", Beacon: "Beacon", WebSocket: "WebSocket", Other: "Other"});
 InspectorBackend.registerEnum("Page.CoordinateSystem", {Viewport: "Viewport", Page: "Page"});
 InspectorBackend.registerCommand("Page.enable", null, [], []);
 InspectorBackend.registerCommand("Page.disable", null, [], []);
 InspectorBackend.registerCommand("Page.reload", null, [{"name": "ignoreCache", "type": "boolean", "optional": true}, {"name": "revalidateAllResources", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("Page.navigate", null, [{"name": "url", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.getCookies", null, [], ["cookies"]);
-InspectorBackend.registerCommand("Page.deleteCookie", null, [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.navigate", ["page"], [{"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.getCookies", ["page"], [], ["cookies"]);
+InspectorBackend.registerCommand("Page.deleteCookie", ["page"], [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
 InspectorBackend.registerCommand("Page.getResourceTree", null, [], ["frameTree"]);
 InspectorBackend.registerCommand("Page.getResourceContent", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "base64Encoded"]);
-InspectorBackend.registerCommand("Page.searchInResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.searchInResources", null, [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.setShowPaintRects", null, [{"name": "result", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.setEmulatedMedia", null, [{"name": "media", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.getCompositingBordersVisible", null, [], ["result"]);
-InspectorBackend.registerCommand("Page.setCompositingBordersVisible", null, [{"name": "visible", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.snapshotNode", null, [{"name": "nodeId", "type": "number"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.snapshotRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.archive", null, [], ["data"]);
-InspectorBackend.registerEvent("Page.domContentEventFired", null, ["timestamp"]);
-InspectorBackend.registerEvent("Page.loadEventFired", null, ["timestamp"]);
+InspectorBackend.registerCommand("Page.searchInResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.searchInResources", ["page"], [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.setShowPaintRects", ["page"], [{"name": "result", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.setEmulatedMedia", ["page"], [{"name": "media", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.getCompositingBordersVisible", ["page"], [], ["result"]);
+InspectorBackend.registerCommand("Page.setCompositingBordersVisible", ["page"], [{"name": "visible", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.snapshotNode", ["page"], [{"name": "nodeId", "type": "number"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.snapshotRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.archive", ["page"], [], ["data"]);
+InspectorBackend.registerEvent("Page.domContentEventFired", ["page"], ["timestamp"]);
+InspectorBackend.registerEvent("Page.loadEventFired", ["page"], ["timestamp"]);
 InspectorBackend.registerEvent("Page.frameNavigated", null, ["frame"]);
-InspectorBackend.registerEvent("Page.frameDetached", null, ["frameId"]);
+InspectorBackend.registerEvent("Page.frameDetached", ["page"], ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStartedLoading", null, ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStoppedLoading", null, ["frameId"]);
-InspectorBackend.registerEvent("Page.frameScheduledNavigation", null, ["frameId", "delay"]);
-InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", null, ["frameId"]);
+InspectorBackend.registerEvent("Page.frameScheduledNavigation", ["page"], ["frameId", "delay"]);
+InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", ["page"], ["frameId"]);
 InspectorBackend.registerPageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Page");
-InspectorBackend.activateDomain("Page", ["page"]);
+InspectorBackend.activateDomain("Page", ["itml", "page"]);
 
 // Recording
-InspectorBackend.registerDomain("Recording", null);
+InspectorBackend.registerDomain("Recording", ["page"]);
 InspectorBackend.registerEnum("Recording.Type", {Canvas2D: "canvas-2d", CanvasWebGL: "canvas-webgl"});
-InspectorBackend.activateDomain("Recording", null);
+InspectorBackend.activateDomain("Recording", ["page"]);
 
 // Runtime
-InspectorBackend.registerDomain("Runtime", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Runtime", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Runtime.RemoteObjectType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol"});
 InspectorBackend.registerEnum("Runtime.RemoteObjectSubtype", {Array: "array", Null: "null", Node: "node", Regexp: "regexp", Date: "date", Error: "error", Map: "map", Set: "set", Weakmap: "weakmap", Weakset: "weakset", Iterator: "iterator", Class: "class", Proxy: "proxy"});
 InspectorBackend.registerEnum("Runtime.ObjectPreviewType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol"});
@@ -412,10 +412,10 @@ InspectorBackend.registerCommand("Runtime.disableControlFlowProfiler", null, [],
 InspectorBackend.registerCommand("Runtime.getBasicBlocks", null, [{"name": "sourceID", "type": "string"}], ["basicBlocks"]);
 InspectorBackend.registerEvent("Runtime.executionContextCreated", null, ["context"]);
 InspectorBackend.registerRuntimeDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Runtime");
-InspectorBackend.activateDomain("Runtime", ["javascript", "page", "service-worker"]);
+InspectorBackend.activateDomain("Runtime", ["itml", "javascript", "page", "service-worker"]);
 
 // ScriptProfiler
-InspectorBackend.registerDomain("ScriptProfiler", ["javascript", "page"]);
+InspectorBackend.registerDomain("ScriptProfiler", ["itml", "javascript", "page"]);
 InspectorBackend.registerEnum("ScriptProfiler.EventType", {API: "API", Microtask: "Microtask", Other: "Other"});
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", null, [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", null, [], []);
@@ -425,7 +425,7 @@ InspectorBackend.registerEvent("ScriptProfiler.trackingComplete", null, ["sample
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStarted", null, []);
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStopped", null, []);
 InspectorBackend.registerScriptProfilerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "ScriptProfiler");
-InspectorBackend.activateDomain("ScriptProfiler", ["javascript", "page"]);
+InspectorBackend.activateDomain("ScriptProfiler", ["itml", "javascript", "page"]);
 
 // ServiceWorker
 InspectorBackend.registerDomain("ServiceWorker", ["service-worker"]);
index 584a825..5661aa5 100644 (file)
@@ -40,7 +40,7 @@ InspectorBackend.registerApplicationCacheDispatcher = InspectorBackend.registerD
 InspectorBackend.activateDomain("ApplicationCache", ["page"]);
 
 // CSS
-InspectorBackend.registerDomain("CSS", ["page"]);
+InspectorBackend.registerDomain("CSS", ["itml", "page"]);
 InspectorBackend.registerEnum("CSS.StyleSheetOrigin", {User: "user", UserAgent: "user-agent", Inspector: "inspector", Regular: "regular"});
 InspectorBackend.registerEnum("CSS.CSSPropertyStatus", {Active: "active", Inactive: "inactive", Disabled: "disabled", Style: "style"});
 InspectorBackend.registerEnum("CSS.CSSMediaSource", {MediaRule: "mediaRule", ImportRule: "importRule", LinkedSheet: "linkedSheet", InlineSheet: "inlineSheet"});
@@ -54,18 +54,18 @@ InspectorBackend.registerCommand("CSS.getStyleSheet", null, [{"name": "styleShee
 InspectorBackend.registerCommand("CSS.getStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}], ["text"]);
 InspectorBackend.registerCommand("CSS.setStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}, {"name": "text", "type": "string"}], []);
 InspectorBackend.registerCommand("CSS.setStyleText", null, [{"name": "styleId", "type": "object"}, {"name": "text", "type": "string"}], ["style"]);
-InspectorBackend.registerCommand("CSS.setRuleSelector", null, [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
-InspectorBackend.registerCommand("CSS.createStyleSheet", null, [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
-InspectorBackend.registerCommand("CSS.addRule", null, [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.setRuleSelector", ["page"], [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.createStyleSheet", ["page"], [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
+InspectorBackend.registerCommand("CSS.addRule", ["page"], [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
 InspectorBackend.registerCommand("CSS.getSupportedCSSProperties", null, [], ["cssProperties"]);
-InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", null, [], ["fontFamilyNames"]);
-InspectorBackend.registerCommand("CSS.forcePseudoState", null, [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
+InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", ["page"], [], ["fontFamilyNames"]);
+InspectorBackend.registerCommand("CSS.forcePseudoState", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
 InspectorBackend.registerEvent("CSS.mediaQueryResultChanged", null, []);
 InspectorBackend.registerEvent("CSS.styleSheetChanged", null, ["styleSheetId"]);
-InspectorBackend.registerEvent("CSS.styleSheetAdded", null, ["header"]);
-InspectorBackend.registerEvent("CSS.styleSheetRemoved", null, ["styleSheetId"]);
+InspectorBackend.registerEvent("CSS.styleSheetAdded", ["page"], ["header"]);
+InspectorBackend.registerEvent("CSS.styleSheetRemoved", ["page"], ["styleSheetId"]);
 InspectorBackend.registerCSSDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "CSS");
-InspectorBackend.activateDomain("CSS", ["page"]);
+InspectorBackend.activateDomain("CSS", ["itml", "page"]);
 
 // Canvas
 InspectorBackend.registerDomain("Canvas", ["page"]);
@@ -96,7 +96,7 @@ InspectorBackend.registerCanvasDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Canvas", ["page"]);
 
 // Console
-InspectorBackend.registerDomain("Console", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Console", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Console.ChannelSource", {XML: "xml", JavaScript: "javascript", Network: "network", ConsoleAPI: "console-api", Storage: "storage", Appcache: "appcache", Rendering: "rendering", CSS: "css", Security: "security", ContentBlocker: "content-blocker", Media: "media", WebRTC: "webrtc", Other: "other"});
 InspectorBackend.registerEnum("Console.ChannelLevel", {Off: "off", Basic: "basic", Verbose: "verbose"});
 InspectorBackend.registerEnum("Console.ConsoleMessageLevel", {Log: "log", Info: "info", Warning: "warning", Error: "error", Debug: "debug"});
@@ -111,10 +111,10 @@ InspectorBackend.registerEvent("Console.messageRepeatCountUpdated", null, ["coun
 InspectorBackend.registerEvent("Console.messagesCleared", null, []);
 InspectorBackend.registerEvent("Console.heapSnapshot", null, ["timestamp", "snapshotData", "title"]);
 InspectorBackend.registerConsoleDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Console");
-InspectorBackend.activateDomain("Console", ["javascript", "page", "service-worker"]);
+InspectorBackend.activateDomain("Console", ["itml", "javascript", "page", "service-worker"]);
 
 // DOM
-InspectorBackend.registerDomain("DOM", ["page"]);
+InspectorBackend.registerDomain("DOM", ["itml", "page"]);
 InspectorBackend.registerEnum("DOM.PseudoType", {Before: "before", After: "after"});
 InspectorBackend.registerEnum("DOM.ShadowRootType", {UserAgent: "user-agent", Open: "open", Closed: "closed"});
 InspectorBackend.registerEnum("DOM.CustomElementState", {Builtin: "builtin", Custom: "custom", Waiting: "waiting", Failed: "failed"});
@@ -125,9 +125,9 @@ InspectorBackend.registerEnum("DOM.AccessibilityPropertiesInvalid", {True: "true
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesLiveRegionStatus", {Assertive: "assertive", Polite: "polite", Off: "off"});
 InspectorBackend.registerCommand("DOM.getDocument", null, [], ["root"]);
 InspectorBackend.registerCommand("DOM.requestChildNodes", null, [{"name": "nodeId", "type": "number"}, {"name": "depth", "type": "number", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.querySelector", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.querySelectorAll", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
-InspectorBackend.registerCommand("DOM.setNodeName", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelector", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelectorAll", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
+InspectorBackend.registerCommand("DOM.setNodeName", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setNodeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "value", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.removeNode", null, [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerCommand("DOM.setAttributeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}, {"name": "value", "type": "string"}], []);
@@ -138,28 +138,28 @@ InspectorBackend.registerCommand("DOM.setEventListenerDisabled", null, [{"name":
 InspectorBackend.registerCommand("DOM.getAccessibilityPropertiesForNode", null, [{"name": "nodeId", "type": "number"}], ["properties"]);
 InspectorBackend.registerCommand("DOM.getOuterHTML", null, [{"name": "nodeId", "type": "number"}], ["outerHTML"]);
 InspectorBackend.registerCommand("DOM.setOuterHTML", null, [{"name": "nodeId", "type": "number"}, {"name": "outerHTML", "type": "string"}], []);
-InspectorBackend.registerCommand("DOM.insertAdjacentHTML", null, [{"name": "nodeId", "type": "number"}, {"name": "position", "type": "string"}, {"name": "html", "type": "string"}], []);
+InspectorBackend.registerCommand("DOM.insertAdjacentHTML", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "position", "type": "string"}, {"name": "html", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.performSearch", null, [{"name": "query", "type": "string"}, {"name": "nodeIds", "type": "object", "optional": true}], ["searchId", "resultCount"]);
 InspectorBackend.registerCommand("DOM.getSearchResults", null, [{"name": "searchId", "type": "string"}, {"name": "fromIndex", "type": "number"}, {"name": "toIndex", "type": "number"}], ["nodeIds"]);
 InspectorBackend.registerCommand("DOM.discardSearchResults", null, [{"name": "searchId", "type": "string"}], []);
-InspectorBackend.registerCommand("DOM.requestNode", null, [{"name": "objectId", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.requestNode", ["page"], [{"name": "objectId", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setInspectModeEnabled", null, [{"name": "enabled", "type": "boolean"}, {"name": "highlightConfig", "type": "object", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightQuad", null, [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightSelector", null, [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightQuad", ["page"], [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightSelector", ["page"], [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.highlightNode", null, [{"name": "highlightConfig", "type": "object"}, {"name": "nodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.highlightNodeList", null, [{"name": "nodeIds", "type": "object"}, {"name": "highlightConfig", "type": "object"}], []);
 InspectorBackend.registerCommand("DOM.hideHighlight", null, [], []);
-InspectorBackend.registerCommand("DOM.highlightFrame", null, [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", null, [{"name": "path", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.resolveNode", null, [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("DOM.highlightFrame", ["page"], [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", ["page"], [{"name": "path", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.resolveNode", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerCommand("DOM.getAttributes", null, [{"name": "nodeId", "type": "number"}], ["attributes"]);
 InspectorBackend.registerCommand("DOM.moveTo", null, [{"name": "nodeId", "type": "number"}, {"name": "targetNodeId", "type": "number"}, {"name": "insertBeforeNodeId", "type": "number", "optional": true}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.undo", null, [], []);
-InspectorBackend.registerCommand("DOM.redo", null, [], []);
-InspectorBackend.registerCommand("DOM.markUndoableState", null, [], []);
-InspectorBackend.registerCommand("DOM.focus", null, [{"name": "nodeId", "type": "number"}], []);
-InspectorBackend.registerCommand("DOM.setInspectedNode", null, [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.undo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.redo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.markUndoableState", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.focus", ["page"], [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.setInspectedNode", ["page"], [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerEvent("DOM.documentUpdated", null, []);
 InspectorBackend.registerEvent("DOM.inspect", null, ["nodeId"]);
 InspectorBackend.registerEvent("DOM.setChildNodes", null, ["parentId", "nodes"]);
@@ -170,15 +170,15 @@ InspectorBackend.registerEvent("DOM.characterDataModified", null, ["nodeId", "ch
 InspectorBackend.registerEvent("DOM.childNodeCountUpdated", null, ["nodeId", "childNodeCount"]);
 InspectorBackend.registerEvent("DOM.childNodeInserted", null, ["parentNodeId", "previousNodeId", "node"]);
 InspectorBackend.registerEvent("DOM.childNodeRemoved", null, ["parentNodeId", "nodeId"]);
-InspectorBackend.registerEvent("DOM.shadowRootPushed", null, ["hostId", "root"]);
-InspectorBackend.registerEvent("DOM.shadowRootPopped", null, ["hostId", "rootId"]);
-InspectorBackend.registerEvent("DOM.customElementStateChanged", null, ["nodeId", "customElementState"]);
-InspectorBackend.registerEvent("DOM.pseudoElementAdded", null, ["parentId", "pseudoElement"]);
-InspectorBackend.registerEvent("DOM.pseudoElementRemoved", null, ["parentId", "pseudoElementId"]);
+InspectorBackend.registerEvent("DOM.shadowRootPushed", ["page"], ["hostId", "root"]);
+InspectorBackend.registerEvent("DOM.shadowRootPopped", ["page"], ["hostId", "rootId"]);
+InspectorBackend.registerEvent("DOM.customElementStateChanged", ["page"], ["nodeId", "customElementState"]);
+InspectorBackend.registerEvent("DOM.pseudoElementAdded", ["page"], ["parentId", "pseudoElement"]);
+InspectorBackend.registerEvent("DOM.pseudoElementRemoved", ["page"], ["parentId", "pseudoElementId"]);
 InspectorBackend.registerEvent("DOM.didAddEventListener", null, ["nodeId"]);
 InspectorBackend.registerEvent("DOM.willRemoveEventListener", null, ["nodeId"]);
 InspectorBackend.registerDOMDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOM");
-InspectorBackend.activateDomain("DOM", ["page"]);
+InspectorBackend.activateDomain("DOM", ["itml", "page"]);
 
 // DOMDebugger
 InspectorBackend.registerDomain("DOMDebugger", ["page"]);
@@ -194,7 +194,7 @@ InspectorBackend.registerCommand("DOMDebugger.removeXHRBreakpoint", null, [{"nam
 InspectorBackend.activateDomain("DOMDebugger", ["page"]);
 
 // DOMStorage
-InspectorBackend.registerDomain("DOMStorage", ["page"]);
+InspectorBackend.registerDomain("DOMStorage", ["itml", "page"]);
 InspectorBackend.registerCommand("DOMStorage.enable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.disable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.getDOMStorageItems", null, [{"name": "storageId", "type": "object"}], ["entries"]);
@@ -205,7 +205,7 @@ InspectorBackend.registerEvent("DOMStorage.domStorageItemRemoved", null, ["stora
 InspectorBackend.registerEvent("DOMStorage.domStorageItemAdded", null, ["storageId", "key", "newValue"]);
 InspectorBackend.registerEvent("DOMStorage.domStorageItemUpdated", null, ["storageId", "key", "oldValue", "newValue"]);
 InspectorBackend.registerDOMStorageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOMStorage");
-InspectorBackend.activateDomain("DOMStorage", ["page"]);
+InspectorBackend.activateDomain("DOMStorage", ["itml", "page"]);
 
 // Database
 InspectorBackend.registerDomain("Database", ["page"]);
@@ -218,7 +218,7 @@ InspectorBackend.registerDatabaseDispatcher = InspectorBackend.registerDispatche
 InspectorBackend.activateDomain("Database", ["page"]);
 
 // Debugger
-InspectorBackend.registerDomain("Debugger", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Debugger", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Debugger.BreakpointActionType", {Log: "log", Evaluate: "evaluate", Sound: "sound", Probe: "probe"});
 InspectorBackend.registerEnum("Debugger.ScopeType", {Global: "global", With: "with", Closure: "closure", Catch: "catch", FunctionName: "functionName", GlobalLexicalEnvironment: "globalLexicalEnvironment", NestedLexical: "nestedLexical"});
 InspectorBackend.registerCommand("Debugger.enable", null, [], []);
@@ -252,10 +252,10 @@ InspectorBackend.registerEvent("Debugger.resumed", null, []);
 InspectorBackend.registerEvent("Debugger.didSampleProbe", null, ["sample"]);
 InspectorBackend.registerEvent("Debugger.playBreakpointActionSound", null, ["breakpointActionId"]);
 InspectorBackend.registerDebuggerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Debugger");
-InspectorBackend.activateDomain("Debugger", ["javascript", "page", "service-worker"]);
+InspectorBackend.activateDomain("Debugger", ["itml", "javascript", "page", "service-worker"]);
 
 // Heap
-InspectorBackend.registerDomain("Heap", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Heap", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Heap.GarbageCollectionType", {Full: "full", Partial: "partial"});
 InspectorBackend.registerCommand("Heap.enable", null, [], []);
 InspectorBackend.registerCommand("Heap.disable", null, [], []);
@@ -269,7 +269,7 @@ InspectorBackend.registerEvent("Heap.garbageCollected", null, ["collection"]);
 InspectorBackend.registerEvent("Heap.trackingStart", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerEvent("Heap.trackingComplete", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerHeapDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Heap");
-InspectorBackend.activateDomain("Heap", ["javascript", "page", "service-worker"]);
+InspectorBackend.activateDomain("Heap", ["itml", "javascript", "page", "service-worker"]);
 
 // IndexedDB
 InspectorBackend.registerDomain("IndexedDB", ["page"]);
@@ -285,7 +285,7 @@ InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDispatch
 InspectorBackend.activateDomain("IndexedDB", ["page"]);
 
 // Inspector
-InspectorBackend.registerDomain("Inspector", ["javascript", "page"]);
+InspectorBackend.registerDomain("Inspector", ["itml", "javascript", "page"]);
 InspectorBackend.registerCommand("Inspector.enable", null, [], []);
 InspectorBackend.registerCommand("Inspector.disable", null, [], []);
 InspectorBackend.registerCommand("Inspector.initialized", null, [], []);
@@ -293,7 +293,7 @@ InspectorBackend.registerEvent("Inspector.evaluateForTestInFrontend", null, ["sc
 InspectorBackend.registerEvent("Inspector.inspect", null, ["object", "hints"]);
 InspectorBackend.registerEvent("Inspector.activateExtraDomains", null, ["domains"]);
 InspectorBackend.registerInspectorDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Inspector");
-InspectorBackend.activateDomain("Inspector", ["javascript", "page"]);
+InspectorBackend.activateDomain("Inspector", ["itml", "javascript", "page"]);
 
 // LayerTree
 InspectorBackend.registerDomain("LayerTree", ["page"]);
@@ -321,74 +321,74 @@ InspectorBackend.registerMemoryDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Memory", ["page"]);
 
 // Network
-InspectorBackend.registerDomain("Network", ["page", "service-worker"]);
+InspectorBackend.registerDomain("Network", ["itml", "page", "service-worker"]);
 InspectorBackend.registerEnum("Network.ResponseSource", {Unknown: "unknown", Network: "network", MemoryCache: "memory-cache", DiskCache: "disk-cache", ServiceWorker: "service-worker"});
 InspectorBackend.registerEnum("Network.MetricsPriority", {Low: "low", Medium: "medium", High: "high"});
 InspectorBackend.registerEnum("Network.InitiatorType", {Parser: "parser", Script: "script", Other: "other"});
 InspectorBackend.registerCommand("Network.enable", null, [], []);
 InspectorBackend.registerCommand("Network.disable", null, [], []);
-InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", null, [{"name": "headers", "type": "object"}], []);
+InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", ["page"], [{"name": "headers", "type": "object"}], []);
 InspectorBackend.registerCommand("Network.getResponseBody", null, [{"name": "requestId", "type": "string"}], ["body", "base64Encoded"]);
 InspectorBackend.registerCommand("Network.setResourceCachingDisabled", null, [{"name": "disabled", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Network.loadResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
-InspectorBackend.registerCommand("Network.resolveWebSocket", null, [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("Network.loadResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
+InspectorBackend.registerCommand("Network.resolveWebSocket", ["page"], [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerEvent("Network.requestWillBeSent", null, ["requestId", "frameId", "loaderId", "documentURL", "request", "timestamp", "walltime", "initiator", "redirectResponse", "type", "targetId"]);
 InspectorBackend.registerEvent("Network.responseReceived", null, ["requestId", "frameId", "loaderId", "timestamp", "type", "response"]);
 InspectorBackend.registerEvent("Network.dataReceived", null, ["requestId", "timestamp", "dataLength", "encodedDataLength"]);
 InspectorBackend.registerEvent("Network.loadingFinished", null, ["requestId", "timestamp", "sourceMapURL", "metrics"]);
 InspectorBackend.registerEvent("Network.loadingFailed", null, ["requestId", "timestamp", "errorText", "canceled"]);
 InspectorBackend.registerEvent("Network.requestServedFromMemoryCache", null, ["requestId", "frameId", "loaderId", "documentURL", "timestamp", "initiator", "resource"]);
-InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", null, ["requestId", "timestamp", "walltime", "request"]);
-InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketCreated", null, ["requestId", "url"]);
-InspectorBackend.registerEvent("Network.webSocketClosed", null, ["requestId", "timestamp"]);
-InspectorBackend.registerEvent("Network.webSocketFrameReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketFrameError", null, ["requestId", "timestamp", "errorMessage"]);
-InspectorBackend.registerEvent("Network.webSocketFrameSent", null, ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", ["page"], ["requestId", "timestamp", "walltime", "request"]);
+InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketCreated", ["page"], ["requestId", "url"]);
+InspectorBackend.registerEvent("Network.webSocketClosed", ["page"], ["requestId", "timestamp"]);
+InspectorBackend.registerEvent("Network.webSocketFrameReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketFrameError", ["page"], ["requestId", "timestamp", "errorMessage"]);
+InspectorBackend.registerEvent("Network.webSocketFrameSent", ["page"], ["requestId", "timestamp", "response"]);
 InspectorBackend.registerNetworkDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Network");
-InspectorBackend.activateDomain("Network", ["page", "service-worker"]);
+InspectorBackend.activateDomain("Network", ["itml", "page", "service-worker"]);
 
 // Page
-InspectorBackend.registerDomain("Page", ["page"]);
+InspectorBackend.registerDomain("Page", ["itml", "page"]);
 InspectorBackend.registerEnum("Page.ResourceType", {Document: "Document", Stylesheet: "Stylesheet", Image: "Image", Font: "Font", Script: "Script", XHR: "XHR", Fetch: "Fetch", Ping: "Ping", Beacon: "Beacon", WebSocket: "WebSocket", Other: "Other"});
 InspectorBackend.registerEnum("Page.CoordinateSystem", {Viewport: "Viewport", Page: "Page"});
 InspectorBackend.registerEnum("Page.CookieSameSitePolicy", {None: "None", Lax: "Lax", Strict: "Strict"});
 InspectorBackend.registerCommand("Page.enable", null, [], []);
 InspectorBackend.registerCommand("Page.disable", null, [], []);
 InspectorBackend.registerCommand("Page.reload", null, [{"name": "ignoreCache", "type": "boolean", "optional": true}, {"name": "revalidateAllResources", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("Page.navigate", null, [{"name": "url", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.getCookies", null, [], ["cookies"]);
-InspectorBackend.registerCommand("Page.deleteCookie", null, [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.navigate", ["page"], [{"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.getCookies", ["page"], [], ["cookies"]);
+InspectorBackend.registerCommand("Page.deleteCookie", ["page"], [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
 InspectorBackend.registerCommand("Page.getResourceTree", null, [], ["frameTree"]);
 InspectorBackend.registerCommand("Page.getResourceContent", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "base64Encoded"]);
-InspectorBackend.registerCommand("Page.searchInResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.searchInResources", null, [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.setShowRulers", null, [{"name": "result", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.setShowPaintRects", null, [{"name": "result", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.setEmulatedMedia", null, [{"name": "media", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.getCompositingBordersVisible", null, [], ["result"]);
-InspectorBackend.registerCommand("Page.setCompositingBordersVisible", null, [{"name": "visible", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.snapshotNode", null, [{"name": "nodeId", "type": "number"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.snapshotRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.archive", null, [], ["data"]);
-InspectorBackend.registerEvent("Page.domContentEventFired", null, ["timestamp"]);
-InspectorBackend.registerEvent("Page.loadEventFired", null, ["timestamp"]);
+InspectorBackend.registerCommand("Page.searchInResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.searchInResources", ["page"], [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.setShowRulers", ["page"], [{"name": "result", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.setShowPaintRects", ["page"], [{"name": "result", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.setEmulatedMedia", ["page"], [{"name": "media", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.getCompositingBordersVisible", ["page"], [], ["result"]);
+InspectorBackend.registerCommand("Page.setCompositingBordersVisible", ["page"], [{"name": "visible", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.snapshotNode", ["page"], [{"name": "nodeId", "type": "number"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.snapshotRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.archive", ["page"], [], ["data"]);
+InspectorBackend.registerEvent("Page.domContentEventFired", ["page"], ["timestamp"]);
+InspectorBackend.registerEvent("Page.loadEventFired", ["page"], ["timestamp"]);
 InspectorBackend.registerEvent("Page.frameNavigated", null, ["frame"]);
-InspectorBackend.registerEvent("Page.frameDetached", null, ["frameId"]);
+InspectorBackend.registerEvent("Page.frameDetached", ["page"], ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStartedLoading", null, ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStoppedLoading", null, ["frameId"]);
-InspectorBackend.registerEvent("Page.frameScheduledNavigation", null, ["frameId", "delay"]);
-InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", null, ["frameId"]);
+InspectorBackend.registerEvent("Page.frameScheduledNavigation", ["page"], ["frameId", "delay"]);
+InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", ["page"], ["frameId"]);
 InspectorBackend.registerPageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Page");
-InspectorBackend.activateDomain("Page", ["page"]);
+InspectorBackend.activateDomain("Page", ["itml", "page"]);
 
 // Recording
-InspectorBackend.registerDomain("Recording", null);
+InspectorBackend.registerDomain("Recording", ["page"]);
 InspectorBackend.registerEnum("Recording.Type", {Canvas2D: "canvas-2d", CanvasWebGL: "canvas-webgl"});
-InspectorBackend.activateDomain("Recording", null);
+InspectorBackend.activateDomain("Recording", ["page"]);
 
 // Runtime
-InspectorBackend.registerDomain("Runtime", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Runtime", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Runtime.RemoteObjectType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol"});
 InspectorBackend.registerEnum("Runtime.RemoteObjectSubtype", {Array: "array", Null: "null", Node: "node", Regexp: "regexp", Date: "date", Error: "error", Map: "map", Set: "set", Weakmap: "weakmap", Weakset: "weakset", Iterator: "iterator", Class: "class", Proxy: "proxy"});
 InspectorBackend.registerEnum("Runtime.ObjectPreviewType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol"});
@@ -416,10 +416,10 @@ InspectorBackend.registerCommand("Runtime.disableControlFlowProfiler", null, [],
 InspectorBackend.registerCommand("Runtime.getBasicBlocks", null, [{"name": "sourceID", "type": "string"}], ["basicBlocks"]);
 InspectorBackend.registerEvent("Runtime.executionContextCreated", null, ["context"]);
 InspectorBackend.registerRuntimeDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Runtime");
-InspectorBackend.activateDomain("Runtime", ["javascript", "page", "service-worker"]);
+InspectorBackend.activateDomain("Runtime", ["itml", "javascript", "page", "service-worker"]);
 
 // ScriptProfiler
-InspectorBackend.registerDomain("ScriptProfiler", ["javascript", "page"]);
+InspectorBackend.registerDomain("ScriptProfiler", ["itml", "javascript", "page"]);
 InspectorBackend.registerEnum("ScriptProfiler.EventType", {API: "API", Microtask: "Microtask", Other: "Other"});
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", null, [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", null, [], []);
@@ -429,7 +429,7 @@ InspectorBackend.registerEvent("ScriptProfiler.trackingComplete", null, ["sample
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStarted", null, []);
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStopped", null, []);
 InspectorBackend.registerScriptProfilerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "ScriptProfiler");
-InspectorBackend.activateDomain("ScriptProfiler", ["javascript", "page"]);
+InspectorBackend.activateDomain("ScriptProfiler", ["itml", "javascript", "page"]);
 
 // ServiceWorker
 InspectorBackend.registerDomain("ServiceWorker", ["service-worker"]);
index 657e36c..e85e074 100644 (file)
@@ -40,7 +40,7 @@ InspectorBackend.registerApplicationCacheDispatcher = InspectorBackend.registerD
 InspectorBackend.activateDomain("ApplicationCache", ["page", "web-page"]);
 
 // CSS
-InspectorBackend.registerDomain("CSS", ["page"]);
+InspectorBackend.registerDomain("CSS", ["itml", "page"]);
 InspectorBackend.registerEnum("CSS.StyleSheetOrigin", {User: "user", UserAgent: "user-agent", Inspector: "inspector", Regular: "regular"});
 InspectorBackend.registerEnum("CSS.CSSPropertyStatus", {Active: "active", Inactive: "inactive", Disabled: "disabled", Style: "style"});
 InspectorBackend.registerEnum("CSS.CSSMediaSource", {MediaRule: "mediaRule", ImportRule: "importRule", LinkedSheet: "linkedSheet", InlineSheet: "inlineSheet"});
@@ -54,18 +54,18 @@ InspectorBackend.registerCommand("CSS.getStyleSheet", null, [{"name": "styleShee
 InspectorBackend.registerCommand("CSS.getStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}], ["text"]);
 InspectorBackend.registerCommand("CSS.setStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}, {"name": "text", "type": "string"}], []);
 InspectorBackend.registerCommand("CSS.setStyleText", null, [{"name": "styleId", "type": "object"}, {"name": "text", "type": "string"}], ["style"]);
-InspectorBackend.registerCommand("CSS.setRuleSelector", null, [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
-InspectorBackend.registerCommand("CSS.createStyleSheet", null, [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
-InspectorBackend.registerCommand("CSS.addRule", null, [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.setRuleSelector", ["page"], [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.createStyleSheet", ["page"], [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
+InspectorBackend.registerCommand("CSS.addRule", ["page"], [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
 InspectorBackend.registerCommand("CSS.getSupportedCSSProperties", null, [], ["cssProperties"]);
-InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", null, [], ["fontFamilyNames"]);
-InspectorBackend.registerCommand("CSS.forcePseudoState", null, [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
+InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", ["page"], [], ["fontFamilyNames"]);
+InspectorBackend.registerCommand("CSS.forcePseudoState", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
 InspectorBackend.registerEvent("CSS.mediaQueryResultChanged", null, []);
 InspectorBackend.registerEvent("CSS.styleSheetChanged", null, ["styleSheetId"]);
-InspectorBackend.registerEvent("CSS.styleSheetAdded", null, ["header"]);
-InspectorBackend.registerEvent("CSS.styleSheetRemoved", null, ["styleSheetId"]);
+InspectorBackend.registerEvent("CSS.styleSheetAdded", ["page"], ["header"]);
+InspectorBackend.registerEvent("CSS.styleSheetRemoved", ["page"], ["styleSheetId"]);
 InspectorBackend.registerCSSDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "CSS");
-InspectorBackend.activateDomain("CSS", ["page", "web-page"]);
+InspectorBackend.activateDomain("CSS", ["itml", "page", "web-page"]);
 
 // Canvas
 InspectorBackend.registerDomain("Canvas", ["page"]);
@@ -98,7 +98,7 @@ InspectorBackend.registerCanvasDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Canvas", ["page", "web-page"]);
 
 // Console
-InspectorBackend.registerDomain("Console", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Console", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Console.ChannelSource", {XML: "xml", JavaScript: "javascript", Network: "network", ConsoleAPI: "console-api", Storage: "storage", Appcache: "appcache", Rendering: "rendering", CSS: "css", Security: "security", ContentBlocker: "content-blocker", Media: "media", WebRTC: "webrtc", Other: "other"});
 InspectorBackend.registerEnum("Console.ChannelLevel", {Off: "off", Basic: "basic", Verbose: "verbose"});
 InspectorBackend.registerEnum("Console.ConsoleMessageLevel", {Log: "log", Info: "info", Warning: "warning", Error: "error", Debug: "debug"});
@@ -113,10 +113,10 @@ InspectorBackend.registerEvent("Console.messageRepeatCountUpdated", null, ["coun
 InspectorBackend.registerEvent("Console.messagesCleared", null, []);
 InspectorBackend.registerEvent("Console.heapSnapshot", null, ["timestamp", "snapshotData", "title"]);
 InspectorBackend.registerConsoleDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Console");
-InspectorBackend.activateDomain("Console", null);
+InspectorBackend.activateDomain("Console", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // DOM
-InspectorBackend.registerDomain("DOM", ["page"]);
+InspectorBackend.registerDomain("DOM", ["itml", "page"]);
 InspectorBackend.registerEnum("DOM.PseudoType", {Before: "before", After: "after"});
 InspectorBackend.registerEnum("DOM.ShadowRootType", {UserAgent: "user-agent", Open: "open", Closed: "closed"});
 InspectorBackend.registerEnum("DOM.CustomElementState", {Builtin: "builtin", Custom: "custom", Waiting: "waiting", Failed: "failed"});
@@ -127,9 +127,9 @@ InspectorBackend.registerEnum("DOM.AccessibilityPropertiesInvalid", {True: "true
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesLiveRegionStatus", {Assertive: "assertive", Polite: "polite", Off: "off"});
 InspectorBackend.registerCommand("DOM.getDocument", null, [], ["root"]);
 InspectorBackend.registerCommand("DOM.requestChildNodes", null, [{"name": "nodeId", "type": "number"}, {"name": "depth", "type": "number", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.querySelector", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.querySelectorAll", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
-InspectorBackend.registerCommand("DOM.setNodeName", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelector", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelectorAll", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
+InspectorBackend.registerCommand("DOM.setNodeName", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setNodeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "value", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.removeNode", null, [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerCommand("DOM.setAttributeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}, {"name": "value", "type": "string"}], []);
@@ -138,33 +138,33 @@ InspectorBackend.registerCommand("DOM.removeAttribute", null, [{"name": "nodeId"
 InspectorBackend.registerCommand("DOM.getSupportedEventNames", null, [], ["eventNames"]);
 InspectorBackend.registerCommand("DOM.getEventListenersForNode", null, [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["listeners"]);
 InspectorBackend.registerCommand("DOM.setEventListenerDisabled", null, [{"name": "eventListenerId", "type": "number"}, {"name": "disabled", "type": "boolean"}], []);
-InspectorBackend.registerCommand("DOM.setBreakpointForEventListener", null, [{"name": "eventListenerId", "type": "number"}], []);
-InspectorBackend.registerCommand("DOM.removeBreakpointForEventListener", null, [{"name": "eventListenerId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.setBreakpointForEventListener", ["page"], [{"name": "eventListenerId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.removeBreakpointForEventListener", ["page"], [{"name": "eventListenerId", "type": "number"}], []);
 InspectorBackend.registerCommand("DOM.getAccessibilityPropertiesForNode", null, [{"name": "nodeId", "type": "number"}], ["properties"]);
 InspectorBackend.registerCommand("DOM.getOuterHTML", null, [{"name": "nodeId", "type": "number"}], ["outerHTML"]);
 InspectorBackend.registerCommand("DOM.setOuterHTML", null, [{"name": "nodeId", "type": "number"}, {"name": "outerHTML", "type": "string"}], []);
-InspectorBackend.registerCommand("DOM.insertAdjacentHTML", null, [{"name": "nodeId", "type": "number"}, {"name": "position", "type": "string"}, {"name": "html", "type": "string"}], []);
+InspectorBackend.registerCommand("DOM.insertAdjacentHTML", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "position", "type": "string"}, {"name": "html", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.performSearch", null, [{"name": "query", "type": "string"}, {"name": "nodeIds", "type": "object", "optional": true}], ["searchId", "resultCount"]);
 InspectorBackend.registerCommand("DOM.getSearchResults", null, [{"name": "searchId", "type": "string"}, {"name": "fromIndex", "type": "number"}, {"name": "toIndex", "type": "number"}], ["nodeIds"]);
 InspectorBackend.registerCommand("DOM.discardSearchResults", null, [{"name": "searchId", "type": "string"}], []);
-InspectorBackend.registerCommand("DOM.requestNode", null, [{"name": "objectId", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.requestNode", ["page"], [{"name": "objectId", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setInspectModeEnabled", null, [{"name": "enabled", "type": "boolean"}, {"name": "highlightConfig", "type": "object", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightQuad", null, [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightSelector", null, [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightQuad", ["page"], [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightSelector", ["page"], [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.highlightNode", null, [{"name": "highlightConfig", "type": "object"}, {"name": "nodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.highlightNodeList", null, [{"name": "nodeIds", "type": "object"}, {"name": "highlightConfig", "type": "object"}], []);
 InspectorBackend.registerCommand("DOM.hideHighlight", null, [], []);
-InspectorBackend.registerCommand("DOM.highlightFrame", null, [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", null, [{"name": "path", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.resolveNode", null, [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("DOM.highlightFrame", ["page"], [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", ["page"], [{"name": "path", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.resolveNode", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerCommand("DOM.getAttributes", null, [{"name": "nodeId", "type": "number"}], ["attributes"]);
 InspectorBackend.registerCommand("DOM.moveTo", null, [{"name": "nodeId", "type": "number"}, {"name": "targetNodeId", "type": "number"}, {"name": "insertBeforeNodeId", "type": "number", "optional": true}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.undo", null, [], []);
-InspectorBackend.registerCommand("DOM.redo", null, [], []);
-InspectorBackend.registerCommand("DOM.markUndoableState", null, [], []);
-InspectorBackend.registerCommand("DOM.focus", null, [{"name": "nodeId", "type": "number"}], []);
-InspectorBackend.registerCommand("DOM.setInspectedNode", null, [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.undo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.redo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.markUndoableState", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.focus", ["page"], [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.setInspectedNode", ["page"], [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerEvent("DOM.documentUpdated", null, []);
 InspectorBackend.registerEvent("DOM.inspect", null, ["nodeId"]);
 InspectorBackend.registerEvent("DOM.setChildNodes", null, ["parentId", "nodes"]);
@@ -175,17 +175,17 @@ InspectorBackend.registerEvent("DOM.characterDataModified", null, ["nodeId", "ch
 InspectorBackend.registerEvent("DOM.childNodeCountUpdated", null, ["nodeId", "childNodeCount"]);
 InspectorBackend.registerEvent("DOM.childNodeInserted", null, ["parentNodeId", "previousNodeId", "node"]);
 InspectorBackend.registerEvent("DOM.childNodeRemoved", null, ["parentNodeId", "nodeId"]);
-InspectorBackend.registerEvent("DOM.shadowRootPushed", null, ["hostId", "root"]);
-InspectorBackend.registerEvent("DOM.shadowRootPopped", null, ["hostId", "rootId"]);
-InspectorBackend.registerEvent("DOM.customElementStateChanged", null, ["nodeId", "customElementState"]);
-InspectorBackend.registerEvent("DOM.pseudoElementAdded", null, ["parentId", "pseudoElement"]);
-InspectorBackend.registerEvent("DOM.pseudoElementRemoved", null, ["parentId", "pseudoElementId"]);
+InspectorBackend.registerEvent("DOM.shadowRootPushed", ["page"], ["hostId", "root"]);
+InspectorBackend.registerEvent("DOM.shadowRootPopped", ["page"], ["hostId", "rootId"]);
+InspectorBackend.registerEvent("DOM.customElementStateChanged", ["page"], ["nodeId", "customElementState"]);
+InspectorBackend.registerEvent("DOM.pseudoElementAdded", ["page"], ["parentId", "pseudoElement"]);
+InspectorBackend.registerEvent("DOM.pseudoElementRemoved", ["page"], ["parentId", "pseudoElementId"]);
 InspectorBackend.registerEvent("DOM.didAddEventListener", null, ["nodeId"]);
 InspectorBackend.registerEvent("DOM.willRemoveEventListener", null, ["nodeId"]);
-InspectorBackend.registerEvent("DOM.didFireEvent", null, ["nodeId", "eventName", "timestamp", "data"]);
-InspectorBackend.registerEvent("DOM.videoLowPowerChanged", null, ["nodeId", "timestamp", "isLowPower"]);
+InspectorBackend.registerEvent("DOM.didFireEvent", ["page"], ["nodeId", "eventName", "timestamp", "data"]);
+InspectorBackend.registerEvent("DOM.videoLowPowerChanged", ["page"], ["nodeId", "timestamp", "isLowPower"]);
 InspectorBackend.registerDOMDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOM");
-InspectorBackend.activateDomain("DOM", ["page", "web-page"]);
+InspectorBackend.activateDomain("DOM", ["itml", "page", "web-page"]);
 
 // DOMDebugger
 InspectorBackend.registerDomain("DOMDebugger", ["page"]);
@@ -200,7 +200,7 @@ InspectorBackend.registerCommand("DOMDebugger.removeXHRBreakpoint", null, [{"nam
 InspectorBackend.activateDomain("DOMDebugger", ["page", "web-page"]);
 
 // DOMStorage
-InspectorBackend.registerDomain("DOMStorage", ["page"]);
+InspectorBackend.registerDomain("DOMStorage", ["itml", "page"]);
 InspectorBackend.registerCommand("DOMStorage.enable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.disable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.getDOMStorageItems", null, [{"name": "storageId", "type": "object"}], ["entries"]);
@@ -211,7 +211,7 @@ InspectorBackend.registerEvent("DOMStorage.domStorageItemRemoved", null, ["stora
 InspectorBackend.registerEvent("DOMStorage.domStorageItemAdded", null, ["storageId", "key", "newValue"]);
 InspectorBackend.registerEvent("DOMStorage.domStorageItemUpdated", null, ["storageId", "key", "oldValue", "newValue"]);
 InspectorBackend.registerDOMStorageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOMStorage");
-InspectorBackend.activateDomain("DOMStorage", ["page", "web-page"]);
+InspectorBackend.activateDomain("DOMStorage", ["itml", "page", "web-page"]);
 
 // Database
 InspectorBackend.registerDomain("Database", ["page"]);
@@ -224,7 +224,7 @@ InspectorBackend.registerDatabaseDispatcher = InspectorBackend.registerDispatche
 InspectorBackend.activateDomain("Database", ["page", "web-page"]);
 
 // Debugger
-InspectorBackend.registerDomain("Debugger", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Debugger", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Debugger.BreakpointActionType", {Log: "log", Evaluate: "evaluate", Sound: "sound", Probe: "probe"});
 InspectorBackend.registerEnum("Debugger.ScopeType", {Global: "global", With: "with", Closure: "closure", Catch: "catch", FunctionName: "functionName", GlobalLexicalEnvironment: "globalLexicalEnvironment", NestedLexical: "nestedLexical"});
 InspectorBackend.registerCommand("Debugger.enable", null, [], []);
@@ -258,10 +258,10 @@ InspectorBackend.registerEvent("Debugger.resumed", null, []);
 InspectorBackend.registerEvent("Debugger.didSampleProbe", null, ["sample"]);
 InspectorBackend.registerEvent("Debugger.playBreakpointActionSound", null, ["breakpointActionId"]);
 InspectorBackend.registerDebuggerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Debugger");
-InspectorBackend.activateDomain("Debugger", null);
+InspectorBackend.activateDomain("Debugger", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // Heap
-InspectorBackend.registerDomain("Heap", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Heap", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Heap.GarbageCollectionType", {Full: "full", Partial: "partial"});
 InspectorBackend.registerCommand("Heap.enable", null, [], []);
 InspectorBackend.registerCommand("Heap.disable", null, [], []);
@@ -275,7 +275,7 @@ InspectorBackend.registerEvent("Heap.garbageCollected", null, ["collection"]);
 InspectorBackend.registerEvent("Heap.trackingStart", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerEvent("Heap.trackingComplete", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerHeapDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Heap");
-InspectorBackend.activateDomain("Heap", null);
+InspectorBackend.activateDomain("Heap", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // IndexedDB
 InspectorBackend.registerDomain("IndexedDB", ["page"]);
@@ -291,7 +291,7 @@ InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDispatch
 InspectorBackend.activateDomain("IndexedDB", ["page", "web-page"]);
 
 // Inspector
-InspectorBackend.registerDomain("Inspector", ["javascript", "page"]);
+InspectorBackend.registerDomain("Inspector", ["itml", "javascript", "page"]);
 InspectorBackend.registerCommand("Inspector.enable", null, [], []);
 InspectorBackend.registerCommand("Inspector.disable", null, [], []);
 InspectorBackend.registerCommand("Inspector.initialized", null, [], []);
@@ -299,7 +299,7 @@ InspectorBackend.registerEvent("Inspector.evaluateForTestInFrontend", null, ["sc
 InspectorBackend.registerEvent("Inspector.inspect", null, ["object", "hints"]);
 InspectorBackend.registerEvent("Inspector.activateExtraDomains", null, ["domains"]);
 InspectorBackend.registerInspectorDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Inspector");
-InspectorBackend.activateDomain("Inspector", ["javascript", "page", "web-page"]);
+InspectorBackend.activateDomain("Inspector", ["itml", "javascript", "page", "web-page"]);
 
 // LayerTree
 InspectorBackend.registerDomain("LayerTree", ["page"]);
@@ -327,36 +327,36 @@ InspectorBackend.registerMemoryDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Memory", ["page", "web-page"]);
 
 // Network
-InspectorBackend.registerDomain("Network", ["page", "service-worker"]);
+InspectorBackend.registerDomain("Network", ["itml", "page", "service-worker"]);
 InspectorBackend.registerEnum("Network.ResponseSource", {Unknown: "unknown", Network: "network", MemoryCache: "memory-cache", DiskCache: "disk-cache", ServiceWorker: "service-worker"});
 InspectorBackend.registerEnum("Network.MetricsPriority", {Low: "low", Medium: "medium", High: "high"});
 InspectorBackend.registerEnum("Network.InitiatorType", {Parser: "parser", Script: "script", Other: "other"});
 InspectorBackend.registerCommand("Network.enable", null, [], []);
 InspectorBackend.registerCommand("Network.disable", null, [], []);
-InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", null, [{"name": "headers", "type": "object"}], []);
+InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", ["page"], [{"name": "headers", "type": "object"}], []);
 InspectorBackend.registerCommand("Network.getResponseBody", null, [{"name": "requestId", "type": "string"}], ["body", "base64Encoded"]);
 InspectorBackend.registerCommand("Network.setResourceCachingDisabled", null, [{"name": "disabled", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Network.loadResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
-InspectorBackend.registerCommand("Network.getSerializedCertificate", null, [{"name": "requestId", "type": "string"}], ["serializedCertificate"]);
-InspectorBackend.registerCommand("Network.resolveWebSocket", null, [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("Network.loadResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
+InspectorBackend.registerCommand("Network.getSerializedCertificate", ["page"], [{"name": "requestId", "type": "string"}], ["serializedCertificate"]);
+InspectorBackend.registerCommand("Network.resolveWebSocket", ["page"], [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerEvent("Network.requestWillBeSent", null, ["requestId", "frameId", "loaderId", "documentURL", "request", "timestamp", "walltime", "initiator", "redirectResponse", "type", "targetId"]);
 InspectorBackend.registerEvent("Network.responseReceived", null, ["requestId", "frameId", "loaderId", "timestamp", "type", "response"]);
 InspectorBackend.registerEvent("Network.dataReceived", null, ["requestId", "timestamp", "dataLength", "encodedDataLength"]);
 InspectorBackend.registerEvent("Network.loadingFinished", null, ["requestId", "timestamp", "sourceMapURL", "metrics"]);
 InspectorBackend.registerEvent("Network.loadingFailed", null, ["requestId", "timestamp", "errorText", "canceled"]);
 InspectorBackend.registerEvent("Network.requestServedFromMemoryCache", null, ["requestId", "frameId", "loaderId", "documentURL", "timestamp", "initiator", "resource"]);
-InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", null, ["requestId", "timestamp", "walltime", "request"]);
-InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketCreated", null, ["requestId", "url"]);
-InspectorBackend.registerEvent("Network.webSocketClosed", null, ["requestId", "timestamp"]);
-InspectorBackend.registerEvent("Network.webSocketFrameReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketFrameError", null, ["requestId", "timestamp", "errorMessage"]);
-InspectorBackend.registerEvent("Network.webSocketFrameSent", null, ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", ["page"], ["requestId", "timestamp", "walltime", "request"]);
+InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketCreated", ["page"], ["requestId", "url"]);
+InspectorBackend.registerEvent("Network.webSocketClosed", ["page"], ["requestId", "timestamp"]);
+InspectorBackend.registerEvent("Network.webSocketFrameReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketFrameError", ["page"], ["requestId", "timestamp", "errorMessage"]);
+InspectorBackend.registerEvent("Network.webSocketFrameSent", ["page"], ["requestId", "timestamp", "response"]);
 InspectorBackend.registerNetworkDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Network");
-InspectorBackend.activateDomain("Network", ["page", "service-worker", "web-page"]);
+InspectorBackend.activateDomain("Network", ["itml", "page", "service-worker", "web-page"]);
 
 // Page
-InspectorBackend.registerDomain("Page", ["page"]);
+InspectorBackend.registerDomain("Page", ["itml", "page"]);
 InspectorBackend.registerEnum("Page.ResourceType", {Document: "Document", Stylesheet: "Stylesheet", Image: "Image", Font: "Font", Script: "Script", XHR: "XHR", Fetch: "Fetch", Ping: "Ping", Beacon: "Beacon", WebSocket: "WebSocket", Other: "Other"});
 InspectorBackend.registerEnum("Page.CoordinateSystem", {Viewport: "Viewport", Page: "Page"});
 InspectorBackend.registerEnum("Page.CookieSameSitePolicy", {None: "None", Lax: "Lax", Strict: "Strict"});
@@ -364,33 +364,33 @@ InspectorBackend.registerEnum("Page.Appearance", {Light: "Light", Dark: "Dark"})
 InspectorBackend.registerCommand("Page.enable", null, [], []);
 InspectorBackend.registerCommand("Page.disable", null, [], []);
 InspectorBackend.registerCommand("Page.reload", null, [{"name": "ignoreCache", "type": "boolean", "optional": true}, {"name": "revalidateAllResources", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("Page.navigate", null, [{"name": "url", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.getCookies", null, [], ["cookies"]);
-InspectorBackend.registerCommand("Page.deleteCookie", null, [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.navigate", ["page"], [{"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.getCookies", ["page"], [], ["cookies"]);
+InspectorBackend.registerCommand("Page.deleteCookie", ["page"], [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
 InspectorBackend.registerCommand("Page.getResourceTree", null, [], ["frameTree"]);
 InspectorBackend.registerCommand("Page.getResourceContent", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "base64Encoded"]);
-InspectorBackend.registerCommand("Page.searchInResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.searchInResources", null, [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.setShowRulers", null, [{"name": "result", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.setShowPaintRects", null, [{"name": "result", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.setEmulatedMedia", null, [{"name": "media", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.setForcedAppearance", null, [{"name": "appearance", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.getCompositingBordersVisible", null, [], ["result"]);
-InspectorBackend.registerCommand("Page.setCompositingBordersVisible", null, [{"name": "visible", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.snapshotNode", null, [{"name": "nodeId", "type": "number"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.snapshotRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.archive", null, [], ["data"]);
-InspectorBackend.registerEvent("Page.domContentEventFired", null, ["timestamp"]);
-InspectorBackend.registerEvent("Page.loadEventFired", null, ["timestamp"]);
+InspectorBackend.registerCommand("Page.searchInResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.searchInResources", ["page"], [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.setShowRulers", ["page"], [{"name": "result", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.setShowPaintRects", ["page"], [{"name": "result", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.setEmulatedMedia", ["page"], [{"name": "media", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.setForcedAppearance", ["page"], [{"name": "appearance", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.getCompositingBordersVisible", ["page"], [], ["result"]);
+InspectorBackend.registerCommand("Page.setCompositingBordersVisible", ["page"], [{"name": "visible", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.snapshotNode", ["page"], [{"name": "nodeId", "type": "number"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.snapshotRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.archive", ["page"], [], ["data"]);
+InspectorBackend.registerEvent("Page.domContentEventFired", ["page"], ["timestamp"]);
+InspectorBackend.registerEvent("Page.loadEventFired", ["page"], ["timestamp"]);
 InspectorBackend.registerEvent("Page.frameNavigated", null, ["frame"]);
-InspectorBackend.registerEvent("Page.frameDetached", null, ["frameId"]);
+InspectorBackend.registerEvent("Page.frameDetached", ["page"], ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStartedLoading", null, ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStoppedLoading", null, ["frameId"]);
-InspectorBackend.registerEvent("Page.frameScheduledNavigation", null, ["frameId", "delay"]);
-InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", null, ["frameId"]);
-InspectorBackend.registerEvent("Page.defaultAppearanceDidChange", null, ["appearance"]);
+InspectorBackend.registerEvent("Page.frameScheduledNavigation", ["page"], ["frameId", "delay"]);
+InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", ["page"], ["frameId"]);
+InspectorBackend.registerEvent("Page.defaultAppearanceDidChange", ["page"], ["appearance"]);
 InspectorBackend.registerPageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Page");
-InspectorBackend.activateDomain("Page", ["page", "web-page"]);
+InspectorBackend.activateDomain("Page", ["itml", "page", "web-page"]);
 
 // Recording
 InspectorBackend.registerDomain("Recording", ["page"]);
@@ -399,7 +399,7 @@ InspectorBackend.registerEnum("Recording.Initiator", {Frontend: "frontend", Cons
 InspectorBackend.activateDomain("Recording", ["page", "web-page"]);
 
 // Runtime
-InspectorBackend.registerDomain("Runtime", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Runtime", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Runtime.RemoteObjectType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol"});
 InspectorBackend.registerEnum("Runtime.RemoteObjectSubtype", {Array: "array", Null: "null", Node: "node", Regexp: "regexp", Date: "date", Error: "error", Map: "map", Set: "set", Weakmap: "weakmap", Weakset: "weakset", Iterator: "iterator", Class: "class", Proxy: "proxy"});
 InspectorBackend.registerEnum("Runtime.ObjectPreviewType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol"});
@@ -428,10 +428,10 @@ InspectorBackend.registerCommand("Runtime.disableControlFlowProfiler", null, [],
 InspectorBackend.registerCommand("Runtime.getBasicBlocks", null, [{"name": "sourceID", "type": "string"}], ["basicBlocks"]);
 InspectorBackend.registerEvent("Runtime.executionContextCreated", null, ["context"]);
 InspectorBackend.registerRuntimeDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Runtime");
-InspectorBackend.activateDomain("Runtime", null);
+InspectorBackend.activateDomain("Runtime", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // ScriptProfiler
-InspectorBackend.registerDomain("ScriptProfiler", ["javascript", "page"]);
+InspectorBackend.registerDomain("ScriptProfiler", ["itml", "javascript", "page"]);
 InspectorBackend.registerEnum("ScriptProfiler.EventType", {API: "API", Microtask: "Microtask", Other: "Other"});
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", null, [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", null, [], []);
@@ -441,7 +441,7 @@ InspectorBackend.registerEvent("ScriptProfiler.trackingComplete", null, ["sample
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStarted", null, []);
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStopped", null, []);
 InspectorBackend.registerScriptProfilerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "ScriptProfiler");
-InspectorBackend.activateDomain("ScriptProfiler", ["javascript", "page", "web-page"]);
+InspectorBackend.activateDomain("ScriptProfiler", ["itml", "javascript", "page", "web-page"]);
 
 // ServiceWorker
 InspectorBackend.registerDomain("ServiceWorker", ["service-worker"]);
index cc737a1..48944dc 100644 (file)
@@ -40,12 +40,12 @@ InspectorBackend.registerApplicationCacheDispatcher = InspectorBackend.registerD
 InspectorBackend.activateDomain("ApplicationCache", ["page", "web-page"]);
 
 // Audit
-InspectorBackend.registerDomain("Audit", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Audit", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerVersion("Audit", 3);
 InspectorBackend.registerCommand("Audit.setup", null, [{"name": "contextId", "type": "number", "optional": true}], []);
 InspectorBackend.registerCommand("Audit.run", null, [{"name": "test", "type": "string"}, {"name": "contextId", "type": "number", "optional": true}], ["result", "wasThrown"]);
 InspectorBackend.registerCommand("Audit.teardown", null, [], []);
-InspectorBackend.activateDomain("Audit", null);
+InspectorBackend.activateDomain("Audit", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // CPUProfiler
 InspectorBackend.registerDomain("CPUProfiler", ["page"]);
@@ -59,7 +59,7 @@ InspectorBackend.registerCPUProfilerDispatcher = InspectorBackend.registerDispat
 InspectorBackend.activateDomain("CPUProfiler", ["page", "web-page"]);
 
 // CSS
-InspectorBackend.registerDomain("CSS", ["page"]);
+InspectorBackend.registerDomain("CSS", ["itml", "page"]);
 InspectorBackend.registerEnum("CSS.StyleSheetOrigin", {User: "user", UserAgent: "user-agent", Inspector: "inspector", Regular: "regular"});
 InspectorBackend.registerEnum("CSS.PseudoId", {FirstLine: "first-line", FirstLetter: "first-letter", Marker: "marker", Before: "before", After: "after", Selection: "selection", Scrollbar: "scrollbar", ScrollbarThumb: "scrollbar-thumb", ScrollbarButton: "scrollbar-button", ScrollbarTrack: "scrollbar-track", ScrollbarTrackPiece: "scrollbar-track-piece", ScrollbarCorner: "scrollbar-corner", Resizer: "resizer"});
 InspectorBackend.registerEnum("CSS.CSSPropertyStatus", {Active: "active", Inactive: "inactive", Disabled: "disabled", Style: "style"});
@@ -74,18 +74,18 @@ InspectorBackend.registerCommand("CSS.getStyleSheet", null, [{"name": "styleShee
 InspectorBackend.registerCommand("CSS.getStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}], ["text"]);
 InspectorBackend.registerCommand("CSS.setStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}, {"name": "text", "type": "string"}], []);
 InspectorBackend.registerCommand("CSS.setStyleText", null, [{"name": "styleId", "type": "object"}, {"name": "text", "type": "string"}], ["style"]);
-InspectorBackend.registerCommand("CSS.setRuleSelector", null, [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
-InspectorBackend.registerCommand("CSS.createStyleSheet", null, [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
-InspectorBackend.registerCommand("CSS.addRule", null, [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.setRuleSelector", ["page"], [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.createStyleSheet", ["page"], [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
+InspectorBackend.registerCommand("CSS.addRule", ["page"], [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
 InspectorBackend.registerCommand("CSS.getSupportedCSSProperties", null, [], ["cssProperties"]);
-InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", null, [], ["fontFamilyNames"]);
-InspectorBackend.registerCommand("CSS.forcePseudoState", null, [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
+InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", ["page"], [], ["fontFamilyNames"]);
+InspectorBackend.registerCommand("CSS.forcePseudoState", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
 InspectorBackend.registerEvent("CSS.mediaQueryResultChanged", null, []);
 InspectorBackend.registerEvent("CSS.styleSheetChanged", null, ["styleSheetId"]);
-InspectorBackend.registerEvent("CSS.styleSheetAdded", null, ["header"]);
-InspectorBackend.registerEvent("CSS.styleSheetRemoved", null, ["styleSheetId"]);
+InspectorBackend.registerEvent("CSS.styleSheetAdded", ["page"], ["header"]);
+InspectorBackend.registerEvent("CSS.styleSheetRemoved", ["page"], ["styleSheetId"]);
 InspectorBackend.registerCSSDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "CSS");
-InspectorBackend.activateDomain("CSS", ["page", "web-page"]);
+InspectorBackend.activateDomain("CSS", ["itml", "page", "web-page"]);
 
 // Canvas
 InspectorBackend.registerDomain("Canvas", ["page"]);
@@ -118,7 +118,7 @@ InspectorBackend.registerCanvasDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Canvas", ["page", "web-page"]);
 
 // Console
-InspectorBackend.registerDomain("Console", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Console", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Console.ChannelSource", {XML: "xml", JavaScript: "javascript", Network: "network", ConsoleAPI: "console-api", Storage: "storage", Appcache: "appcache", Rendering: "rendering", CSS: "css", Security: "security", ContentBlocker: "content-blocker", Media: "media", MediaSource: "mediasource", WebRTC: "webrtc", Other: "other"});
 InspectorBackend.registerEnum("Console.ChannelLevel", {Off: "off", Basic: "basic", Verbose: "verbose"});
 InspectorBackend.registerEnum("Console.ConsoleMessageLevel", {Log: "log", Info: "info", Warning: "warning", Error: "error", Debug: "debug"});
@@ -133,10 +133,10 @@ InspectorBackend.registerEvent("Console.messageRepeatCountUpdated", null, ["coun
 InspectorBackend.registerEvent("Console.messagesCleared", null, []);
 InspectorBackend.registerEvent("Console.heapSnapshot", null, ["timestamp", "snapshotData", "title"]);
 InspectorBackend.registerConsoleDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Console");
-InspectorBackend.activateDomain("Console", null);
+InspectorBackend.activateDomain("Console", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // DOM
-InspectorBackend.registerDomain("DOM", ["page"]);
+InspectorBackend.registerDomain("DOM", ["itml", "page"]);
 InspectorBackend.registerEnum("DOM.PseudoType", {Before: "before", After: "after"});
 InspectorBackend.registerEnum("DOM.ShadowRootType", {UserAgent: "user-agent", Open: "open", Closed: "closed"});
 InspectorBackend.registerEnum("DOM.CustomElementState", {Builtin: "builtin", Custom: "custom", Waiting: "waiting", Failed: "failed"});
@@ -147,46 +147,46 @@ InspectorBackend.registerEnum("DOM.AccessibilityPropertiesInvalid", {True: "true
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesLiveRegionStatus", {Assertive: "assertive", Polite: "polite", Off: "off"});
 InspectorBackend.registerCommand("DOM.getDocument", null, [], ["root"]);
 InspectorBackend.registerCommand("DOM.requestChildNodes", null, [{"name": "nodeId", "type": "number"}, {"name": "depth", "type": "number", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.querySelector", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.querySelectorAll", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
-InspectorBackend.registerCommand("DOM.setNodeName", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelector", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelectorAll", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
+InspectorBackend.registerCommand("DOM.setNodeName", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setNodeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "value", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.removeNode", null, [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerCommand("DOM.setAttributeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}, {"name": "value", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.setAttributesAsText", null, [{"name": "nodeId", "type": "number"}, {"name": "text", "type": "string"}, {"name": "name", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.removeAttribute", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.getSupportedEventNames", null, [], ["eventNames"]);
-InspectorBackend.registerCommand("DOM.getDataBindingsForNode", null, [{"name": "nodeId", "type": "number"}], ["dataBindings"]);
-InspectorBackend.registerCommand("DOM.getAssociatedDataForNode", null, [{"name": "nodeId", "type": "number"}], ["associatedData"]);
+InspectorBackend.registerCommand("DOM.getDataBindingsForNode", ["itml"], [{"name": "nodeId", "type": "number"}], ["dataBindings"]);
+InspectorBackend.registerCommand("DOM.getAssociatedDataForNode", ["itml"], [{"name": "nodeId", "type": "number"}], ["associatedData"]);
 InspectorBackend.registerCommand("DOM.getEventListenersForNode", null, [{"name": "nodeId", "type": "number"}], ["listeners"]);
 InspectorBackend.registerCommand("DOM.setEventListenerDisabled", null, [{"name": "eventListenerId", "type": "number"}, {"name": "disabled", "type": "boolean"}], []);
-InspectorBackend.registerCommand("DOM.setBreakpointForEventListener", null, [{"name": "eventListenerId", "type": "number"}], []);
-InspectorBackend.registerCommand("DOM.removeBreakpointForEventListener", null, [{"name": "eventListenerId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.setBreakpointForEventListener", ["page"], [{"name": "eventListenerId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.removeBreakpointForEventListener", ["page"], [{"name": "eventListenerId", "type": "number"}], []);
 InspectorBackend.registerCommand("DOM.getAccessibilityPropertiesForNode", null, [{"name": "nodeId", "type": "number"}], ["properties"]);
 InspectorBackend.registerCommand("DOM.getOuterHTML", null, [{"name": "nodeId", "type": "number"}], ["outerHTML"]);
 InspectorBackend.registerCommand("DOM.setOuterHTML", null, [{"name": "nodeId", "type": "number"}, {"name": "outerHTML", "type": "string"}], []);
-InspectorBackend.registerCommand("DOM.insertAdjacentHTML", null, [{"name": "nodeId", "type": "number"}, {"name": "position", "type": "string"}, {"name": "html", "type": "string"}], []);
+InspectorBackend.registerCommand("DOM.insertAdjacentHTML", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "position", "type": "string"}, {"name": "html", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.performSearch", null, [{"name": "query", "type": "string"}, {"name": "nodeIds", "type": "object", "optional": true}, {"name": "caseSensitive", "type": "boolean", "optional": true}], ["searchId", "resultCount"]);
 InspectorBackend.registerCommand("DOM.getSearchResults", null, [{"name": "searchId", "type": "string"}, {"name": "fromIndex", "type": "number"}, {"name": "toIndex", "type": "number"}], ["nodeIds"]);
 InspectorBackend.registerCommand("DOM.discardSearchResults", null, [{"name": "searchId", "type": "string"}], []);
-InspectorBackend.registerCommand("DOM.requestNode", null, [{"name": "objectId", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.requestNode", ["page"], [{"name": "objectId", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setInspectModeEnabled", null, [{"name": "enabled", "type": "boolean"}, {"name": "highlightConfig", "type": "object", "optional": true}, {"name": "showRulers", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightQuad", null, [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightSelector", null, [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightQuad", ["page"], [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightSelector", ["page"], [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.highlightNode", null, [{"name": "highlightConfig", "type": "object"}, {"name": "nodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.highlightNodeList", null, [{"name": "nodeIds", "type": "object"}, {"name": "highlightConfig", "type": "object"}], []);
 InspectorBackend.registerCommand("DOM.hideHighlight", null, [], []);
-InspectorBackend.registerCommand("DOM.highlightFrame", null, [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", null, [{"name": "path", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.resolveNode", null, [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("DOM.highlightFrame", ["page"], [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", ["page"], [{"name": "path", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.resolveNode", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerCommand("DOM.getAttributes", null, [{"name": "nodeId", "type": "number"}], ["attributes"]);
 InspectorBackend.registerCommand("DOM.moveTo", null, [{"name": "nodeId", "type": "number"}, {"name": "targetNodeId", "type": "number"}, {"name": "insertBeforeNodeId", "type": "number", "optional": true}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.undo", null, [], []);
-InspectorBackend.registerCommand("DOM.redo", null, [], []);
-InspectorBackend.registerCommand("DOM.markUndoableState", null, [], []);
-InspectorBackend.registerCommand("DOM.focus", null, [{"name": "nodeId", "type": "number"}], []);
-InspectorBackend.registerCommand("DOM.setInspectedNode", null, [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.undo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.redo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.markUndoableState", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.focus", ["page"], [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.setInspectedNode", ["page"], [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerEvent("DOM.documentUpdated", null, []);
 InspectorBackend.registerEvent("DOM.inspect", null, ["nodeId"]);
 InspectorBackend.registerEvent("DOM.setChildNodes", null, ["parentId", "nodes"]);
@@ -197,17 +197,17 @@ InspectorBackend.registerEvent("DOM.characterDataModified", null, ["nodeId", "ch
 InspectorBackend.registerEvent("DOM.childNodeCountUpdated", null, ["nodeId", "childNodeCount"]);
 InspectorBackend.registerEvent("DOM.childNodeInserted", null, ["parentNodeId", "previousNodeId", "node"]);
 InspectorBackend.registerEvent("DOM.childNodeRemoved", null, ["parentNodeId", "nodeId"]);
-InspectorBackend.registerEvent("DOM.shadowRootPushed", null, ["hostId", "root"]);
-InspectorBackend.registerEvent("DOM.shadowRootPopped", null, ["hostId", "rootId"]);
-InspectorBackend.registerEvent("DOM.customElementStateChanged", null, ["nodeId", "customElementState"]);
-InspectorBackend.registerEvent("DOM.pseudoElementAdded", null, ["parentId", "pseudoElement"]);
-InspectorBackend.registerEvent("DOM.pseudoElementRemoved", null, ["parentId", "pseudoElementId"]);
+InspectorBackend.registerEvent("DOM.shadowRootPushed", ["page"], ["hostId", "root"]);
+InspectorBackend.registerEvent("DOM.shadowRootPopped", ["page"], ["hostId", "rootId"]);
+InspectorBackend.registerEvent("DOM.customElementStateChanged", ["page"], ["nodeId", "customElementState"]);
+InspectorBackend.registerEvent("DOM.pseudoElementAdded", ["page"], ["parentId", "pseudoElement"]);
+InspectorBackend.registerEvent("DOM.pseudoElementRemoved", ["page"], ["parentId", "pseudoElementId"]);
 InspectorBackend.registerEvent("DOM.didAddEventListener", null, ["nodeId"]);
 InspectorBackend.registerEvent("DOM.willRemoveEventListener", null, ["nodeId"]);
-InspectorBackend.registerEvent("DOM.didFireEvent", null, ["nodeId", "eventName", "timestamp", "data"]);
-InspectorBackend.registerEvent("DOM.powerEfficientPlaybackStateChanged", null, ["nodeId", "timestamp", "isPowerEfficient"]);
+InspectorBackend.registerEvent("DOM.didFireEvent", ["page"], ["nodeId", "eventName", "timestamp", "data"]);
+InspectorBackend.registerEvent("DOM.powerEfficientPlaybackStateChanged", ["page"], ["nodeId", "timestamp", "isPowerEfficient"]);
 InspectorBackend.registerDOMDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOM");
-InspectorBackend.activateDomain("DOM", ["page", "web-page"]);
+InspectorBackend.activateDomain("DOM", ["itml", "page", "web-page"]);
 
 // DOMDebugger
 InspectorBackend.registerDomain("DOMDebugger", ["page"]);
@@ -222,7 +222,7 @@ InspectorBackend.registerCommand("DOMDebugger.removeURLBreakpoint", null, [{"nam
 InspectorBackend.activateDomain("DOMDebugger", ["page", "web-page"]);
 
 // DOMStorage
-InspectorBackend.registerDomain("DOMStorage", ["page"]);
+InspectorBackend.registerDomain("DOMStorage", ["itml", "page"]);
 InspectorBackend.registerCommand("DOMStorage.enable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.disable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.getDOMStorageItems", null, [{"name": "storageId", "type": "object"}], ["entries"]);
@@ -233,7 +233,7 @@ InspectorBackend.registerEvent("DOMStorage.domStorageItemRemoved", null, ["stora
 InspectorBackend.registerEvent("DOMStorage.domStorageItemAdded", null, ["storageId", "key", "newValue"]);
 InspectorBackend.registerEvent("DOMStorage.domStorageItemUpdated", null, ["storageId", "key", "oldValue", "newValue"]);
 InspectorBackend.registerDOMStorageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOMStorage");
-InspectorBackend.activateDomain("DOMStorage", ["page", "web-page"]);
+InspectorBackend.activateDomain("DOMStorage", ["itml", "page", "web-page"]);
 
 // Database
 InspectorBackend.registerDomain("Database", ["page"]);
@@ -246,7 +246,7 @@ InspectorBackend.registerDatabaseDispatcher = InspectorBackend.registerDispatche
 InspectorBackend.activateDomain("Database", ["page", "web-page"]);
 
 // Debugger
-InspectorBackend.registerDomain("Debugger", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Debugger", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Debugger.BreakpointActionType", {Log: "log", Evaluate: "evaluate", Sound: "sound", Probe: "probe"});
 InspectorBackend.registerEnum("Debugger.ScopeType", {Global: "global", With: "with", Closure: "closure", Catch: "catch", FunctionName: "functionName", GlobalLexicalEnvironment: "globalLexicalEnvironment", NestedLexical: "nestedLexical"});
 InspectorBackend.registerCommand("Debugger.enable", null, [], []);
@@ -280,10 +280,10 @@ InspectorBackend.registerEvent("Debugger.resumed", null, []);
 InspectorBackend.registerEvent("Debugger.didSampleProbe", null, ["sample"]);
 InspectorBackend.registerEvent("Debugger.playBreakpointActionSound", null, ["breakpointActionId"]);
 InspectorBackend.registerDebuggerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Debugger");
-InspectorBackend.activateDomain("Debugger", null);
+InspectorBackend.activateDomain("Debugger", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // Heap
-InspectorBackend.registerDomain("Heap", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Heap", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Heap.GarbageCollectionType", {Full: "full", Partial: "partial"});
 InspectorBackend.registerCommand("Heap.enable", null, [], []);
 InspectorBackend.registerCommand("Heap.disable", null, [], []);
@@ -297,7 +297,7 @@ InspectorBackend.registerEvent("Heap.garbageCollected", null, ["collection"]);
 InspectorBackend.registerEvent("Heap.trackingStart", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerEvent("Heap.trackingComplete", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerHeapDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Heap");
-InspectorBackend.activateDomain("Heap", null);
+InspectorBackend.activateDomain("Heap", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // IndexedDB
 InspectorBackend.registerDomain("IndexedDB", ["page"]);
@@ -313,7 +313,7 @@ InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDispatch
 InspectorBackend.activateDomain("IndexedDB", ["page", "web-page"]);
 
 // Inspector
-InspectorBackend.registerDomain("Inspector", ["javascript", "page"]);
+InspectorBackend.registerDomain("Inspector", ["itml", "javascript", "page"]);
 InspectorBackend.registerCommand("Inspector.enable", null, [], []);
 InspectorBackend.registerCommand("Inspector.disable", null, [], []);
 InspectorBackend.registerCommand("Inspector.initialized", null, [], []);
@@ -321,7 +321,7 @@ InspectorBackend.registerEvent("Inspector.evaluateForTestInFrontend", null, ["sc
 InspectorBackend.registerEvent("Inspector.inspect", null, ["object", "hints"]);
 InspectorBackend.registerEvent("Inspector.activateExtraDomains", null, ["domains"]);
 InspectorBackend.registerInspectorDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Inspector");
-InspectorBackend.activateDomain("Inspector", ["javascript", "page", "web-page"]);
+InspectorBackend.activateDomain("Inspector", ["itml", "javascript", "page", "web-page"]);
 
 // LayerTree
 InspectorBackend.registerDomain("LayerTree", ["page"]);
@@ -349,36 +349,36 @@ InspectorBackend.registerMemoryDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Memory", ["page", "web-page"]);
 
 // Network
-InspectorBackend.registerDomain("Network", ["page", "service-worker"]);
+InspectorBackend.registerDomain("Network", ["itml", "page", "service-worker"]);
 InspectorBackend.registerEnum("Network.ResponseSource", {Unknown: "unknown", Network: "network", MemoryCache: "memory-cache", DiskCache: "disk-cache", ServiceWorker: "service-worker"});
 InspectorBackend.registerEnum("Network.MetricsPriority", {Low: "low", Medium: "medium", High: "high"});
 InspectorBackend.registerEnum("Network.InitiatorType", {Parser: "parser", Script: "script", Other: "other"});
 InspectorBackend.registerCommand("Network.enable", null, [], []);
 InspectorBackend.registerCommand("Network.disable", null, [], []);
-InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", null, [{"name": "headers", "type": "object"}], []);
+InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", ["page"], [{"name": "headers", "type": "object"}], []);
 InspectorBackend.registerCommand("Network.getResponseBody", null, [{"name": "requestId", "type": "string"}], ["body", "base64Encoded"]);
 InspectorBackend.registerCommand("Network.setResourceCachingDisabled", null, [{"name": "disabled", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Network.loadResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
-InspectorBackend.registerCommand("Network.getSerializedCertificate", null, [{"name": "requestId", "type": "string"}], ["serializedCertificate"]);
-InspectorBackend.registerCommand("Network.resolveWebSocket", null, [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("Network.loadResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
+InspectorBackend.registerCommand("Network.getSerializedCertificate", ["page"], [{"name": "requestId", "type": "string"}], ["serializedCertificate"]);
+InspectorBackend.registerCommand("Network.resolveWebSocket", ["page"], [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerEvent("Network.requestWillBeSent", null, ["requestId", "frameId", "loaderId", "documentURL", "request", "timestamp", "walltime", "initiator", "redirectResponse", "type", "targetId"]);
 InspectorBackend.registerEvent("Network.responseReceived", null, ["requestId", "frameId", "loaderId", "timestamp", "type", "response"]);
 InspectorBackend.registerEvent("Network.dataReceived", null, ["requestId", "timestamp", "dataLength", "encodedDataLength"]);
 InspectorBackend.registerEvent("Network.loadingFinished", null, ["requestId", "timestamp", "sourceMapURL", "metrics"]);
 InspectorBackend.registerEvent("Network.loadingFailed", null, ["requestId", "timestamp", "errorText", "canceled"]);
 InspectorBackend.registerEvent("Network.requestServedFromMemoryCache", null, ["requestId", "frameId", "loaderId", "documentURL", "timestamp", "initiator", "resource"]);
-InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", null, ["requestId", "timestamp", "walltime", "request"]);
-InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketCreated", null, ["requestId", "url"]);
-InspectorBackend.registerEvent("Network.webSocketClosed", null, ["requestId", "timestamp"]);
-InspectorBackend.registerEvent("Network.webSocketFrameReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketFrameError", null, ["requestId", "timestamp", "errorMessage"]);
-InspectorBackend.registerEvent("Network.webSocketFrameSent", null, ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", ["page"], ["requestId", "timestamp", "walltime", "request"]);
+InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketCreated", ["page"], ["requestId", "url"]);
+InspectorBackend.registerEvent("Network.webSocketClosed", ["page"], ["requestId", "timestamp"]);
+InspectorBackend.registerEvent("Network.webSocketFrameReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketFrameError", ["page"], ["requestId", "timestamp", "errorMessage"]);
+InspectorBackend.registerEvent("Network.webSocketFrameSent", ["page"], ["requestId", "timestamp", "response"]);
 InspectorBackend.registerNetworkDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Network");
-InspectorBackend.activateDomain("Network", ["page", "service-worker", "web-page"]);
+InspectorBackend.activateDomain("Network", ["itml", "page", "service-worker", "web-page"]);
 
 // Page
-InspectorBackend.registerDomain("Page", ["page"]);
+InspectorBackend.registerDomain("Page", ["itml", "page"]);
 InspectorBackend.registerEnum("Page.Setting", {AuthorAndUserStylesEnabled: "AuthorAndUserStylesEnabled", ICECandidateFilteringEnabled: "ICECandidateFilteringEnabled", ImagesEnabled: "ImagesEnabled", MediaCaptureRequiresSecureConnection: "MediaCaptureRequiresSecureConnection", MockCaptureDevicesEnabled: "MockCaptureDevicesEnabled", NeedsSiteSpecificQuirks: "NeedsSiteSpecificQuirks", ScriptEnabled: "ScriptEnabled", WebSecurityEnabled: "WebSecurityEnabled"});
 InspectorBackend.registerEnum("Page.ResourceType", {Document: "Document", Stylesheet: "Stylesheet", Image: "Image", Font: "Font", Script: "Script", XHR: "XHR", Fetch: "Fetch", Ping: "Ping", Beacon: "Beacon", WebSocket: "WebSocket", Other: "Other"});
 InspectorBackend.registerEnum("Page.CoordinateSystem", {Viewport: "Viewport", Page: "Page"});
@@ -387,35 +387,35 @@ InspectorBackend.registerEnum("Page.Appearance", {Light: "Light", Dark: "Dark"})
 InspectorBackend.registerCommand("Page.enable", null, [], []);
 InspectorBackend.registerCommand("Page.disable", null, [], []);
 InspectorBackend.registerCommand("Page.reload", null, [{"name": "ignoreCache", "type": "boolean", "optional": true}, {"name": "revalidateAllResources", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("Page.navigate", null, [{"name": "url", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.overrideUserAgent", null, [{"name": "value", "type": "string", "optional": true}], []);
-InspectorBackend.registerCommand("Page.overrideSetting", null, [{"name": "setting", "type": "string"}, {"name": "value", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("Page.getCookies", null, [], ["cookies"]);
-InspectorBackend.registerCommand("Page.deleteCookie", null, [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.navigate", ["page"], [{"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.overrideUserAgent", ["page"], [{"name": "value", "type": "string", "optional": true}], []);
+InspectorBackend.registerCommand("Page.overrideSetting", ["page"], [{"name": "setting", "type": "string"}, {"name": "value", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("Page.getCookies", ["page"], [], ["cookies"]);
+InspectorBackend.registerCommand("Page.deleteCookie", ["page"], [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
 InspectorBackend.registerCommand("Page.getResourceTree", null, [], ["frameTree"]);
 InspectorBackend.registerCommand("Page.getResourceContent", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "base64Encoded"]);
-InspectorBackend.registerCommand("Page.searchInResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.searchInResources", null, [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.setShowRulers", null, [{"name": "result", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.setShowPaintRects", null, [{"name": "result", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.setEmulatedMedia", null, [{"name": "media", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.setForcedAppearance", null, [{"name": "appearance", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.getCompositingBordersVisible", null, [], ["result"]);
-InspectorBackend.registerCommand("Page.setCompositingBordersVisible", null, [{"name": "visible", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.snapshotNode", null, [{"name": "nodeId", "type": "number"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.snapshotRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.archive", null, [], ["data"]);
-InspectorBackend.registerEvent("Page.domContentEventFired", null, ["timestamp"]);
-InspectorBackend.registerEvent("Page.loadEventFired", null, ["timestamp"]);
+InspectorBackend.registerCommand("Page.searchInResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.searchInResources", ["page"], [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.setShowRulers", ["page"], [{"name": "result", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.setShowPaintRects", ["page"], [{"name": "result", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.setEmulatedMedia", ["page"], [{"name": "media", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.setForcedAppearance", ["page"], [{"name": "appearance", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.getCompositingBordersVisible", ["page"], [], ["result"]);
+InspectorBackend.registerCommand("Page.setCompositingBordersVisible", ["page"], [{"name": "visible", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.snapshotNode", ["page"], [{"name": "nodeId", "type": "number"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.snapshotRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.archive", ["page"], [], ["data"]);
+InspectorBackend.registerEvent("Page.domContentEventFired", ["page"], ["timestamp"]);
+InspectorBackend.registerEvent("Page.loadEventFired", ["page"], ["timestamp"]);
 InspectorBackend.registerEvent("Page.frameNavigated", null, ["frame"]);
-InspectorBackend.registerEvent("Page.frameDetached", null, ["frameId"]);
+InspectorBackend.registerEvent("Page.frameDetached", ["page"], ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStartedLoading", null, ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStoppedLoading", null, ["frameId"]);
-InspectorBackend.registerEvent("Page.frameScheduledNavigation", null, ["frameId", "delay"]);
-InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", null, ["frameId"]);
-InspectorBackend.registerEvent("Page.defaultAppearanceDidChange", null, ["appearance"]);
+InspectorBackend.registerEvent("Page.frameScheduledNavigation", ["page"], ["frameId", "delay"]);
+InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", ["page"], ["frameId"]);
+InspectorBackend.registerEvent("Page.defaultAppearanceDidChange", ["page"], ["appearance"]);
 InspectorBackend.registerPageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Page");
-InspectorBackend.activateDomain("Page", ["page", "web-page"]);
+InspectorBackend.activateDomain("Page", ["itml", "page", "web-page"]);
 
 // Recording
 InspectorBackend.registerDomain("Recording", ["page"]);
@@ -425,7 +425,7 @@ InspectorBackend.registerEnum("Recording.Initiator", {Frontend: "frontend", Cons
 InspectorBackend.activateDomain("Recording", ["page", "web-page"]);
 
 // Runtime
-InspectorBackend.registerDomain("Runtime", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Runtime", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Runtime.RemoteObjectType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol"});
 InspectorBackend.registerEnum("Runtime.RemoteObjectSubtype", {Array: "array", Null: "null", Node: "node", Regexp: "regexp", Date: "date", Error: "error", Map: "map", Set: "set", Weakmap: "weakmap", Weakset: "weakset", Iterator: "iterator", Class: "class", Proxy: "proxy"});
 InspectorBackend.registerEnum("Runtime.ObjectPreviewType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol"});
@@ -454,10 +454,10 @@ InspectorBackend.registerCommand("Runtime.disableControlFlowProfiler", null, [],
 InspectorBackend.registerCommand("Runtime.getBasicBlocks", null, [{"name": "sourceID", "type": "string"}], ["basicBlocks"]);
 InspectorBackend.registerEvent("Runtime.executionContextCreated", null, ["context"]);
 InspectorBackend.registerRuntimeDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Runtime");
-InspectorBackend.activateDomain("Runtime", null);
+InspectorBackend.activateDomain("Runtime", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // ScriptProfiler
-InspectorBackend.registerDomain("ScriptProfiler", ["javascript", "page"]);
+InspectorBackend.registerDomain("ScriptProfiler", ["itml", "javascript", "page"]);
 InspectorBackend.registerEnum("ScriptProfiler.EventType", {API: "API", Microtask: "Microtask", Other: "Other"});
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", null, [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", null, [], []);
@@ -465,7 +465,7 @@ InspectorBackend.registerEvent("ScriptProfiler.trackingStart", null, ["timestamp
 InspectorBackend.registerEvent("ScriptProfiler.trackingUpdate", null, ["event"]);
 InspectorBackend.registerEvent("ScriptProfiler.trackingComplete", null, ["timestamp", "samples"]);
 InspectorBackend.registerScriptProfilerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "ScriptProfiler");
-InspectorBackend.activateDomain("ScriptProfiler", ["javascript", "page", "web-page"]);
+InspectorBackend.activateDomain("ScriptProfiler", ["itml", "javascript", "page", "web-page"]);
 
 // ServiceWorker
 InspectorBackend.registerDomain("ServiceWorker", ["service-worker"]);
index 7f90772..b9df615 100644 (file)
@@ -25,7 +25,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// DO NOT EDIT THIS FILE. It is automatically generated from Inspector-iOS-13.2.json
+// DO NOT EDIT THIS FILE. It is automatically generated from Inspector-iOS-13.4.json
 // by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
 
 // Animation
@@ -52,12 +52,12 @@ InspectorBackend.registerApplicationCacheDispatcher = InspectorBackend.registerD
 InspectorBackend.activateDomain("ApplicationCache", ["page", "web-page"]);
 
 // Audit
-InspectorBackend.registerDomain("Audit", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Audit", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerVersion("Audit", 3);
 InspectorBackend.registerCommand("Audit.setup", null, [{"name": "contextId", "type": "number", "optional": true}], []);
 InspectorBackend.registerCommand("Audit.run", null, [{"name": "test", "type": "string"}, {"name": "contextId", "type": "number", "optional": true}], ["result", "wasThrown"]);
 InspectorBackend.registerCommand("Audit.teardown", null, [], []);
-InspectorBackend.activateDomain("Audit", null);
+InspectorBackend.activateDomain("Audit", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // CPUProfiler
 InspectorBackend.registerDomain("CPUProfiler", ["page"]);
@@ -71,7 +71,7 @@ InspectorBackend.registerCPUProfilerDispatcher = InspectorBackend.registerDispat
 InspectorBackend.activateDomain("CPUProfiler", ["page", "web-page"]);
 
 // CSS
-InspectorBackend.registerDomain("CSS", ["page"]);
+InspectorBackend.registerDomain("CSS", ["itml", "page"]);
 InspectorBackend.registerEnum("CSS.StyleSheetOrigin", {User: "user", UserAgent: "user-agent", Inspector: "inspector", Regular: "regular"});
 InspectorBackend.registerEnum("CSS.PseudoId", {FirstLine: "first-line", FirstLetter: "first-letter", Highlight: "highlight", Marker: "marker", Before: "before", After: "after", Selection: "selection", Scrollbar: "scrollbar", ScrollbarThumb: "scrollbar-thumb", ScrollbarButton: "scrollbar-button", ScrollbarTrack: "scrollbar-track", ScrollbarTrackPiece: "scrollbar-track-piece", ScrollbarCorner: "scrollbar-corner", Resizer: "resizer"});
 InspectorBackend.registerEnum("CSS.CSSPropertyStatus", {Active: "active", Inactive: "inactive", Disabled: "disabled", Style: "style"});
@@ -86,18 +86,18 @@ InspectorBackend.registerCommand("CSS.getStyleSheet", null, [{"name": "styleShee
 InspectorBackend.registerCommand("CSS.getStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}], ["text"]);
 InspectorBackend.registerCommand("CSS.setStyleSheetText", null, [{"name": "styleSheetId", "type": "string"}, {"name": "text", "type": "string"}], []);
 InspectorBackend.registerCommand("CSS.setStyleText", null, [{"name": "styleId", "type": "object"}, {"name": "text", "type": "string"}], ["style"]);
-InspectorBackend.registerCommand("CSS.setRuleSelector", null, [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
-InspectorBackend.registerCommand("CSS.createStyleSheet", null, [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
-InspectorBackend.registerCommand("CSS.addRule", null, [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.setRuleSelector", ["page"], [{"name": "ruleId", "type": "object"}, {"name": "selector", "type": "string"}], ["rule"]);
+InspectorBackend.registerCommand("CSS.createStyleSheet", ["page"], [{"name": "frameId", "type": "string"}], ["styleSheetId"]);
+InspectorBackend.registerCommand("CSS.addRule", ["page"], [{"name": "styleSheetId", "type": "string"}, {"name": "selector", "type": "string"}], ["rule"]);
 InspectorBackend.registerCommand("CSS.getSupportedCSSProperties", null, [], ["cssProperties"]);
-InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", null, [], ["fontFamilyNames"]);
-InspectorBackend.registerCommand("CSS.forcePseudoState", null, [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
+InspectorBackend.registerCommand("CSS.getSupportedSystemFontFamilyNames", ["page"], [], ["fontFamilyNames"]);
+InspectorBackend.registerCommand("CSS.forcePseudoState", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "forcedPseudoClasses", "type": "object"}], []);
 InspectorBackend.registerEvent("CSS.mediaQueryResultChanged", null, []);
 InspectorBackend.registerEvent("CSS.styleSheetChanged", null, ["styleSheetId"]);
-InspectorBackend.registerEvent("CSS.styleSheetAdded", null, ["header"]);
-InspectorBackend.registerEvent("CSS.styleSheetRemoved", null, ["styleSheetId"]);
+InspectorBackend.registerEvent("CSS.styleSheetAdded", ["page"], ["header"]);
+InspectorBackend.registerEvent("CSS.styleSheetRemoved", ["page"], ["styleSheetId"]);
 InspectorBackend.registerCSSDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "CSS");
-InspectorBackend.activateDomain("CSS", ["page", "web-page"]);
+InspectorBackend.activateDomain("CSS", ["itml", "page", "web-page"]);
 
 // Canvas
 InspectorBackend.registerDomain("Canvas", ["page"]);
@@ -131,7 +131,7 @@ InspectorBackend.registerCanvasDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Canvas", ["page", "web-page"]);
 
 // Console
-InspectorBackend.registerDomain("Console", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Console", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Console.ChannelSource", {XML: "xml", JavaScript: "javascript", Network: "network", ConsoleAPI: "console-api", Storage: "storage", Appcache: "appcache", Rendering: "rendering", CSS: "css", Security: "security", ContentBlocker: "content-blocker", Media: "media", MediaSource: "mediasource", WebRTC: "webrtc", Other: "other"});
 InspectorBackend.registerEnum("Console.ChannelLevel", {Off: "off", Basic: "basic", Verbose: "verbose"});
 InspectorBackend.registerEnum("Console.ConsoleMessageLevel", {Log: "log", Info: "info", Warning: "warning", Error: "error", Debug: "debug"});
@@ -146,10 +146,10 @@ InspectorBackend.registerEvent("Console.messageRepeatCountUpdated", null, ["coun
 InspectorBackend.registerEvent("Console.messagesCleared", null, []);
 InspectorBackend.registerEvent("Console.heapSnapshot", null, ["timestamp", "snapshotData", "title"]);
 InspectorBackend.registerConsoleDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Console");
-InspectorBackend.activateDomain("Console", null);
+InspectorBackend.activateDomain("Console", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // DOM
-InspectorBackend.registerDomain("DOM", ["page"]);
+InspectorBackend.registerDomain("DOM", ["itml", "page"]);
 InspectorBackend.registerEnum("DOM.PseudoType", {Before: "before", After: "after"});
 InspectorBackend.registerEnum("DOM.ShadowRootType", {UserAgent: "user-agent", Open: "open", Closed: "closed"});
 InspectorBackend.registerEnum("DOM.CustomElementState", {Builtin: "builtin", Custom: "custom", Waiting: "waiting", Failed: "failed"});
@@ -160,47 +160,47 @@ InspectorBackend.registerEnum("DOM.AccessibilityPropertiesInvalid", {True: "true
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesLiveRegionStatus", {Assertive: "assertive", Polite: "polite", Off: "off"});
 InspectorBackend.registerCommand("DOM.getDocument", null, [], ["root"]);
 InspectorBackend.registerCommand("DOM.requestChildNodes", null, [{"name": "nodeId", "type": "number"}, {"name": "depth", "type": "number", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.querySelector", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.querySelectorAll", null, [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
-InspectorBackend.registerCommand("DOM.setNodeName", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelector", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.querySelectorAll", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
+InspectorBackend.registerCommand("DOM.setNodeName", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setNodeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "value", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.removeNode", null, [{"name": "nodeId", "type": "number"}], []);
 InspectorBackend.registerCommand("DOM.setAttributeValue", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}, {"name": "value", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.setAttributesAsText", null, [{"name": "nodeId", "type": "number"}, {"name": "text", "type": "string"}, {"name": "name", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.removeAttribute", null, [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.getSupportedEventNames", null, [], ["eventNames"]);
-InspectorBackend.registerCommand("DOM.getDataBindingsForNode", null, [{"name": "nodeId", "type": "number"}], ["dataBindings"]);
-InspectorBackend.registerCommand("DOM.getAssociatedDataForNode", null, [{"name": "nodeId", "type": "number"}], ["associatedData"]);
+InspectorBackend.registerCommand("DOM.getDataBindingsForNode", ["itml"], [{"name": "nodeId", "type": "number"}], ["dataBindings"]);
+InspectorBackend.registerCommand("DOM.getAssociatedDataForNode", ["itml"], [{"name": "nodeId", "type": "number"}], ["associatedData"]);
 InspectorBackend.registerCommand("DOM.getEventListenersForNode", null, [{"name": "nodeId", "type": "number"}], ["listeners"]);
 InspectorBackend.registerCommand("DOM.setEventListenerDisabled", null, [{"name": "eventListenerId", "type": "number"}, {"name": "disabled", "type": "boolean"}], []);
-InspectorBackend.registerCommand("DOM.setBreakpointForEventListener", null, [{"name": "eventListenerId", "type": "number"}], []);
-InspectorBackend.registerCommand("DOM.removeBreakpointForEventListener", null, [{"name": "eventListenerId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.setBreakpointForEventListener", ["page"], [{"name": "eventListenerId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.removeBreakpointForEventListener", ["page"], [{"name": "eventListenerId", "type": "number"}], []);
 InspectorBackend.registerCommand("DOM.getAccessibilityPropertiesForNode", null, [{"name": "nodeId", "type": "number"}], ["properties"]);
 InspectorBackend.registerCommand("DOM.getOuterHTML", null, [{"name": "nodeId", "type": "number"}], ["outerHTML"]);
 InspectorBackend.registerCommand("DOM.setOuterHTML", null, [{"name": "nodeId", "type": "number"}, {"name": "outerHTML", "type": "string"}], []);
-InspectorBackend.registerCommand("DOM.insertAdjacentHTML", null, [{"name": "nodeId", "type": "number"}, {"name": "position", "type": "string"}, {"name": "html", "type": "string"}], []);
+InspectorBackend.registerCommand("DOM.insertAdjacentHTML", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "position", "type": "string"}, {"name": "html", "type": "string"}], []);
 InspectorBackend.registerCommand("DOM.performSearch", null, [{"name": "query", "type": "string"}, {"name": "nodeIds", "type": "object", "optional": true}, {"name": "caseSensitive", "type": "boolean", "optional": true}], ["searchId", "resultCount"]);
 InspectorBackend.registerCommand("DOM.getSearchResults", null, [{"name": "searchId", "type": "string"}, {"name": "fromIndex", "type": "number"}, {"name": "toIndex", "type": "number"}], ["nodeIds"]);
 InspectorBackend.registerCommand("DOM.discardSearchResults", null, [{"name": "searchId", "type": "string"}], []);
-InspectorBackend.registerCommand("DOM.requestNode", null, [{"name": "objectId", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.requestNode", ["page"], [{"name": "objectId", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.setInspectModeEnabled", null, [{"name": "enabled", "type": "boolean"}, {"name": "highlightConfig", "type": "object", "optional": true}, {"name": "showRulers", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightQuad", null, [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.highlightSelector", null, [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightQuad", ["page"], [{"name": "quad", "type": "object"}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}, {"name": "usePageCoordinates", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.highlightSelector", ["page"], [{"name": "highlightConfig", "type": "object"}, {"name": "selectorString", "type": "string"}, {"name": "frameId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.highlightNode", null, [{"name": "highlightConfig", "type": "object"}, {"name": "nodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}], []);
 InspectorBackend.registerCommand("DOM.highlightNodeList", null, [{"name": "nodeIds", "type": "object"}, {"name": "highlightConfig", "type": "object"}], []);
 InspectorBackend.registerCommand("DOM.hideHighlight", null, [], []);
-InspectorBackend.registerCommand("DOM.highlightFrame", null, [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
-InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", null, [{"name": "path", "type": "string"}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.resolveNode", null, [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("DOM.highlightFrame", ["page"], [{"name": "frameId", "type": "string"}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", ["page"], [{"name": "path", "type": "string"}], ["nodeId"]);
+InspectorBackend.registerCommand("DOM.resolveNode", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerCommand("DOM.getAttributes", null, [{"name": "nodeId", "type": "number"}], ["attributes"]);
 InspectorBackend.registerCommand("DOM.moveTo", null, [{"name": "nodeId", "type": "number"}, {"name": "targetNodeId", "type": "number"}, {"name": "insertBeforeNodeId", "type": "number", "optional": true}], ["nodeId"]);
-InspectorBackend.registerCommand("DOM.undo", null, [], []);
-InspectorBackend.registerCommand("DOM.redo", null, [], []);
-InspectorBackend.registerCommand("DOM.markUndoableState", null, [], []);
-InspectorBackend.registerCommand("DOM.focus", null, [{"name": "nodeId", "type": "number"}], []);
-InspectorBackend.registerCommand("DOM.setInspectedNode", null, [{"name": "nodeId", "type": "number"}], []);
-InspectorBackend.registerCommand("DOM.setAllowEditingUserAgentShadowTrees", null, [{"name": "allow", "type": "boolean"}], []);
+InspectorBackend.registerCommand("DOM.undo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.redo", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.markUndoableState", ["page"], [], []);
+InspectorBackend.registerCommand("DOM.focus", ["page"], [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.setInspectedNode", ["page"], [{"name": "nodeId", "type": "number"}], []);
+InspectorBackend.registerCommand("DOM.setAllowEditingUserAgentShadowTrees", ["page"], [{"name": "allow", "type": "boolean"}], []);
 InspectorBackend.registerEvent("DOM.documentUpdated", null, []);
 InspectorBackend.registerEvent("DOM.inspect", null, ["nodeId"]);
 InspectorBackend.registerEvent("DOM.setChildNodes", null, ["parentId", "nodes"]);
@@ -211,17 +211,17 @@ InspectorBackend.registerEvent("DOM.characterDataModified", null, ["nodeId", "ch
 InspectorBackend.registerEvent("DOM.childNodeCountUpdated", null, ["nodeId", "childNodeCount"]);
 InspectorBackend.registerEvent("DOM.childNodeInserted", null, ["parentNodeId", "previousNodeId", "node"]);
 InspectorBackend.registerEvent("DOM.childNodeRemoved", null, ["parentNodeId", "nodeId"]);
-InspectorBackend.registerEvent("DOM.shadowRootPushed", null, ["hostId", "root"]);
-InspectorBackend.registerEvent("DOM.shadowRootPopped", null, ["hostId", "rootId"]);
-InspectorBackend.registerEvent("DOM.customElementStateChanged", null, ["nodeId", "customElementState"]);
-InspectorBackend.registerEvent("DOM.pseudoElementAdded", null, ["parentId", "pseudoElement"]);
-InspectorBackend.registerEvent("DOM.pseudoElementRemoved", null, ["parentId", "pseudoElementId"]);
+InspectorBackend.registerEvent("DOM.shadowRootPushed", ["page"], ["hostId", "root"]);
+InspectorBackend.registerEvent("DOM.shadowRootPopped", ["page"], ["hostId", "rootId"]);
+InspectorBackend.registerEvent("DOM.customElementStateChanged", ["page"], ["nodeId", "customElementState"]);
+InspectorBackend.registerEvent("DOM.pseudoElementAdded", ["page"], ["parentId", "pseudoElement"]);
+InspectorBackend.registerEvent("DOM.pseudoElementRemoved", ["page"], ["parentId", "pseudoElementId"]);
 InspectorBackend.registerEvent("DOM.didAddEventListener", null, ["nodeId"]);
 InspectorBackend.registerEvent("DOM.willRemoveEventListener", null, ["nodeId"]);
-InspectorBackend.registerEvent("DOM.didFireEvent", null, ["nodeId", "eventName", "timestamp", "data"]);
-InspectorBackend.registerEvent("DOM.powerEfficientPlaybackStateChanged", null, ["nodeId", "timestamp", "isPowerEfficient"]);
+InspectorBackend.registerEvent("DOM.didFireEvent", ["page"], ["nodeId", "eventName", "timestamp", "data"]);
+InspectorBackend.registerEvent("DOM.powerEfficientPlaybackStateChanged", ["page"], ["nodeId", "timestamp", "isPowerEfficient"]);
 InspectorBackend.registerDOMDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOM");
-InspectorBackend.activateDomain("DOM", ["page", "web-page"]);
+InspectorBackend.activateDomain("DOM", ["itml", "page", "web-page"]);
 
 // DOMDebugger
 InspectorBackend.registerDomain("DOMDebugger", ["page", "worker"]);
@@ -236,7 +236,7 @@ InspectorBackend.registerCommand("DOMDebugger.removeURLBreakpoint", null, [{"nam
 InspectorBackend.activateDomain("DOMDebugger", ["page", "web-page"]);
 
 // DOMStorage
-InspectorBackend.registerDomain("DOMStorage", ["page"]);
+InspectorBackend.registerDomain("DOMStorage", ["itml", "page"]);
 InspectorBackend.registerCommand("DOMStorage.enable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.disable", null, [], []);
 InspectorBackend.registerCommand("DOMStorage.getDOMStorageItems", null, [{"name": "storageId", "type": "object"}], ["entries"]);
@@ -247,7 +247,7 @@ InspectorBackend.registerEvent("DOMStorage.domStorageItemRemoved", null, ["stora
 InspectorBackend.registerEvent("DOMStorage.domStorageItemAdded", null, ["storageId", "key", "newValue"]);
 InspectorBackend.registerEvent("DOMStorage.domStorageItemUpdated", null, ["storageId", "key", "oldValue", "newValue"]);
 InspectorBackend.registerDOMStorageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "DOMStorage");
-InspectorBackend.activateDomain("DOMStorage", ["page", "web-page"]);
+InspectorBackend.activateDomain("DOMStorage", ["itml", "page", "web-page"]);
 
 // Database
 InspectorBackend.registerDomain("Database", ["page"]);
@@ -260,7 +260,7 @@ InspectorBackend.registerDatabaseDispatcher = InspectorBackend.registerDispatche
 InspectorBackend.activateDomain("Database", ["page", "web-page"]);
 
 // Debugger
-InspectorBackend.registerDomain("Debugger", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Debugger", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Debugger.BreakpointActionType", {Log: "log", Evaluate: "evaluate", Sound: "sound", Probe: "probe"});
 InspectorBackend.registerEnum("Debugger.ScopeType", {Global: "global", With: "with", Closure: "closure", Catch: "catch", FunctionName: "functionName", GlobalLexicalEnvironment: "globalLexicalEnvironment", NestedLexical: "nestedLexical"});
 InspectorBackend.registerCommand("Debugger.enable", null, [], []);
@@ -296,10 +296,10 @@ InspectorBackend.registerEvent("Debugger.resumed", null, []);
 InspectorBackend.registerEvent("Debugger.didSampleProbe", null, ["sample"]);
 InspectorBackend.registerEvent("Debugger.playBreakpointActionSound", null, ["breakpointActionId"]);
 InspectorBackend.registerDebuggerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Debugger");
-InspectorBackend.activateDomain("Debugger", null);
+InspectorBackend.activateDomain("Debugger", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // Heap
-InspectorBackend.registerDomain("Heap", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Heap", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Heap.GarbageCollectionType", {Full: "full", Partial: "partial"});
 InspectorBackend.registerCommand("Heap.enable", null, [], []);
 InspectorBackend.registerCommand("Heap.disable", null, [], []);
@@ -313,7 +313,7 @@ InspectorBackend.registerEvent("Heap.garbageCollected", null, ["collection"]);
 InspectorBackend.registerEvent("Heap.trackingStart", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerEvent("Heap.trackingComplete", null, ["timestamp", "snapshotData"]);
 InspectorBackend.registerHeapDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Heap");
-InspectorBackend.activateDomain("Heap", null);
+InspectorBackend.activateDomain("Heap", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // IndexedDB
 InspectorBackend.registerDomain("IndexedDB", ["page"]);
@@ -329,7 +329,7 @@ InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDispatch
 InspectorBackend.activateDomain("IndexedDB", ["page", "web-page"]);
 
 // Inspector
-InspectorBackend.registerDomain("Inspector", ["javascript", "page"]);
+InspectorBackend.registerDomain("Inspector", ["itml", "javascript", "page"]);
 InspectorBackend.registerCommand("Inspector.enable", null, [], []);
 InspectorBackend.registerCommand("Inspector.disable", null, [], []);
 InspectorBackend.registerCommand("Inspector.initialized", null, [], []);
@@ -337,7 +337,7 @@ InspectorBackend.registerEvent("Inspector.evaluateForTestInFrontend", null, ["sc
 InspectorBackend.registerEvent("Inspector.inspect", null, ["object", "hints"]);
 InspectorBackend.registerEvent("Inspector.activateExtraDomains", null, ["domains"]);
 InspectorBackend.registerInspectorDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Inspector");
-InspectorBackend.activateDomain("Inspector", ["javascript", "page", "web-page"]);
+InspectorBackend.activateDomain("Inspector", ["itml", "javascript", "page", "web-page"]);
 
 // LayerTree
 InspectorBackend.registerDomain("LayerTree", ["page"]);
@@ -365,43 +365,43 @@ InspectorBackend.registerMemoryDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Memory", ["page", "web-page"]);
 
 // Network
-InspectorBackend.registerDomain("Network", ["page", "service-worker"]);
+InspectorBackend.registerDomain("Network", ["itml", "page", "service-worker"]);
 InspectorBackend.registerEnum("Network.ResponseSource", {Unknown: "unknown", Network: "network", MemoryCache: "memory-cache", DiskCache: "disk-cache", ServiceWorker: "service-worker", InspectorOverride: "inspector-override"});
 InspectorBackend.registerEnum("Network.MetricsPriority", {Low: "low", Medium: "medium", High: "high"});
 InspectorBackend.registerEnum("Network.InitiatorType", {Parser: "parser", Script: "script", Other: "other"});
 InspectorBackend.registerEnum("Network.NetworkStage", {Response: "response"});
 InspectorBackend.registerCommand("Network.enable", null, [], []);
 InspectorBackend.registerCommand("Network.disable", null, [], []);
-InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", null, [{"name": "headers", "type": "object"}], []);
+InspectorBackend.registerCommand("Network.setExtraHTTPHeaders", ["page"], [{"name": "headers", "type": "object"}], []);
 InspectorBackend.registerCommand("Network.getResponseBody", null, [{"name": "requestId", "type": "string"}], ["body", "base64Encoded"]);
 InspectorBackend.registerCommand("Network.setResourceCachingDisabled", null, [{"name": "disabled", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Network.loadResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
-InspectorBackend.registerCommand("Network.getSerializedCertificate", null, [{"name": "requestId", "type": "string"}], ["serializedCertificate"]);
-InspectorBackend.registerCommand("Network.resolveWebSocket", null, [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
-InspectorBackend.registerCommand("Network.setInterceptionEnabled", null, [{"name": "enabled", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Network.addInterception", null, [{"name": "url", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "stage", "type": "string", "optional": true}], []);
-InspectorBackend.registerCommand("Network.removeInterception", null, [{"name": "url", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "stage", "type": "string", "optional": true}], []);
-InspectorBackend.registerCommand("Network.interceptContinue", null, [{"name": "requestId", "type": "string"}], []);
-InspectorBackend.registerCommand("Network.interceptWithResponse", null, [{"name": "requestId", "type": "string"}, {"name": "content", "type": "string"}, {"name": "base64Encoded", "type": "boolean"}, {"name": "mimeType", "type": "string", "optional": true}, {"name": "status", "type": "number", "optional": true}, {"name": "statusText", "type": "string", "optional": true}, {"name": "headers", "type": "object", "optional": true}], []);
+InspectorBackend.registerCommand("Network.loadResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "mimeType", "status"]);
+InspectorBackend.registerCommand("Network.getSerializedCertificate", ["page"], [{"name": "requestId", "type": "string"}], ["serializedCertificate"]);
+InspectorBackend.registerCommand("Network.resolveWebSocket", ["page"], [{"name": "requestId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
+InspectorBackend.registerCommand("Network.setInterceptionEnabled", ["page"], [{"name": "enabled", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Network.addInterception", ["page"], [{"name": "url", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "stage", "type": "string", "optional": true}], []);
+InspectorBackend.registerCommand("Network.removeInterception", ["page"], [{"name": "url", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "stage", "type": "string", "optional": true}], []);
+InspectorBackend.registerCommand("Network.interceptContinue", ["page"], [{"name": "requestId", "type": "string"}], []);
+InspectorBackend.registerCommand("Network.interceptWithResponse", ["page"], [{"name": "requestId", "type": "string"}, {"name": "content", "type": "string"}, {"name": "base64Encoded", "type": "boolean"}, {"name": "mimeType", "type": "string", "optional": true}, {"name": "status", "type": "number", "optional": true}, {"name": "statusText", "type": "string", "optional": true}, {"name": "headers", "type": "object", "optional": true}], []);
 InspectorBackend.registerEvent("Network.requestWillBeSent", null, ["requestId", "frameId", "loaderId", "documentURL", "request", "timestamp", "walltime", "initiator", "redirectResponse", "type", "targetId"]);
 InspectorBackend.registerEvent("Network.responseReceived", null, ["requestId", "frameId", "loaderId", "timestamp", "type", "response"]);
 InspectorBackend.registerEvent("Network.dataReceived", null, ["requestId", "timestamp", "dataLength", "encodedDataLength"]);
 InspectorBackend.registerEvent("Network.loadingFinished", null, ["requestId", "timestamp", "sourceMapURL", "metrics"]);
 InspectorBackend.registerEvent("Network.loadingFailed", null, ["requestId", "timestamp", "errorText", "canceled"]);
 InspectorBackend.registerEvent("Network.requestServedFromMemoryCache", null, ["requestId", "frameId", "loaderId", "documentURL", "timestamp", "initiator", "resource"]);
-InspectorBackend.registerEvent("Network.responseIntercepted", null, ["requestId", "response"]);
-InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", null, ["requestId", "timestamp", "walltime", "request"]);
-InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketCreated", null, ["requestId", "url"]);
-InspectorBackend.registerEvent("Network.webSocketClosed", null, ["requestId", "timestamp"]);
-InspectorBackend.registerEvent("Network.webSocketFrameReceived", null, ["requestId", "timestamp", "response"]);
-InspectorBackend.registerEvent("Network.webSocketFrameError", null, ["requestId", "timestamp", "errorMessage"]);
-InspectorBackend.registerEvent("Network.webSocketFrameSent", null, ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.responseIntercepted", ["page"], ["requestId", "response"]);
+InspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", ["page"], ["requestId", "timestamp", "walltime", "request"]);
+InspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketCreated", ["page"], ["requestId", "url"]);
+InspectorBackend.registerEvent("Network.webSocketClosed", ["page"], ["requestId", "timestamp"]);
+InspectorBackend.registerEvent("Network.webSocketFrameReceived", ["page"], ["requestId", "timestamp", "response"]);
+InspectorBackend.registerEvent("Network.webSocketFrameError", ["page"], ["requestId", "timestamp", "errorMessage"]);
+InspectorBackend.registerEvent("Network.webSocketFrameSent", ["page"], ["requestId", "timestamp", "response"]);
 InspectorBackend.registerNetworkDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Network");
-InspectorBackend.activateDomain("Network", ["page", "service-worker", "web-page"]);
+InspectorBackend.activateDomain("Network", ["itml", "page", "service-worker", "web-page"]);
 
 // Page
-InspectorBackend.registerDomain("Page", ["page"]);
+InspectorBackend.registerDomain("Page", ["itml", "page"]);
 InspectorBackend.registerEnum("Page.Setting", {AuthorAndUserStylesEnabled: "AuthorAndUserStylesEnabled", ICECandidateFilteringEnabled: "ICECandidateFilteringEnabled", ImagesEnabled: "ImagesEnabled", MediaCaptureRequiresSecureConnection: "MediaCaptureRequiresSecureConnection", MockCaptureDevicesEnabled: "MockCaptureDevicesEnabled", NeedsSiteSpecificQuirks: "NeedsSiteSpecificQuirks", ScriptEnabled: "ScriptEnabled", ShowDebugBorders: "ShowDebugBorders", ShowRepaintCounter: "ShowRepaintCounter", WebRTCEncryptionEnabled: "WebRTCEncryptionEnabled", WebSecurityEnabled: "WebSecurityEnabled"});
 InspectorBackend.registerEnum("Page.ResourceType", {Document: "Document", StyleSheet: "StyleSheet", Image: "Image", Font: "Font", Script: "Script", XHR: "XHR", Fetch: "Fetch", Ping: "Ping", Beacon: "Beacon", WebSocket: "WebSocket", Other: "Other"});
 InspectorBackend.registerEnum("Page.CoordinateSystem", {Viewport: "Viewport", Page: "Page"});
@@ -410,34 +410,34 @@ InspectorBackend.registerEnum("Page.Appearance", {Light: "Light", Dark: "Dark"})
 InspectorBackend.registerCommand("Page.enable", null, [], []);
 InspectorBackend.registerCommand("Page.disable", null, [], []);
 InspectorBackend.registerCommand("Page.reload", null, [{"name": "ignoreCache", "type": "boolean", "optional": true}, {"name": "revalidateAllResources", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("Page.navigate", null, [{"name": "url", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.overrideUserAgent", null, [{"name": "value", "type": "string", "optional": true}], []);
-InspectorBackend.registerCommand("Page.overrideSetting", null, [{"name": "setting", "type": "string"}, {"name": "value", "type": "boolean", "optional": true}], []);
-InspectorBackend.registerCommand("Page.getCookies", null, [], ["cookies"]);
-InspectorBackend.registerCommand("Page.deleteCookie", null, [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.navigate", ["page"], [{"name": "url", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.overrideUserAgent", ["page"], [{"name": "value", "type": "string", "optional": true}], []);
+InspectorBackend.registerCommand("Page.overrideSetting", ["page"], [{"name": "setting", "type": "string"}, {"name": "value", "type": "boolean", "optional": true}], []);
+InspectorBackend.registerCommand("Page.getCookies", ["page"], [], ["cookies"]);
+InspectorBackend.registerCommand("Page.deleteCookie", ["page"], [{"name": "cookieName", "type": "string"}, {"name": "url", "type": "string"}], []);
 InspectorBackend.registerCommand("Page.getResourceTree", null, [], ["frameTree"]);
 InspectorBackend.registerCommand("Page.getResourceContent", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}], ["content", "base64Encoded"]);
-InspectorBackend.registerCommand("Page.setBootstrapScript", null, [{"name": "source", "type": "string", "optional": true}], []);
-InspectorBackend.registerCommand("Page.searchInResource", null, [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.searchInResources", null, [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
-InspectorBackend.registerCommand("Page.setShowRulers", null, [{"name": "result", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.setShowPaintRects", null, [{"name": "result", "type": "boolean"}], []);
-InspectorBackend.registerCommand("Page.setEmulatedMedia", null, [{"name": "media", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.setForcedAppearance", null, [{"name": "appearance", "type": "string"}], []);
-InspectorBackend.registerCommand("Page.snapshotNode", null, [{"name": "nodeId", "type": "number"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.snapshotRect", null, [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
-InspectorBackend.registerCommand("Page.archive", null, [], ["data"]);
-InspectorBackend.registerEvent("Page.domContentEventFired", null, ["timestamp"]);
-InspectorBackend.registerEvent("Page.loadEventFired", null, ["timestamp"]);
+InspectorBackend.registerCommand("Page.setBootstrapScript", ["page"], [{"name": "source", "type": "string", "optional": true}], []);
+InspectorBackend.registerCommand("Page.searchInResource", ["page"], [{"name": "frameId", "type": "string"}, {"name": "url", "type": "string"}, {"name": "query", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}, {"name": "requestId", "type": "string", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.searchInResources", ["page"], [{"name": "text", "type": "string"}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"]);
+InspectorBackend.registerCommand("Page.setShowRulers", ["page"], [{"name": "result", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.setShowPaintRects", ["page"], [{"name": "result", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Page.setEmulatedMedia", ["page"], [{"name": "media", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.setForcedAppearance", ["page"], [{"name": "appearance", "type": "string"}], []);
+InspectorBackend.registerCommand("Page.snapshotNode", ["page"], [{"name": "nodeId", "type": "number"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.snapshotRect", ["page"], [{"name": "x", "type": "number"}, {"name": "y", "type": "number"}, {"name": "width", "type": "number"}, {"name": "height", "type": "number"}, {"name": "coordinateSystem", "type": "string"}], ["dataURL"]);
+InspectorBackend.registerCommand("Page.archive", ["page"], [], ["data"]);
+InspectorBackend.registerEvent("Page.domContentEventFired", ["page"], ["timestamp"]);
+InspectorBackend.registerEvent("Page.loadEventFired", ["page"], ["timestamp"]);
 InspectorBackend.registerEvent("Page.frameNavigated", null, ["frame"]);
-InspectorBackend.registerEvent("Page.frameDetached", null, ["frameId"]);
+InspectorBackend.registerEvent("Page.frameDetached", ["page"], ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStartedLoading", null, ["frameId"]);
 InspectorBackend.registerEvent("Page.frameStoppedLoading", null, ["frameId"]);
-InspectorBackend.registerEvent("Page.frameScheduledNavigation", null, ["frameId", "delay"]);
-InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", null, ["frameId"]);
-InspectorBackend.registerEvent("Page.defaultAppearanceDidChange", null, ["appearance"]);
+InspectorBackend.registerEvent("Page.frameScheduledNavigation", ["page"], ["frameId", "delay"]);
+InspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", ["page"], ["frameId"]);
+InspectorBackend.registerEvent("Page.defaultAppearanceDidChange", ["page"], ["appearance"]);
 InspectorBackend.registerPageDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Page");
-InspectorBackend.activateDomain("Page", ["page", "web-page"]);
+InspectorBackend.activateDomain("Page", ["itml", "page", "web-page"]);
 
 // Recording
 InspectorBackend.registerDomain("Recording", ["page"]);
@@ -447,7 +447,7 @@ InspectorBackend.registerEnum("Recording.Initiator", {Frontend: "frontend", Cons
 InspectorBackend.activateDomain("Recording", ["page", "web-page"]);
 
 // Runtime
-InspectorBackend.registerDomain("Runtime", ["javascript", "page", "service-worker", "worker"]);
+InspectorBackend.registerDomain("Runtime", ["itml", "javascript", "page", "service-worker", "worker"]);
 InspectorBackend.registerEnum("Runtime.RemoteObjectType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol", Bigint: "bigint"});
 InspectorBackend.registerEnum("Runtime.RemoteObjectSubtype", {Array: "array", Null: "null", Node: "node", Regexp: "regexp", Date: "date", Error: "error", Map: "map", Set: "set", Weakmap: "weakmap", Weakset: "weakset", Iterator: "iterator", Class: "class", Proxy: "proxy"});
 InspectorBackend.registerEnum("Runtime.ObjectPreviewType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol", Bigint: "bigint"});
@@ -477,10 +477,10 @@ InspectorBackend.registerCommand("Runtime.disableControlFlowProfiler", null, [],
 InspectorBackend.registerCommand("Runtime.getBasicBlocks", null, [{"name": "sourceID", "type": "string"}], ["basicBlocks"]);
 InspectorBackend.registerEvent("Runtime.executionContextCreated", null, ["context"]);
 InspectorBackend.registerRuntimeDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Runtime");
-InspectorBackend.activateDomain("Runtime", null);
+InspectorBackend.activateDomain("Runtime", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // ScriptProfiler
-InspectorBackend.registerDomain("ScriptProfiler", ["javascript", "page"]);
+InspectorBackend.registerDomain("ScriptProfiler", ["itml", "javascript", "page"]);
 InspectorBackend.registerEnum("ScriptProfiler.EventType", {API: "API", Microtask: "Microtask", Other: "Other"});
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", null, [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", null, [], []);
@@ -488,7 +488,7 @@ InspectorBackend.registerEvent("ScriptProfiler.trackingStart", null, ["timestamp
 InspectorBackend.registerEvent("ScriptProfiler.trackingUpdate", null, ["event"]);
 InspectorBackend.registerEvent("ScriptProfiler.trackingComplete", null, ["timestamp", "samples"]);
 InspectorBackend.registerScriptProfilerDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "ScriptProfiler");
-InspectorBackend.activateDomain("ScriptProfiler", ["javascript", "page", "web-page"]);
+InspectorBackend.activateDomain("ScriptProfiler", ["itml", "javascript", "page", "web-page"]);
 
 // ServiceWorker
 InspectorBackend.registerDomain("ServiceWorker", ["service-worker"]);
index dc6578d..61191c4 100644 (file)
@@ -412,7 +412,7 @@ WI.RemoteObject = class RemoteObject
 
     pushNodeToFrontend(callback)
     {
-        if (this._objectId)
+        if (this._objectId && InspectorBackend.hasCommand("DOM.requestNode"))
             WI.domManager.pushNodeToFrontend(this._objectId, callback);
         else
             callback(0);
index 32721cb..33dd96a 100644 (file)
@@ -121,8 +121,6 @@ WI.Target = class Target extends WI.Object
 
     activateExtraDomain(domainName)
     {
-        // FIXME: <https://webkit.org/b/201150> Web Inspector: remove "extra domains" concept now that domains can be added based on the debuggable type
-
         this._agents[domainName] = InspectorBackend._makeAgent(domainName, this);
     }
 
index 4a90515..546ec8c 100644 (file)
@@ -35,6 +35,5 @@ WI.TestAppController = class TestAppController extends WI.AppControllerBase
 
     // Public
 
-    get hasExtraDomains() { return false; }
     get debuggableType() { return this._debuggableType; }
 };
index 8eb37b7..f691b1f 100644 (file)
@@ -53,6 +53,7 @@ WI.ComputedStyleDetailsPanel = class ComputedStyleDetailsPanel extends WI.StyleD
 
         this._computedStyleSection.styleTraces = this._computePropertyTraces(this.nodeStyles.uniqueOrderedStyles);
         this._computedStyleSection.style = this.nodeStyles.computedStyle;
+        this._propertiesSection.element.classList.toggle("hidden", !this._computedStyleSection.propertiesToRender.length);
 
         this._variablesTextEditor.style = this.nodeStyles.computedStyle;
         this._variablesSection.element.classList.toggle("hidden", !this._variablesTextEditor.propertiesToRender.length);
index ad66889..0a35d05 100644 (file)
@@ -345,7 +345,7 @@ WI.appendContextMenuItemsForDOMNode = function(contextMenu, domNode, options = {
             });
         }
 
-        if (InspectorBackend.hasDomain("Page") && attached) {
+        if (InspectorBackend.hasCommand("Page.snapshotNode") && attached) {
             contextMenu.appendItem(WI.UIString("Capture Screenshot", "Capture screenshot of the selected DOM node"), () => {
                 let target = WI.assumingMainTarget();
                 target.PageAgent.snapshotNode(domNode.id, (error, dataURL) => {
index dc26026..8c575d6 100644 (file)
@@ -47,12 +47,16 @@ WI.CookieStorageContentView = class CookieStorageContentView extends WI.ContentV
             this._setCookieButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._handleSetCookieButtonClick, this);
         }
 
-        this._refreshButtonNavigationItem = new WI.ButtonNavigationItem("cookie-storage-refresh", WI.UIString("Refresh"), "Images/ReloadFull.svg", 13, 13);
-        this._refreshButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._refreshButtonClicked, this);
+        if (InspectorBackend.hasCommand("Page.getCookies")) {
+            this._refreshButtonNavigationItem = new WI.ButtonNavigationItem("cookie-storage-refresh", WI.UIString("Refresh"), "Images/ReloadFull.svg", 13, 13);
+            this._refreshButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._refreshButtonClicked, this);
+        }
 
-        this._clearButtonNavigationItem = new WI.ButtonNavigationItem("cookie-storage-clear", WI.UIString("Clear Cookies"), "Images/NavigationItemTrash.svg", 15, 15);
-        this._clearButtonNavigationItem.visibilityPriority = WI.NavigationItem.VisibilityPriority.Low;
-        this._clearButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._handleClearNavigationItemClicked, this);
+        if (InspectorBackend.hasCommand("Page.deleteCookie")) {
+            this._clearButtonNavigationItem = new WI.ButtonNavigationItem("cookie-storage-clear", WI.UIString("Clear Cookies"), "Images/NavigationItemTrash.svg", 15, 15);
+            this._clearButtonNavigationItem.visibilityPriority = WI.NavigationItem.VisibilityPriority.Low;
+            this._clearButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._handleClearNavigationItemClicked, this);
+        }
     }
 
     // Public
@@ -64,8 +68,10 @@ WI.CookieStorageContentView = class CookieStorageContentView extends WI.ContentV
         navigationItems.push(new WI.DividerNavigationItem);
         if (this._setCookieButtonNavigationItem)
             navigationItems.push(this._setCookieButtonNavigationItem);
-        navigationItems.push(this._refreshButtonNavigationItem);
-        navigationItems.push(this._clearButtonNavigationItem);
+        if (this._refreshButtonNavigationItem)
+            navigationItems.push(this._refreshButtonNavigationItem);
+        if (this._clearButtonNavigationItem)
+            navigationItems.push(this._clearButtonNavigationItem);
         return navigationItems;
     }
 
@@ -164,12 +170,14 @@ WI.CookieStorageContentView = class CookieStorageContentView extends WI.ContentV
             InspectorFrontendHost.copyText(this._formatCookiesAsText(cookies));
         });
 
-        contextMenu.appendItem(WI.UIString("Delete"), () => {
-            if (table.isRowSelected(rowIndex))
-                table.removeSelectedRows();
-            else
-                table.removeRow(rowIndex);
-        });
+        if (InspectorBackend.hasCommand("Page.deleteCookie")) {
+            contextMenu.appendItem(WI.UIString("Delete"), () => {
+                if (table.isRowSelected(rowIndex))
+                    table.removeSelectedRows();
+                else
+                    table.removeRow(rowIndex);
+            });
+        }
 
         contextMenu.appendSeparator();
     }
@@ -485,7 +493,10 @@ WI.CookieStorageContentView = class CookieStorageContentView extends WI.ContentV
     _reloadCookies()
     {
         let target = WI.assumingMainTarget();
-        return target.PageAgent.getCookies().then((payload) => {
+        if (!target.hasCommand("Page.getCookies"))
+            return;
+
+        target.PageAgent.getCookies().then((payload) => {
             this._cookies = this._getCookiesForHost(payload.cookies.map(WI.Cookie.fromPayload), this.representedObject.host);
             this._updateSort();
             this._updateFilteredCookies();
@@ -555,8 +566,12 @@ WI.CookieStorageContentView = class CookieStorageContentView extends WI.ContentV
 
     _handleTableKeyDown(event)
     {
-        if (event.keyCode === WI.KeyboardShortcut.Key.Backspace.keyCode || event.keyCode === WI.KeyboardShortcut.Key.Delete.keyCode)
-            this._table.removeSelectedRows();
+        if (event.keyCode === WI.KeyboardShortcut.Key.Backspace.keyCode || event.keyCode === WI.KeyboardShortcut.Key.Delete.keyCode) {
+            if (InspectorBackend.hasCommand("Page.deleteCookie"))
+                this._table.removeSelectedRows();
+            else
+                InspectorFrontendHost.beep();
+        }
     }
 
     _cookiesAtIndexes(indexes)
index 390a52c..6280b56 100644 (file)
@@ -63,16 +63,20 @@ WI.DOMNodeDetailsSidebarPanel = class DOMNodeDetailsSidebarPanel extends WI.DOMD
 
         var identityGroup = new WI.DetailsSectionGroup([this._identityNodeTypeRow, this._identityNodeNameRow, this._identityNodeValueRow, this._identityNodeContentSecurityPolicyHashRow]);
         var identitySection = new WI.DetailsSection("dom-node-identity", WI.UIString("Identity"), [identityGroup]);
+        this.contentView.element.appendChild(identitySection.element);
 
         this._attributesDataGridRow = new WI.DetailsSectionDataGridRow(null, WI.UIString("No Attributes"));
 
         var attributesGroup = new WI.DetailsSectionGroup([this._attributesDataGridRow]);
         var attributesSection = new WI.DetailsSection("dom-node-attributes", WI.UIString("Attributes"), [attributesGroup]);
+        this.contentView.element.appendChild(attributesSection.element);
 
-        this._propertiesRow = new WI.DetailsSectionRow;
-
-        var propertiesGroup = new WI.DetailsSectionGroup([this._propertiesRow]);
-        var propertiesSection = new WI.DetailsSection("dom-node-properties", WI.UIString("Properties"), [propertiesGroup]);
+        if (InspectorBackend.hasCommand("DOM.resolveNode")) {
+            this._propertiesRow = new WI.DetailsSectionRow;
+            let propertiesGroup = new WI.DetailsSectionGroup([this._propertiesRow]);
+            let propertiesSection = new WI.DetailsSection("dom-node-properties", WI.UIString("Properties"), [propertiesGroup]);
+            this.contentView.element.appendChild(propertiesSection.element);
+        }
 
         let eventListenersFilterElement = WI.ImageUtilities.useSVGSymbol("Images/FilterFieldGlyph.svg", "filter", WI.UIString("Grouping Method"));
 
@@ -96,26 +100,20 @@ WI.DOMNodeDetailsSidebarPanel = class DOMNodeDetailsSidebarPanel extends WI.DOMD
 
         this._eventListenersSectionGroup = new WI.DetailsSectionGroup;
         let eventListenersSection = new WI.DetailsSection("dom-node-event-listeners", WI.UIString("Event Listeners"), [this._eventListenersSectionGroup], eventListenersFilterElement);
-
-        this.contentView.element.appendChild(identitySection.element);
-        this.contentView.element.appendChild(attributesSection.element);
-        this.contentView.element.appendChild(propertiesSection.element);
         this.contentView.element.appendChild(eventListenersSection.element);
 
-        if (WI.sharedApp.hasExtraDomains) {
-            let target = WI.assumingMainTarget();
-            if (target.hasCommand("DOM.getDataBindingsForNode")) {
-                this._dataBindingsSection = new WI.DetailsSection("dom-node-data-bindings", WI.UIString("Data Bindings"), []);
-                this.contentView.element.appendChild(this._dataBindingsSection.element);
-            }
-            if (target.hasCommand("DOM.getAssociatedDataForNode")) {
-                this._associatedDataGrid = new WI.DetailsSectionRow(WI.UIString("No Associated Data"));
+        if (InspectorBackend.hasCommand("DOM.getDataBindingsForNode")) {
+            this._dataBindingsSection = new WI.DetailsSection("dom-node-data-bindings", WI.UIString("Data Bindings"), []);
+            this.contentView.element.appendChild(this._dataBindingsSection.element);
+        }
 
-                let associatedDataGroup = new WI.DetailsSectionGroup([this._associatedDataGrid]);
+        if (InspectorBackend.hasCommand("DOM.getAssociatedDataForNode")) {
+            this._associatedDataGrid = new WI.DetailsSectionRow(WI.UIString("No Associated Data"));
 
-                let associatedSection = new WI.DetailsSection("dom-node-associated-data", WI.UIString("Associated Data"), [associatedDataGroup]);
-                this.contentView.element.appendChild(associatedSection.element);
-            }
+            let associatedDataGroup = new WI.DetailsSectionGroup([this._associatedDataGrid]);
+
+            let associatedSection&nbs