Web Inspector: Restrict domains at the target level instead of only at the window...
authorjoepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 8 Nov 2018 20:27:04 +0000 (20:27 +0000)
committerjoepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 8 Nov 2018 20:27:04 +0000 (20:27 +0000)
https://bugs.webkit.org/show_bug.cgi?id=191344

Reviewed by Devin Rousso.

Source/JavaScriptCore:

* inspector/protocol/Console.json:
* inspector/protocol/Debugger.json:
* inspector/protocol/Heap.json:
* inspector/protocol/Runtime.json:
Remove workerSupported as it is now no longer necessary. It is implied
by availability being empty (meaning it is supported everywhere).

* inspector/protocol/Inspector.json:
* inspector/protocol/ScriptProfiler.json:
Restrict to "javascript" and "web" debuggables, not available in workers.

* inspector/protocol/Worker.json:
Cleanup, remove empty types list.

* inspector/protocol/Recording.json:
Cleanup, only expose this in the "web" domain for now.

* inspector/scripts/codegen/generate_js_backend_commands.py:
(JSBackendCommandsGenerator.generate_domain):
* inspector/scripts/codegen/models.py:
(Protocol.parse_domain):
Allow a list of debuggable types. Add "worker" even though it is unused
since that is a type we would want to allow or consider.

(Domain.__init__):
(Domains):
Remove now unnecessary workerSupported code.
Allow availability on a domain with only types.

* inspector/scripts/tests/generic/expected/worker-supported-domains.json-result: Removed.
* inspector/scripts/tests/generic/worker-supported-domains.json: Removed.

Source/WebCore:

* inspector/WorkerInspectorController.cpp:
(WebCore::WorkerInspectorController::WorkerInspectorController):
Remove Inspector domain from workers. It was unused anyways.

Source/WebInspectorUI:

With this change the list of agents available on the target should accurately
reflect the domains that target supports. We should start moving in the direction
that if we are checking for, or using, a feature, we should ideally be using
code that looks like `target.FooAgent.method` and not `window.FooAgent` or
an unprefixed `FooAgent`. More changes to follow.

* UserInterface/Controllers/AppControllerBase.js:
* UserInterface/Base/DebuggableType.js: Added.
Extract debuggable type enum out into its own file loaded early on.

* UserInterface/Main.html:
* UserInterface/Test.html:
Load DebuggableType.js.

* UserInterface/Controllers/NetworkManager.js:
(WI.NetworkManager.prototype.initializeTarget):
With these changes target.ServiceWorker is only exposed on a ServiceWorker target.

* UserInterface/Protocol/Connection.js:
(InspectorBackend.WorkerConnection):
With these changes Target.js restricts the domains exposed on the Target so just
clone all of the agents (we don't need to do anything special).

* UserInterface/Protocol/InspectorBackend.js:
(InspectorBackendClass.prototype.activateDomain):
Update supported domains per-type. If there is no explicit availability
then the domain is supported on all types.

(InspectorBackendClass.prototype.supportedDomainsForDebuggableType):
Get supported domains per-type.

(InspectorBackendClass.prototype.get workerSupportedDomains): Deleted.
(InspectorBackendClass.prototype.workerSupportedDomain): Deleted.
workerSupportedDomains is now unnecessary.

* UserInterface/Protocol/Target.js:
(WI.Target.prototype._supportedDomainsForTargetType):
Restrict supported domains for this target based on its type.

* UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:
* Versions/Inspector-iOS-10.3.json:
* Versions/Inspector-iOS-11.0.json:
* Versions/Inspector-iOS-11.3.json:
* Versions/Inspector-iOS-12.0.json:
Regenerate protocol files now that workerSupportedDomains is unnecessary
and explicit availability has been added to other domains.

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

38 files changed:
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/inspector/protocol/Console.json
Source/JavaScriptCore/inspector/protocol/Debugger.json
Source/JavaScriptCore/inspector/protocol/Heap.json
Source/JavaScriptCore/inspector/protocol/Inspector.json
Source/JavaScriptCore/inspector/protocol/Recording.json
Source/JavaScriptCore/inspector/protocol/Runtime.json
Source/JavaScriptCore/inspector/protocol/ScriptProfiler.json
Source/JavaScriptCore/inspector/protocol/Worker.json
Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py
Source/JavaScriptCore/inspector/scripts/codegen/models.py
Source/JavaScriptCore/inspector/scripts/tests/generic/expected/worker-supported-domains.json-result [deleted file]
Source/JavaScriptCore/inspector/scripts/tests/generic/worker-supported-domains.json [deleted file]
Source/WebCore/ChangeLog
Source/WebCore/inspector/WorkerInspectorController.cpp
Source/WebInspectorUI/ChangeLog
Source/WebInspectorUI/UserInterface/Base/DebuggableType.js [new file with mode: 0644]
Source/WebInspectorUI/UserInterface/Controllers/AppControllerBase.js
Source/WebInspectorUI/UserInterface/Controllers/NetworkManager.js
Source/WebInspectorUI/UserInterface/Main.html
Source/WebInspectorUI/UserInterface/Protocol/Connection.js
Source/WebInspectorUI/UserInterface/Protocol/InspectorBackend.js
Source/WebInspectorUI/UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js
Source/WebInspectorUI/UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.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/9.0/InspectorBackendCommands.js
Source/WebInspectorUI/UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js
Source/WebInspectorUI/UserInterface/Protocol/Target.js
Source/WebInspectorUI/UserInterface/Test.html
Source/WebInspectorUI/Versions/Inspector-iOS-10.0.json
Source/WebInspectorUI/Versions/Inspector-iOS-10.3.json
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-9.0.json
Source/WebInspectorUI/Versions/Inspector-iOS-9.3.json

index 4fdfa8b..60ad7f9 100644 (file)
@@ -1,3 +1,42 @@
+2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>
+
+        Web Inspector: Restrict domains at the target level instead of only at the window level
+        https://bugs.webkit.org/show_bug.cgi?id=191344
+
+        Reviewed by Devin Rousso.
+
+        * inspector/protocol/Console.json:
+        * inspector/protocol/Debugger.json:
+        * inspector/protocol/Heap.json:
+        * inspector/protocol/Runtime.json:
+        Remove workerSupported as it is now no longer necessary. It is implied
+        by availability being empty (meaning it is supported everywhere).
+
+        * inspector/protocol/Inspector.json:
+        * inspector/protocol/ScriptProfiler.json:
+        Restrict to "javascript" and "web" debuggables, not available in workers.
+
+        * inspector/protocol/Worker.json:
+        Cleanup, remove empty types list.
+        
+        * inspector/protocol/Recording.json:
+        Cleanup, only expose this in the "web" domain for now.
+
+        * inspector/scripts/codegen/generate_js_backend_commands.py:
+        (JSBackendCommandsGenerator.generate_domain):
+        * inspector/scripts/codegen/models.py:
+        (Protocol.parse_domain):
+        Allow a list of debuggable types. Add "worker" even though it is unused
+        since that is a type we would want to allow or consider.
+
+        (Domain.__init__):
+        (Domains):
+        Remove now unnecessary workerSupported code.
+        Allow availability on a domain with only types.
+
+        * inspector/scripts/tests/generic/expected/worker-supported-domains.json-result: Removed.
+        * inspector/scripts/tests/generic/worker-supported-domains.json: Removed.
+
 2018-11-07  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
 
         Consider removing double load for accessing the MetadataTable from LLInt
index 9c3bcd4..6b94399 100644 (file)
@@ -1,7 +1,6 @@
 {
     "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.",
-    "workerSupported": true,
     "types": [
         {
             "id": "ChannelSource",
index 3143141..418a5be 100644 (file)
@@ -1,7 +1,6 @@
 {
     "domain": "Debugger",
     "description": "Debugger domain exposes JavaScript debugging capabilities. It allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc.",
-    "workerSupported": true,
     "types": [
         {
             "id": "BreakpointId",
index 450ade8..c76e33f 100644 (file)
@@ -1,7 +1,6 @@
 {
     "domain": "Heap",
     "description": "Heap domain exposes JavaScript heap attributes and capabilities.",
-    "workerSupported": true,
     "types": [
         {
             "id": "GarbageCollection",
index 8ec58e5..b17ce87 100644 (file)
@@ -1,6 +1,6 @@
 {
     "domain": "Inspector",
-    "types": [],
+    "availability": ["javascript", "web"],
     "commands": [
         {
             "name": "enable",
index 70f49bf..853710e 100644 (file)
@@ -1,6 +1,7 @@
 {
     "domain": "Recording",
     "description": "General types used for recordings of actions performed in the inspected page.",
+    "availability": ["web"],
     "types": [
         {
             "id": "Type",
index 5f0f40d..33d59a4 100644 (file)
@@ -1,7 +1,6 @@
 {
     "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.",
-    "workerSupported": true,
     "types": [
         {
             "id": "RemoteObjectId",
index d01258d..35032a5 100644 (file)
@@ -1,6 +1,7 @@
 {
     "domain": "ScriptProfiler",
     "description": "Profiler domain exposes JavaScript evaluation timing and profiling.",
+    "availability": ["javascript", "web"],
     "types": [
         {
             "id": "EventType",
index a4e853d..44c59c3 100644 (file)
@@ -1,7 +1,6 @@
 {
     "domain": "Worker",
     "availability": ["web"],
-    "types": [],
     "commands": [
         {
             "name": "enable",
index a15f289..1a88109 100755 (executable)
@@ -144,7 +144,4 @@ class JSBackendCommandsGenerator(Generator):
         else:
             lines.append('InspectorBackend.activateDomain("%(domain)s");' % activate_args)
 
-        if domain.workerSupported:
-            lines.append('InspectorBackend.workerSupportedDomain("%s");' % domain.domain_name)
-
         return "\n".join(lines)
index d09b242..a03fd62 100755 (executable)
@@ -388,20 +388,14 @@ class Protocol:
             events.extend([self.parse_event(event) for event in json['events']])
 
         if 'availability' in json:
-            if not commands and not events:
-                raise ParseException("Malformed domain specification: availability should only be included if there are commands or events.")
             if not isinstance(json['availability'], list):
                 raise ParseException("Malformed domain specification: availability is not an array")
-            allowed_activation_strings = set(['web', 'service-worker'])
+            allowed_activation_strings = set(['javascript', 'web', 'worker', 'service-worker'])
             for availability_type in json['availability']:
                 if availability_type not in allowed_activation_strings:
                     raise ParseException('Malformed domain specification: availability is an unsupported string. Was: "%s", Allowed values: %s' % (json['availability'], ', '.join(allowed_activation_strings)))
 
-        if 'workerSupported' in json:
-            if not isinstance(json['workerSupported'], bool):
-                raise ParseException('Malformed domain specification: workerSupported is not a boolean. Was: "%s"' % json['availability'])
-
-        self.domains.append(Domain(json['domain'], json.get('description', ''), json.get('featureGuard'), json.get('availability'), json.get('workerSupported', False), isSupplemental, types, commands, events))
+        self.domains.append(Domain(json['domain'], json.get('description', ''), json.get('featureGuard'), json.get('availability'), isSupplemental, types, commands, events))
 
     def parse_type_declaration(self, json):
         check_for_required_properties(['id', 'type'], json, "type")
@@ -571,12 +565,11 @@ class Protocol:
 
 
 class Domain:
-    def __init__(self, domain_name, description, feature_guard, availability, workerSupported, isSupplemental, type_declarations, commands, events):
+    def __init__(self, domain_name, description, feature_guard, availability, isSupplemental, type_declarations, commands, events):
         self.domain_name = domain_name
         self.description = description
         self.feature_guard = feature_guard
         self.availability = availability
-        self.workerSupported = workerSupported
         self.is_supplemental = isSupplemental
         self._type_declarations = type_declarations
         self._commands = commands
@@ -606,7 +599,7 @@ class Domain:
 
 
 class Domains:
-    GLOBAL = Domain("", "The global domain, in which primitive types are implicitly declared.", None, None, True, False, [], [], [])
+    GLOBAL = Domain("", "The global domain, in which primitive types are implicitly declared.", None, None, False, [], [], [])
 
 
 class TypeDeclaration:
diff --git a/Source/JavaScriptCore/inspector/scripts/tests/generic/expected/worker-supported-domains.json-result b/Source/JavaScriptCore/inspector/scripts/tests/generic/expected/worker-supported-domains.json-result
deleted file mode 100644 (file)
index 0b4334c..0000000
+++ /dev/null
@@ -1,1121 +0,0 @@
-### Begin File: InspectorBackendCommands.js
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-// DomainA.
-InspectorBackend.registerCommand("DomainA.enable", [], []);
-InspectorBackend.activateDomain("DomainA");
-InspectorBackend.workerSupportedDomain("DomainA");
-
-// DomainB.
-InspectorBackend.registerCommand("DomainB.enable", [], []);
-InspectorBackend.activateDomain("DomainB");
-### End File: InspectorBackendCommands.js
-
-### Begin File: TestAlternateBackendDispatchers.h
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#pragma once
-
-#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
-
-#include "TestProtocolTypes.h"
-#include <JavaScriptCore/InspectorBackendDispatcher.h>
-#include <JavaScriptCore/InspectorFrontendRouter.h>
-
-namespace Inspector {
-
-class AlternateBackendDispatcher {
-public:
-    void setBackendDispatcher(RefPtr<BackendDispatcher>&& dispatcher) { m_backendDispatcher = WTFMove(dispatcher); }
-    BackendDispatcher* backendDispatcher() const { return m_backendDispatcher.get(); }
-private:
-    RefPtr<BackendDispatcher> m_backendDispatcher;
-};
-
-
-class AlternateDomainABackendDispatcher : public AlternateBackendDispatcher {
-public:
-    virtual ~AlternateDomainABackendDispatcher() { }
-    virtual void enable(long callId) = 0;
-};
-class AlternateDomainBBackendDispatcher : public AlternateBackendDispatcher {
-public:
-    virtual ~AlternateDomainBBackendDispatcher() { }
-    virtual void enable(long callId) = 0;
-};
-
-} // namespace Inspector
-
-#endif // ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
-### End File: TestAlternateBackendDispatchers.h
-
-### Begin File: TestBackendDispatchers.h
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#pragma once
-
-#include "TestProtocolObjects.h"
-#include <JavaScriptCore/InspectorBackendDispatcher.h>
-#include <wtf/text/WTFString.h>
-
-namespace Inspector {
-
-typedef String ErrorString;
-
-#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
-class AlternateDomainABackendDispatcher;
-class AlternateDomainBBackendDispatcher;
-#endif // ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
-
-class DomainABackendDispatcherHandler {
-public:
-    virtual void enable(ErrorString&) = 0;
-protected:
-    virtual ~DomainABackendDispatcherHandler();
-};
-
-class DomainBBackendDispatcherHandler {
-public:
-    virtual void enable(ErrorString&) = 0;
-protected:
-    virtual ~DomainBBackendDispatcherHandler();
-};
-
-class DomainABackendDispatcher final : public SupplementalBackendDispatcher {
-public:
-    static Ref<DomainABackendDispatcher> create(BackendDispatcher&, DomainABackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
-private:
-    void enable(long requestId, RefPtr<JSON::Object>&& parameters);
-#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
-public:
-    void setAlternateDispatcher(AlternateDomainABackendDispatcher* alternateDispatcher) { m_alternateDispatcher = alternateDispatcher; }
-private:
-    AlternateDomainABackendDispatcher* m_alternateDispatcher { nullptr };
-#endif
-private:
-    DomainABackendDispatcher(BackendDispatcher&, DomainABackendDispatcherHandler*);
-    DomainABackendDispatcherHandler* m_agent { nullptr };
-};
-
-class DomainBBackendDispatcher final : public SupplementalBackendDispatcher {
-public:
-    static Ref<DomainBBackendDispatcher> create(BackendDispatcher&, DomainBBackendDispatcherHandler*);
-    void dispatch(long requestId, const String& method, Ref<JSON::Object>&& message) override;
-private:
-    void enable(long requestId, RefPtr<JSON::Object>&& parameters);
-#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
-public:
-    void setAlternateDispatcher(AlternateDomainBBackendDispatcher* alternateDispatcher) { m_alternateDispatcher = alternateDispatcher; }
-private:
-    AlternateDomainBBackendDispatcher* m_alternateDispatcher { nullptr };
-#endif
-private:
-    DomainBBackendDispatcher(BackendDispatcher&, DomainBBackendDispatcherHandler*);
-    DomainBBackendDispatcherHandler* m_agent { nullptr };
-};
-
-} // namespace Inspector
-### End File: TestBackendDispatchers.h
-
-### Begin File: TestBackendDispatchers.cpp
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#include "config.h"
-#include "TestBackendDispatchers.h"
-
-#include <JavaScriptCore/InspectorFrontendRouter.h>
-#include <wtf/JSONValues.h>
-#include <wtf/NeverDestroyed.h>
-#include <wtf/text/CString.h>
-
-#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
-#include "TestAlternateBackendDispatchers.h"
-#endif
-
-namespace Inspector {
-
-DomainABackendDispatcherHandler::~DomainABackendDispatcherHandler() { }
-DomainBBackendDispatcherHandler::~DomainBBackendDispatcherHandler() { }
-
-Ref<DomainABackendDispatcher> DomainABackendDispatcher::create(BackendDispatcher& backendDispatcher, DomainABackendDispatcherHandler* agent)
-{
-    return adoptRef(*new DomainABackendDispatcher(backendDispatcher, agent));
-}
-
-DomainABackendDispatcher::DomainABackendDispatcher(BackendDispatcher& backendDispatcher, DomainABackendDispatcherHandler* agent)
-    : SupplementalBackendDispatcher(backendDispatcher)
-    , m_agent(agent)
-{
-    m_backendDispatcher->registerDispatcherForDomain("DomainA"_s, this);
-}
-
-void DomainABackendDispatcher::dispatch(long requestId, const String& method, Ref<JSON::Object>&& message)
-{
-    Ref<DomainABackendDispatcher> protect(*this);
-
-    RefPtr<JSON::Object> parameters;
-    message->getObject("params"_s, parameters);
-
-    if (method == "enable")
-        enable(requestId, WTFMove(parameters));
-    else
-        m_backendDispatcher->reportProtocolError(BackendDispatcher::MethodNotFound, "'DomainA." + method + "' was not found");
-}
-
-void DomainABackendDispatcher::enable(long requestId, RefPtr<JSON::Object>&&)
-{
-#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
-    if (m_alternateDispatcher) {
-        m_alternateDispatcher->enable(requestId);
-        return;
-    }
-#endif
-
-    ErrorString error;
-    Ref<JSON::Object> result = JSON::Object::create();
-    m_agent->enable(error);
-
-    if (!error.length())
-        m_backendDispatcher->sendResponse(requestId, WTFMove(result), false);
-    else
-        m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTFMove(error));
-}
-
-Ref<DomainBBackendDispatcher> DomainBBackendDispatcher::create(BackendDispatcher& backendDispatcher, DomainBBackendDispatcherHandler* agent)
-{
-    return adoptRef(*new DomainBBackendDispatcher(backendDispatcher, agent));
-}
-
-DomainBBackendDispatcher::DomainBBackendDispatcher(BackendDispatcher& backendDispatcher, DomainBBackendDispatcherHandler* agent)
-    : SupplementalBackendDispatcher(backendDispatcher)
-    , m_agent(agent)
-{
-    m_backendDispatcher->registerDispatcherForDomain("DomainB"_s, this);
-}
-
-void DomainBBackendDispatcher::dispatch(long requestId, const String& method, Ref<JSON::Object>&& message)
-{
-    Ref<DomainBBackendDispatcher> protect(*this);
-
-    RefPtr<JSON::Object> parameters;
-    message->getObject("params"_s, parameters);
-
-    if (method == "enable")
-        enable(requestId, WTFMove(parameters));
-    else
-        m_backendDispatcher->reportProtocolError(BackendDispatcher::MethodNotFound, "'DomainB." + method + "' was not found");
-}
-
-void DomainBBackendDispatcher::enable(long requestId, RefPtr<JSON::Object>&&)
-{
-#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
-    if (m_alternateDispatcher) {
-        m_alternateDispatcher->enable(requestId);
-        return;
-    }
-#endif
-
-    ErrorString error;
-    Ref<JSON::Object> result = JSON::Object::create();
-    m_agent->enable(error);
-
-    if (!error.length())
-        m_backendDispatcher->sendResponse(requestId, WTFMove(result), false);
-    else
-        m_backendDispatcher->reportProtocolError(BackendDispatcher::ServerError, WTFMove(error));
-}
-
-} // namespace Inspector
-
-### End File: TestBackendDispatchers.cpp
-
-### Begin File: TestFrontendDispatchers.h
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#pragma once
-
-#include "TestProtocolObjects.h"
-#include <wtf/JSONValues.h>
-#include <wtf/text/WTFString.h>
-
-namespace Inspector {
-
-class FrontendRouter;
-
-} // namespace Inspector
-### End File: TestFrontendDispatchers.h
-
-### Begin File: TestFrontendDispatchers.cpp
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#include "config.h"
-#include "TestFrontendDispatchers.h"
-
-#include <JavaScriptCore/InspectorFrontendRouter.h>
-#include <wtf/text/CString.h>
-
-namespace Inspector {
-
-} // namespace Inspector
-
-### End File: TestFrontendDispatchers.cpp
-
-### Begin File: TestProtocolObjects.h
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#pragma once
-
-#include <JavaScriptCore/InspectorProtocolTypes.h>
-#include <wtf/Assertions.h>
-
-namespace Inspector {
-
-
-
-namespace Protocol {
-
-
-
-
-
-
-
-} // namespace Protocol
-
-} // namespace Inspector
-### End File: TestProtocolObjects.h
-
-### Begin File: TestProtocolObjects.cpp
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#include "config.h"
-#include "TestProtocolObjects.h"
-
-#include <wtf/Optional.h>
-#include <wtf/text/CString.h>
-
-namespace Inspector {
-
-namespace Protocol {
-
-
-
-} // namespace Protocol
-
-} // namespace Inspector
-
-### End File: TestProtocolObjects.cpp
-
-### Begin File: TestProtocolBackendDispatchers.h
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#include <JavaScriptCore/InspectorAlternateBackendDispatchers.h>
-#include <wtf/RetainPtr.h>
-
-@protocol TestProtocolDomainADomainHandler;
-@protocol TestProtocolDomainBDomainHandler;
-
-namespace Inspector {
-
-
-class ObjCInspectorDomainABackendDispatcher final : public AlternateDomainABackendDispatcher {
-public:
-    ObjCInspectorDomainABackendDispatcher(id<TestProtocolDomainADomainHandler> handler) { m_delegate = handler; }
-    virtual void enable(long requestId) override;
-private:
-    RetainPtr<id<TestProtocolDomainADomainHandler>> m_delegate;
-};
-
-class ObjCInspectorDomainBBackendDispatcher final : public AlternateDomainBBackendDispatcher {
-public:
-    ObjCInspectorDomainBBackendDispatcher(id<TestProtocolDomainBDomainHandler> handler) { m_delegate = handler; }
-    virtual void enable(long requestId) override;
-private:
-    RetainPtr<id<TestProtocolDomainBDomainHandler>> m_delegate;
-};
-
-} // namespace Inspector
-
-### End File: TestProtocolBackendDispatchers.h
-
-### Begin File: TestProtocolBackendDispatchers.mm
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#import "config.h"
-#import "TestProtocolBackendDispatchers.h"
-
-#include "TestProtocolInternal.h"
-#include "TestProtocolTypeConversions.h"
-#include <wtf/JSONValues.h>
-
-namespace Inspector {
-
-void ObjCInspectorDomainABackendDispatcher::enable(long requestId)
-{
-    id errorCallback = ^(NSString *error) {
-        backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
-        backendDispatcher()->sendPendingErrors();
-    };
-
-    id successCallback = ^{
-        backendDispatcher()->sendResponse(requestId, JSON::Object::create(), false);
-    };
-
-    [m_delegate enableWithErrorCallback:errorCallback successCallback:successCallback];
-}
-
-
-void ObjCInspectorDomainBBackendDispatcher::enable(long requestId)
-{
-    id errorCallback = ^(NSString *error) {
-        backendDispatcher()->reportProtocolError(requestId, BackendDispatcher::ServerError, error);
-        backendDispatcher()->sendPendingErrors();
-    };
-
-    id successCallback = ^{
-        backendDispatcher()->sendResponse(requestId, JSON::Object::create(), false);
-    };
-
-    [m_delegate enableWithErrorCallback:errorCallback successCallback:successCallback];
-}
-
-
-} // namespace Inspector
-
-### End File: TestProtocolBackendDispatchers.mm
-
-### Begin File: TestProtocolConfiguration.h
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#import <WebInspector/TestProtocol.h>
-
-__attribute__((visibility ("default")))
-@interface TestProtocolConfiguration : NSObject
-@property (nonatomic, retain, setter=setDomainAHandler:) id<TestProtocolDomainADomainHandler> domainAHandler;
-@property (nonatomic, retain, setter=setDomainBHandler:) id<TestProtocolDomainBDomainHandler> domainBHandler;
-@end
-
-
-### End File: TestProtocolConfiguration.h
-
-### Begin File: TestProtocolConfiguration.mm
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#import "TestProtocolConfiguration.h"
-
-#import "TestProtocolInternal.h"
-#import "TestProtocolBackendDispatchers.h"
-#import <JavaScriptCore/AlternateDispatchableAgent.h>
-#import <JavaScriptCore/AugmentableInspectorController.h>
-#import <JavaScriptCore/InspectorAlternateBackendDispatchers.h>
-#import <JavaScriptCore/InspectorBackendDispatchers.h>
-
-using namespace Inspector;
-
-@implementation TestProtocolConfiguration
-{
-    AugmentableInspectorController* _controller;
-    id<TestProtocolDomainADomainHandler> _domainAHandler;
-    id<TestProtocolDomainBDomainHandler> _domainBHandler;
-}
-
-- (instancetype)initWithController:(AugmentableInspectorController*)controller
-{
-    self = [super init];
-    if (!self)
-        return nil;
-    ASSERT(controller);
-    _controller = controller;
-    return self;
-}
-
-- (void)dealloc
-{
-    [_domainAHandler release];
-    [_domainBHandler release];
-    [super dealloc];
-}
-
-- (void)setDomainAHandler:(id<TestProtocolDomainADomainHandler>)handler
-{
-    if (handler == _domainAHandler)
-        return;
-
-    [_domainAHandler release];
-    _domainAHandler = [handler retain];
-
-    auto alternateDispatcher = std::make_unique<ObjCInspectorDomainABackendDispatcher>(handler);
-    auto alternateAgent = std::make_unique<AlternateDispatchableAgent<DomainABackendDispatcher, AlternateDomainABackendDispatcher>>("DomainA"_s, *_controller, WTFMove(alternateDispatcher));
-    _controller->appendExtraAgent(WTFMove(alternateAgent));
-}
-
-- (id<TestProtocolDomainADomainHandler>)domainAHandler
-{
-    return _domainAHandler;
-}
-
-- (void)setDomainBHandler:(id<TestProtocolDomainBDomainHandler>)handler
-{
-    if (handler == _domainBHandler)
-        return;
-
-    [_domainBHandler release];
-    _domainBHandler = [handler retain];
-
-    auto alternateDispatcher = std::make_unique<ObjCInspectorDomainBBackendDispatcher>(handler);
-    auto alternateAgent = std::make_unique<AlternateDispatchableAgent<DomainBBackendDispatcher, AlternateDomainBBackendDispatcher>>("DomainB"_s, *_controller, WTFMove(alternateDispatcher));
-    _controller->appendExtraAgent(WTFMove(alternateAgent));
-}
-
-- (id<TestProtocolDomainBDomainHandler>)domainBHandler
-{
-    return _domainBHandler;
-}
-
-@end
-
-
-### End File: TestProtocolConfiguration.mm
-
-### Begin File: TestProtocolEventDispatchers.mm
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#import "TestProtocolInternal.h"
-
-#import "TestProtocolTypeConversions.h"
-#import <wtf/JSONValues.h>
-
-using namespace Inspector;
-
-
-### End File: TestProtocolEventDispatchers.mm
-
-### Begin File: TestProtocol.h
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#import <Foundation/Foundation.h>
-
-#import <WebInspector/RWIProtocolJSONObject.h>
-
-
-
-
-typedef NS_ENUM(NSInteger, TestProtocolPlatform) {
-    TestProtocolPlatformAll,
-    TestProtocolPlatformGeneric,
-    TestProtocolPlatformIOS,
-    TestProtocolPlatformMacOS,
-};
-
-
-
-
-
-@protocol TestProtocolDomainADomainHandler <NSObject>
-@required
-- (void)enableWithErrorCallback:(void(^)(NSString *error))errorCallback successCallback:(void(^)(void))successCallback;
-@end
-
-@protocol TestProtocolDomainBDomainHandler <NSObject>
-@required
-- (void)enableWithErrorCallback:(void(^)(NSString *error))errorCallback successCallback:(void(^)(void))successCallback;
-@end
-
-
-
-
-### End File: TestProtocol.h
-
-### Begin File: TestProtocolInternal.h
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#import "TestProtocol.h"
-#import "TestProtocolJSONObjectPrivate.h"
-#import <JavaScriptCore/AugmentableInspectorController.h>
-#import <wtf/JSONValues.h>
-
-
-
-
-### End File: TestProtocolInternal.h
-
-### Begin File: TestProtocolTypeConversions.h
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#import "TestProtocol.h"
-#import <WebInspector/RWIProtocolArrayConversions.h>
-
-namespace Inspector {
-
-template<typename ObjCEnumType>
-std::optional<ObjCEnumType> fromProtocolString(const String& value);
-
-inline String toProtocolString(TestProtocolPlatform value)
-{
-    switch(value) {
-    case TestProtocolPlatformAll:
-        return "all"_s;
-    case TestProtocolPlatformGeneric:
-        return "generic"_s;
-    case TestProtocolPlatformIOS:
-        return "ios"_s;
-    case TestProtocolPlatformMacOS:
-        return "macos"_s;
-    }
-}
-
-template<>
-inline std::optional<TestProtocolPlatform> fromProtocolString(const String& value)
-{
-    if (value == "all")
-        return TestProtocolPlatformAll;
-    if (value == "generic")
-        return TestProtocolPlatformGeneric;
-    if (value == "ios")
-        return TestProtocolPlatformIOS;
-    if (value == "macos")
-        return TestProtocolPlatformMacOS;
-    return std::nullopt;
-}
-
-} // namespace Inspector
-
-### End File: TestProtocolTypeConversions.h
-
-### Begin File: TestProtocolTypeConversions.mm
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#import "TestProtocolTypeConversions.h"
-
-#import "TestProtocol.h"
-#import "TestProtocolTypeParser.h"
-#import <WebInspector/RWIProtocolJSONObjectPrivate.h>
-
-using namespace Inspector;
-
-
-
-
-
-
-### End File: TestProtocolTypeConversions.mm
-
-### Begin File: TestProtocolTypes.mm
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
- * Copyright (C) 2014 University of Washington. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// DO NOT EDIT THIS FILE. It is automatically generated from worker-supported-domains.json
-// by the script: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-
-#import "TestProtocolInternal.h"
-
-#import "TestProtocolTypeConversions.h"
-#import <WebInspector/RWIProtocolJSONObjectPrivate.h>
-#import <wtf/Assertions.h>
-#import <wtf/JSONValues.h>
-
-using namespace Inspector;
-
-
-### End File: TestProtocolTypes.mm
diff --git a/Source/JavaScriptCore/inspector/scripts/tests/generic/worker-supported-domains.json b/Source/JavaScriptCore/inspector/scripts/tests/generic/worker-supported-domains.json
deleted file mode 100644 (file)
index 5e5889a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[
-{
-    "domain": "DomainA",
-    "workerSupported": true,
-    "commands": [{"name": "enable"}]
-},
-{
-    "domain": "DomainB",
-    "commands": [{"name": "enable"}]
-}
-]
index 42e28ce..d18c482 100644 (file)
@@ -1,3 +1,14 @@
+2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>
+
+        Web Inspector: Restrict domains at the target level instead of only at the window level
+        https://bugs.webkit.org/show_bug.cgi?id=191344
+
+        Reviewed by Devin Rousso.
+
+        * inspector/WorkerInspectorController.cpp:
+        (WebCore::WorkerInspectorController::WorkerInspectorController):
+        Remove Inspector domain from workers. It was unused anyways.
+
 2018-11-08  Dean Jackson  <dino@apple.com>
 
         Add a String literal that returns a String
index 77d0531..e5c7458 100644 (file)
@@ -39,7 +39,6 @@
 #include "WorkerRuntimeAgent.h"
 #include "WorkerThread.h"
 #include "WorkerToPageFrontendChannel.h"
-#include <JavaScriptCore/InspectorAgent.h>
 #include <JavaScriptCore/InspectorAgentBase.h>
 #include <JavaScriptCore/InspectorBackendDispatcher.h>
 #include <JavaScriptCore/InspectorFrontendChannel.h>
@@ -69,21 +68,18 @@ WorkerInspectorController::WorkerInspectorController(WorkerGlobalScope& workerGl
 
     auto workerContext = workerAgentContext();
 
-    auto inspectorAgent = std::make_unique<InspectorAgent>(workerContext);
     auto heapAgent = std::make_unique<WebHeapAgent>(workerContext);
     auto consoleAgent = std::make_unique<WorkerConsoleAgent>(workerContext, heapAgent.get());
 
-    m_instrumentingAgents->setInspectorAgent(inspectorAgent.get());
     m_instrumentingAgents->setWebConsoleAgent(consoleAgent.get());
 
-    m_agents.append(WTFMove(inspectorAgent));
     m_agents.append(std::make_unique<WorkerRuntimeAgent>(workerContext));
     m_agents.append(std::make_unique<WorkerDebuggerAgent>(workerContext));
     m_agents.append(WTFMove(consoleAgent));
     m_agents.append(WTFMove(heapAgent));
 
     if (CommandLineAPIHost* commandLineAPIHost = m_injectedScriptManager->commandLineAPIHost())
-        commandLineAPIHost->init(m_instrumentingAgents->inspectorAgent(), m_instrumentingAgents->webConsoleAgent(), nullptr, nullptr, nullptr);
+        commandLineAPIHost->init(nullptr, m_instrumentingAgents->webConsoleAgent(), nullptr, nullptr, nullptr);
 }
 
 WorkerInspectorController::~WorkerInspectorController()
index c6d7d3c..5806af3 100644 (file)
@@ -1,3 +1,60 @@
+2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>
+
+        Web Inspector: Restrict domains at the target level instead of only at the window level
+        https://bugs.webkit.org/show_bug.cgi?id=191344
+
+        Reviewed by Devin Rousso.
+
+        With this change the list of agents available on the target should accurately
+        reflect the domains that target supports. We should start moving in the direction
+        that if we are checking for, or using, a feature, we should ideally be using
+        code that looks like `target.FooAgent.method` and not `window.FooAgent` or
+        an unprefixed `FooAgent`. More changes to follow.
+
+        * UserInterface/Controllers/AppControllerBase.js:
+        * UserInterface/Base/DebuggableType.js: Added.
+        Extract debuggable type enum out into its own file loaded early on.
+
+        * UserInterface/Main.html:
+        * UserInterface/Test.html:
+        Load DebuggableType.js.
+
+        * UserInterface/Controllers/NetworkManager.js:
+        (WI.NetworkManager.prototype.initializeTarget):
+        With these changes target.ServiceWorker is only exposed on a ServiceWorker target.
+
+        * UserInterface/Protocol/Connection.js:
+        (InspectorBackend.WorkerConnection):
+        With these changes Target.js restricts the domains exposed on the Target so just
+        clone all of the agents (we don't need to do anything special).
+
+        * UserInterface/Protocol/InspectorBackend.js:
+        (InspectorBackendClass.prototype.activateDomain):
+        Update supported domains per-type. If there is no explicit availability
+        then the domain is supported on all types.
+
+        (InspectorBackendClass.prototype.supportedDomainsForDebuggableType):
+        Get supported domains per-type.
+
+        (InspectorBackendClass.prototype.get workerSupportedDomains): Deleted.
+        (InspectorBackendClass.prototype.workerSupportedDomain): Deleted.
+        workerSupportedDomains is now unnecessary.
+
+        * UserInterface/Protocol/Target.js:
+        (WI.Target.prototype._supportedDomainsForTargetType):
+        Restrict supported domains for this target based on its type.
+
+        * UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:
+        * Versions/Inspector-iOS-10.3.json:
+        * Versions/Inspector-iOS-11.0.json:
+        * Versions/Inspector-iOS-11.3.json:
+        * Versions/Inspector-iOS-12.0.json:
+        Regenerate protocol files now that workerSupportedDomains is unnecessary
+        and explicit availability has been added to other domains.
+
 2018-11-07  Nikita Vasilyev  <nvasilyev@apple.com>
 
         REGRESSION(r236705): Web Inspector: wrong text color for selected DataGrid row
diff --git a/Source/WebInspectorUI/UserInterface/Base/DebuggableType.js b/Source/WebInspectorUI/UserInterface/Base/DebuggableType.js
new file mode 100644 (file)
index 0000000..52d65f3
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// This is a list of the different support target types, which theoretically
+// could all be top level debuggable types.
+
+WI.DebuggableType = {
+    JavaScript: "javascript",
+    Web: "web",
+    Worker: "worker",
+    ServiceWorker: "service-worker",
+};
index f0a99c0..a9ef1f0 100644 (file)
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-WI.DebuggableType = {
-    JavaScript: "javascript",
-    ServiceWorker: "service-worker",
-    Web: "web",
-};
-
 WI.NotImplementedError = class NotImplementedError extends Error
 {
     constructor(message = "This method is not implemented.")
index f5caff6..d6ceea9 100644 (file)
@@ -55,10 +55,7 @@ WI.NetworkManager = class NetworkManager extends WI.Object
             target.PageAgent.getResourceTree(this._processMainFrameResourceTreePayload.bind(this));
         }
 
-        // FIXME: ServiceWorkerAgent should only be exposed in the "serviceworker" target type.
-        // Currently it is exposed to "web" targets. Work around this by only using the
-        // ServiceWorker domain if there is no Page domain.
-        if (target.ServiceWorkerAgent && !target.PageAgent)
+        if (target.ServiceWorkerAgent)
             target.ServiceWorkerAgent.getInitializationInfo(this._processServiceWorkerConfiguration.bind(this));
 
         if (target.NetworkAgent) {
index af04dd5..00b5cff 100644 (file)
 
     <script src="Base/WebInspector.js"></script>
     <script src="Base/Platform.js"></script>
+    <script src="Base/DebuggableType.js"></script>
     <script src="Base/IndexSet.js"></script>
     <script src="Base/LinkedList.js"></script>
     <script src="Base/ListMultimap.js"></script>
index 2a9dd44..1f13c85 100644 (file)
@@ -295,13 +295,13 @@ InspectorBackend.WorkerConnection = class InspectorBackendWorkerConnection exten
 
         this._workerId = workerId;
 
-        const workerDomains = InspectorBackend.workerSupportedDomains;
-
-        for (let domain of workerDomains) {
+        // Clone agents that will use this connection.
+        for (let domain in InspectorBackend._agents) {
             let agent = InspectorBackend._agents[domain];
             let clone = Object.create(InspectorBackend._agents[domain]);
             clone.connection = this;
-            clone.dispatcher = new agent.dispatcher.constructor;
+            if (agent.dispatcher)
+                clone.dispatcher = new agent.dispatcher.constructor;
             this._agents[domain] = clone;
         }
     }
index c8813db..79ca8ed 100644 (file)
@@ -40,7 +40,10 @@ InspectorBackendClass = class InspectorBackendClass
         this._defaultTracer = new WI.LoggingProtocolTracer;
         this._activeTracers = [this._defaultTracer];
 
-        this._workerSupportedDomains = [];
+        this._supportedDomainsForDebuggableType = new Map;
+
+        for (let debuggableType of Object.values(WI.DebuggableType))
+            this._supportedDomainsForDebuggableType.set(debuggableType, []);
 
         WI.settings.autoLogProtocolMessages.addEventListener(WI.Setting.Event.Changed, this._startOrStopAutomaticTracing, this);
         WI.settings.autoLogTimeStats.addEventListener(WI.Setting.Event.Changed, this._startOrStopAutomaticTracing, this);
@@ -55,8 +58,6 @@ InspectorBackendClass = class InspectorBackendClass
 
     // Public
 
-    get workerSupportedDomains() { return this._workerSupportedDomains; }
-
     // It's still possible to set this flag on InspectorBackend to just
     // dump protocol traffic as it happens. For more complex uses of
     // protocol data, install a subclass of WI.ProtocolTracer.
@@ -160,6 +161,10 @@ InspectorBackendClass = class InspectorBackendClass
 
     activateDomain(domainName, activationDebuggableTypes)
     {
+        let supportedDebuggableTypes = activationDebuggableTypes || Object.values(WI.DebuggableType);
+        for (let debuggableType of supportedDebuggableTypes)
+            this._supportedDomainsForDebuggableType.get(debuggableType).push(domainName);
+
         if (!activationDebuggableTypes || activationDebuggableTypes.includes(InspectorFrontendHost.debuggableType())) {
             let agent = this._agents[domainName];
             agent.activate();
@@ -169,9 +174,11 @@ InspectorBackendClass = class InspectorBackendClass
         return null;
     }
 
-    workerSupportedDomain(domainName)
+    supportedDomainsForDebuggableType(type)
     {
-        this._workerSupportedDomains.push(domainName);
+        console.assert(Object.values(WI.DebuggableType).includes(type), "Unknown debuggable type", type);
+
+        return this._supportedDomainsForDebuggableType.get(type);
     }
 
     // Private
index 8dcc815..a1856c7 100644 (file)
@@ -238,7 +238,7 @@ InspectorBackend.registerEvent("Inspector.activateExtraDomains", ["domains"]);
 InspectorBackend.registerCommand("Inspector.enable", [], []);
 InspectorBackend.registerCommand("Inspector.disable", [], []);
 InspectorBackend.registerCommand("Inspector.initialized", [], []);
-InspectorBackend.activateDomain("Inspector");
+InspectorBackend.activateDomain("Inspector", ["javascript", "web"]);
 
 // LayerTree.
 InspectorBackend.registerLayerTreeDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "LayerTree");
@@ -361,7 +361,7 @@ InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStarted", []);
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStopped", []);
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", [], []);
-InspectorBackend.activateDomain("ScriptProfiler");
+InspectorBackend.activateDomain("ScriptProfiler", ["javascript", "web"]);
 
 // Timeline.
 InspectorBackend.registerTimelineDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "Timeline");
index 728157e..11097bb 100644 (file)
@@ -87,7 +87,6 @@ InspectorBackend.registerCommand("Console.clearMessages", [], []);
 InspectorBackend.registerCommand("Console.setMonitoringXHREnabled", [{"name": "enabled", "type": "boolean", "optional": false}], []);
 InspectorBackend.registerCommand("Console.addInspectedNode", [{"name": "nodeId", "type": "number", "optional": false}], []);
 InspectorBackend.activateDomain("Console");
-InspectorBackend.workerSupportedDomain("Console");
 
 // DOM.
 InspectorBackend.registerDOMDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "DOM");
@@ -207,7 +206,6 @@ InspectorBackend.registerCommand("Debugger.setPauseOnAssertions", [{"name": "ena
 InspectorBackend.registerCommand("Debugger.evaluateOnCallFrame", [{"name": "callFrameId", "type": "string", "optional": false}, {"name": "expression", "type": "string", "optional": false}, {"name": "objectGroup", "type": "string", "optional": true}, {"name": "includeCommandLineAPI", "type": "boolean", "optional": true}, {"name": "doNotPauseOnExceptionsAndMuteConsole", "type": "boolean", "optional": true}, {"name": "returnByValue", "type": "boolean", "optional": true}, {"name": "generatePreview", "type": "boolean", "optional": true}, {"name": "saveResult", "type": "boolean", "optional": true}], ["result", "wasThrown", "savedResultIndex"]);
 InspectorBackend.registerCommand("Debugger.setOverlayMessage", [{"name": "message", "type": "string", "optional": true}], []);
 InspectorBackend.activateDomain("Debugger");
-InspectorBackend.workerSupportedDomain("Debugger");
 
 // Heap.
 InspectorBackend.registerHeapDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "Heap");
@@ -245,7 +243,7 @@ InspectorBackend.registerEvent("Inspector.activateExtraDomains", ["domains"]);
 InspectorBackend.registerCommand("Inspector.enable", [], []);
 InspectorBackend.registerCommand("Inspector.disable", [], []);
 InspectorBackend.registerCommand("Inspector.initialized", [], []);
-InspectorBackend.activateDomain("Inspector");
+InspectorBackend.activateDomain("Inspector", ["javascript", "web"]);
 
 // LayerTree.
 InspectorBackend.registerLayerTreeDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "LayerTree");
@@ -353,7 +351,6 @@ InspectorBackend.registerCommand("Runtime.enableControlFlowProfiler", [], []);
 InspectorBackend.registerCommand("Runtime.disableControlFlowProfiler", [], []);
 InspectorBackend.registerCommand("Runtime.getBasicBlocks", [{"name": "sourceID", "type": "string", "optional": false}], ["basicBlocks"]);
 InspectorBackend.activateDomain("Runtime");
-InspectorBackend.workerSupportedDomain("Runtime");
 
 // ScriptProfiler.
 InspectorBackend.registerScriptProfilerDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "ScriptProfiler");
@@ -365,7 +362,7 @@ InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStarted", []);
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStopped", []);
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", [], []);
-InspectorBackend.activateDomain("ScriptProfiler");
+InspectorBackend.activateDomain("ScriptProfiler", ["javascript", "web"]);
 
 // Timeline.
 InspectorBackend.registerTimelineDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "Timeline");
index fb40a77..de25819 100644 (file)
@@ -87,7 +87,6 @@ InspectorBackend.registerCommand("Console.clearMessages", [], []);
 InspectorBackend.registerCommand("Console.setMonitoringXHREnabled", [{"name": "enabled", "type": "boolean", "optional": false}], []);
 InspectorBackend.registerCommand("Console.addInspectedNode", [{"name": "nodeId", "type": "number", "optional": false}], []);
 InspectorBackend.activateDomain("Console");
-InspectorBackend.workerSupportedDomain("Console");
 
 // DOM.
 InspectorBackend.registerDOMDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "DOM");
@@ -219,7 +218,6 @@ InspectorBackend.registerCommand("Debugger.setPauseOnAssertions", [{"name": "ena
 InspectorBackend.registerCommand("Debugger.evaluateOnCallFrame", [{"name": "callFrameId", "type": "string", "optional": false}, {"name": "expression", "type": "string", "optional": false}, {"name": "objectGroup", "type": "string", "optional": true}, {"name": "includeCommandLineAPI", "type": "boolean", "optional": true}, {"name": "doNotPauseOnExceptionsAndMuteConsole", "type": "boolean", "optional": true}, {"name": "returnByValue", "type": "boolean", "optional": true}, {"name": "generatePreview", "type": "boolean", "optional": true}, {"name": "saveResult", "type": "boolean", "optional": true}], ["result", "wasThrown", "savedResultIndex"]);
 InspectorBackend.registerCommand("Debugger.setOverlayMessage", [{"name": "message", "type": "string", "optional": true}], []);
 InspectorBackend.activateDomain("Debugger");
-InspectorBackend.workerSupportedDomain("Debugger");
 
 // Heap.
 InspectorBackend.registerHeapDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "Heap");
@@ -236,7 +234,6 @@ InspectorBackend.registerCommand("Heap.stopTracking", [], []);
 InspectorBackend.registerCommand("Heap.getPreview", [{"name": "heapObjectId", "type": "number", "optional": false}], ["string", "functionDetails", "preview"]);
 InspectorBackend.registerCommand("Heap.getRemoteObject", [{"name": "heapObjectId", "type": "number", "optional": false}, {"name": "objectGroup", "type": "string", "optional": true}], ["result"]);
 InspectorBackend.activateDomain("Heap");
-InspectorBackend.workerSupportedDomain("Heap");
 
 // IndexedDB.
 InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "IndexedDB");
@@ -258,7 +255,7 @@ InspectorBackend.registerEvent("Inspector.activateExtraDomains", ["domains"]);
 InspectorBackend.registerCommand("Inspector.enable", [], []);
 InspectorBackend.registerCommand("Inspector.disable", [], []);
 InspectorBackend.registerCommand("Inspector.initialized", [], []);
-InspectorBackend.activateDomain("Inspector");
+InspectorBackend.activateDomain("Inspector", ["javascript", "web"]);
 
 // LayerTree.
 InspectorBackend.registerLayerTreeDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "LayerTree");
@@ -370,7 +367,6 @@ InspectorBackend.registerCommand("Runtime.enableControlFlowProfiler", [], []);
 InspectorBackend.registerCommand("Runtime.disableControlFlowProfiler", [], []);
 InspectorBackend.registerCommand("Runtime.getBasicBlocks", [{"name": "sourceID", "type": "string", "optional": false}], ["basicBlocks"]);
 InspectorBackend.activateDomain("Runtime");
-InspectorBackend.workerSupportedDomain("Runtime");
 
 // ScriptProfiler.
 InspectorBackend.registerScriptProfilerDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "ScriptProfiler");
@@ -382,7 +378,7 @@ InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStarted", []);
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStopped", []);
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", [], []);
-InspectorBackend.activateDomain("ScriptProfiler");
+InspectorBackend.activateDomain("ScriptProfiler", ["javascript", "web"]);
 
 // Timeline.
 InspectorBackend.registerTimelineDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "Timeline");
index 3942606..4272885 100644 (file)
@@ -107,7 +107,6 @@ InspectorBackend.registerCommand("Console.clearMessages", [], []);
 InspectorBackend.registerCommand("Console.getLoggingChannels", [], ["channels"]);
 InspectorBackend.registerCommand("Console.setLoggingChannelLevel", [{"name": "source", "type": "string", "optional": false}, {"name": "level", "type": "string", "optional": false}], []);
 InspectorBackend.activateDomain("Console");
-InspectorBackend.workerSupportedDomain("Console");
 
 // DOM.
 InspectorBackend.registerDOMDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "DOM");
@@ -246,7 +245,6 @@ InspectorBackend.registerCommand("Debugger.setPauseOnAssertions", [{"name": "ena
 InspectorBackend.registerCommand("Debugger.evaluateOnCallFrame", [{"name": "callFrameId", "type": "string", "optional": false}, {"name": "expression", "type": "string", "optional": false}, {"name": "objectGroup", "type": "string", "optional": true}, {"name": "includeCommandLineAPI", "type": "boolean", "optional": true}, {"name": "doNotPauseOnExceptionsAndMuteConsole", "type": "boolean", "optional": true}, {"name": "returnByValue", "type": "boolean", "optional": true}, {"name": "generatePreview", "type": "boolean", "optional": true}, {"name": "saveResult", "type": "boolean", "optional": true}], ["result", "wasThrown", "savedResultIndex"]);
 InspectorBackend.registerCommand("Debugger.setOverlayMessage", [{"name": "message", "type": "string", "optional": true}], []);
 InspectorBackend.activateDomain("Debugger");
-InspectorBackend.workerSupportedDomain("Debugger");
 
 // Heap.
 InspectorBackend.registerHeapDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "Heap");
@@ -263,7 +261,6 @@ InspectorBackend.registerCommand("Heap.stopTracking", [], []);
 InspectorBackend.registerCommand("Heap.getPreview", [{"name": "heapObjectId", "type": "number", "optional": false}], ["string", "functionDetails", "preview"]);
 InspectorBackend.registerCommand("Heap.getRemoteObject", [{"name": "heapObjectId", "type": "number", "optional": false}, {"name": "objectGroup", "type": "string", "optional": true}], ["result"]);
 InspectorBackend.activateDomain("Heap");
-InspectorBackend.workerSupportedDomain("Heap");
 
 // IndexedDB.
 InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "IndexedDB");
@@ -285,7 +282,7 @@ InspectorBackend.registerEvent("Inspector.activateExtraDomains", ["domains"]);
 InspectorBackend.registerCommand("Inspector.enable", [], []);
 InspectorBackend.registerCommand("Inspector.disable", [], []);
 InspectorBackend.registerCommand("Inspector.initialized", [], []);
-InspectorBackend.activateDomain("Inspector");
+InspectorBackend.activateDomain("Inspector", ["javascript", "web"]);
 
 // LayerTree.
 InspectorBackend.registerLayerTreeDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "LayerTree");
@@ -401,7 +398,6 @@ InspectorBackend.registerCommand("Runtime.enableControlFlowProfiler", [], []);
 InspectorBackend.registerCommand("Runtime.disableControlFlowProfiler", [], []);
 InspectorBackend.registerCommand("Runtime.getBasicBlocks", [{"name": "sourceID", "type": "string", "optional": false}], ["basicBlocks"]);
 InspectorBackend.activateDomain("Runtime");
-InspectorBackend.workerSupportedDomain("Runtime");
 
 // ScriptProfiler.
 InspectorBackend.registerScriptProfilerDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "ScriptProfiler");
@@ -413,7 +409,7 @@ InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStarted", []);
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStopped", []);
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", [], []);
-InspectorBackend.activateDomain("ScriptProfiler");
+InspectorBackend.activateDomain("ScriptProfiler", ["javascript", "web"]);
 
 // ServiceWorker.
 InspectorBackend.registerCommand("ServiceWorker.getInitializationInfo", [], ["info"]);
index 3a046cf..683373e 100644 (file)
@@ -108,7 +108,6 @@ InspectorBackend.registerCommand("Console.clearMessages", [], []);
 InspectorBackend.registerCommand("Console.getLoggingChannels", [], ["channels"]);
 InspectorBackend.registerCommand("Console.setLoggingChannelLevel", [{"name": "source", "type": "string", "optional": false}, {"name": "level", "type": "string", "optional": false}], []);
 InspectorBackend.activateDomain("Console");
-InspectorBackend.workerSupportedDomain("Console");
 
 // DOM.
 InspectorBackend.registerDOMDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "DOM");
@@ -248,7 +247,6 @@ InspectorBackend.registerCommand("Debugger.setPauseForInternalScripts", [{"name"
 InspectorBackend.registerCommand("Debugger.evaluateOnCallFrame", [{"name": "callFrameId", "type": "string", "optional": false}, {"name": "expression", "type": "string", "optional": false}, {"name": "objectGroup", "type": "string", "optional": true}, {"name": "includeCommandLineAPI", "type": "boolean", "optional": true}, {"name": "doNotPauseOnExceptionsAndMuteConsole", "type": "boolean", "optional": true}, {"name": "returnByValue", "type": "boolean", "optional": true}, {"name": "generatePreview", "type": "boolean", "optional": true}, {"name": "saveResult", "type": "boolean", "optional": true}], ["result", "wasThrown", "savedResultIndex"]);
 InspectorBackend.registerCommand("Debugger.setOverlayMessage", [{"name": "message", "type": "string", "optional": true}], []);
 InspectorBackend.activateDomain("Debugger");
-InspectorBackend.workerSupportedDomain("Debugger");
 
 // Heap.
 InspectorBackend.registerHeapDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "Heap");
@@ -265,7 +263,6 @@ InspectorBackend.registerCommand("Heap.stopTracking", [], []);
 InspectorBackend.registerCommand("Heap.getPreview", [{"name": "heapObjectId", "type": "number", "optional": false}], ["string", "functionDetails", "preview"]);
 InspectorBackend.registerCommand("Heap.getRemoteObject", [{"name": "heapObjectId", "type": "number", "optional": false}, {"name": "objectGroup", "type": "string", "optional": true}], ["result"]);
 InspectorBackend.activateDomain("Heap");
-InspectorBackend.workerSupportedDomain("Heap");
 
 // IndexedDB.
 InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "IndexedDB");
@@ -287,7 +284,7 @@ InspectorBackend.registerEvent("Inspector.activateExtraDomains", ["domains"]);
 InspectorBackend.registerCommand("Inspector.enable", [], []);
 InspectorBackend.registerCommand("Inspector.disable", [], []);
 InspectorBackend.registerCommand("Inspector.initialized", [], []);
-InspectorBackend.activateDomain("Inspector");
+InspectorBackend.activateDomain("Inspector", ["javascript", "web"]);
 
 // LayerTree.
 InspectorBackend.registerLayerTreeDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "LayerTree");
@@ -405,7 +402,6 @@ InspectorBackend.registerCommand("Runtime.enableControlFlowProfiler", [], []);
 InspectorBackend.registerCommand("Runtime.disableControlFlowProfiler", [], []);
 InspectorBackend.registerCommand("Runtime.getBasicBlocks", [{"name": "sourceID", "type": "string", "optional": false}], ["basicBlocks"]);
 InspectorBackend.activateDomain("Runtime");
-InspectorBackend.workerSupportedDomain("Runtime");
 
 // ScriptProfiler.
 InspectorBackend.registerScriptProfilerDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "ScriptProfiler");
@@ -417,7 +413,7 @@ InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStarted", []);
 InspectorBackend.registerEvent("ScriptProfiler.programmaticCaptureStopped", []);
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", [], []);
-InspectorBackend.activateDomain("ScriptProfiler");
+InspectorBackend.activateDomain("ScriptProfiler", ["javascript", "web"]);
 
 // ServiceWorker.
 InspectorBackend.registerCommand("ServiceWorker.getInitializationInfo", [], ["info"]);
index a8f8d5f..efdab6c 100644 (file)
@@ -213,7 +213,7 @@ InspectorBackend.registerEvent("Inspector.activateExtraDomains", ["domains"]);
 InspectorBackend.registerCommand("Inspector.enable", [], []);
 InspectorBackend.registerCommand("Inspector.disable", [], []);
 InspectorBackend.registerCommand("Inspector.initialized", [], []);
-InspectorBackend.activateDomain("Inspector");
+InspectorBackend.activateDomain("Inspector", ["javascript", "web"]);
 
 // LayerTree.
 InspectorBackend.registerLayerTreeDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "LayerTree");
index a467f0c..9d35791 100644 (file)
@@ -219,7 +219,7 @@ InspectorBackend.registerEvent("Inspector.activateExtraDomains", ["domains"]);
 InspectorBackend.registerCommand("Inspector.enable", [], []);
 InspectorBackend.registerCommand("Inspector.disable", [], []);
 InspectorBackend.registerCommand("Inspector.initialized", [], []);
-InspectorBackend.activateDomain("Inspector");
+InspectorBackend.activateDomain("Inspector", ["javascript", "web"]);
 
 // LayerTree.
 InspectorBackend.registerLayerTreeDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "LayerTree");
index dcd14c9..bd9e968 100644 (file)
@@ -33,12 +33,19 @@ WI.Target = class Target extends WI.Object
         this._name = name;
         this._type = type;
         this._connection = connection;
-        this._agents = connection._agents;
         this._executionContext = null;
         this._mainResource = null;
         this._resourceCollection = new WI.ResourceCollection;
         this._extraScriptCollection = new WI.ScriptCollection;
 
+        // Restrict the agents to the list of supported agents for this target type.
+        // This makes it so `target.FooAgent` only exists if the "Foo" domain is
+        // supported by the target.
+        this._agents = {};
+        const supportedDomains = this._supportedDomainsForTargetType(this._type);
+        for (let domain of supportedDomains)
+            this._agents[domain] = this._connection._agents[domain];
+
         this._connection.target = this;
 
         // Agents we always expect in every target.
@@ -167,6 +174,25 @@ WI.Target = class Target extends WI.Object
 
         this.dispatchEventToListeners(WI.Target.Event.ScriptAdded, {script});
     }
+
+    // Private
+
+    _supportedDomainsForTargetType(type)
+    {
+        switch (type) {
+        case WI.Target.Type.JSContext:
+            return InspectorBackend.supportedDomainsForDebuggableType(WI.DebuggableType.JavaScript);
+        case WI.Target.Type.Worker:
+            return InspectorBackend.supportedDomainsForDebuggableType(WI.DebuggableType.Worker);
+        case WI.Target.Type.ServiceWorker:
+            return InspectorBackend.supportedDomainsForDebuggableType(WI.DebuggableType.ServiceWorker);
+        case WI.Target.Type.Page:
+            return InspectorBackend.supportedDomainsForDebuggableType(WI.DebuggableType.Web);
+        default:
+            console.assert(false, "Unexpected target type", type);
+            return InspectorBackend.supportedDomainsForDebuggableType(WI.DebuggableType.Web);
+        }
+    }
 };
 
 WI.Target.Type = {
index 984c23f..be60dd3 100644 (file)
@@ -37,6 +37,7 @@
 
     <script src="Base/WebInspector.js"></script>
     <script src="Base/Platform.js"></script>
+    <script src="Base/DebuggableType.js"></script>
     <script src="Base/IndexSet.js"></script>
     <script src="Base/LinkedList.js"></script>
     <script src="Base/ListMultimap.js"></script>
index 9e0c6cd..67f0dcc 100644 (file)
 ,
 {
     "domain": "Inspector",
+    "availability": ["javascript", "web"],
     "types": [],
     "commands": [
         {
 {
     "domain": "ScriptProfiler",
     "description": "Profiler domain exposes JavaScript evaluation timing and profiling.",
+    "availability": ["javascript", "web"],
     "types": [
         {
             "id": "EventType",
index c9d87e0..8ac0a13 100644 (file)
 {
     "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.",
-    "workerSupported": true,
     "types": [
         {
             "id": "ConsoleMessage",
 {
     "domain": "Debugger",
     "description": "Debugger domain exposes JavaScript debugging capabilities. It allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc.",
-    "workerSupported": true,
     "types": [
         {
             "id": "BreakpointId",
 ,
 {
     "domain": "Inspector",
+    "availability": ["javascript", "web"],
     "types": [],
     "commands": [
         {
 {
     "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.",
-    "workerSupported": true,
     "types": [
         {
             "id": "RemoteObjectId",
 {
     "domain": "ScriptProfiler",
     "description": "Profiler domain exposes JavaScript evaluation timing and profiling.",
+    "availability": ["javascript", "web"],
     "types": [
         {
             "id": "EventType",
index d69673e..5d2b1eb 100644 (file)
 {
     "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.",
-    "workerSupported": true,
     "types": [
         {
             "id": "ConsoleMessage",
 {
     "domain": "Debugger",
     "description": "Debugger domain exposes JavaScript debugging capabilities. It allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc.",
-    "workerSupported": true,
     "types": [
         {
             "id": "BreakpointId",
 {
     "domain": "Heap",
     "description": "Heap domain exposes JavaScript heap attributes and capabilities.",
-    "workerSupported": true,
     "types": [
         {
             "id": "GarbageCollection",
 ,
 {
     "domain": "Inspector",
+    "availability": ["javascript", "web"],
     "types": [],
     "commands": [
         {
 {
     "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.",
-    "workerSupported": true,
     "types": [
         {
             "id": "RemoteObjectId",
 {
     "domain": "ScriptProfiler",
     "description": "Profiler domain exposes JavaScript evaluation timing and profiling.",
+    "availability": ["javascript", "web"],
     "types": [
         {
             "id": "EventType",
index 4a4886b..096ed97 100644 (file)
 {
     "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.",
-    "workerSupported": true,
     "types": [
         {
             "id": "ChannelSource",
 {
     "domain": "Debugger",
     "description": "Debugger domain exposes JavaScript debugging capabilities. It allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc.",
-    "workerSupported": true,
     "types": [
         {
             "id": "BreakpointId",
 {
     "domain": "Heap",
     "description": "Heap domain exposes JavaScript heap attributes and capabilities.",
-    "workerSupported": true,
     "types": [
         {
             "id": "GarbageCollection",
 ,
 {
     "domain": "Inspector",
+    "availability": ["javascript", "web"],
     "types": [],
     "commands": [
         {
 {
     "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.",
-    "workerSupported": true,
     "types": [
         {
             "id": "RemoteObjectId",
 {
     "domain": "ScriptProfiler",
     "description": "Profiler domain exposes JavaScript evaluation timing and profiling.",
+    "availability": ["javascript", "web"],
     "types": [
         {
             "id": "EventType",
index 4685b9c..8fcb286 100644 (file)
 {
     "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.",
-    "workerSupported": true,
     "types": [
         {
             "id": "ChannelSource",
 {
     "domain": "Debugger",
     "description": "Debugger domain exposes JavaScript debugging capabilities. It allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc.",
-    "workerSupported": true,
     "types": [
         {
             "id": "BreakpointId",
 {
     "domain": "Heap",
     "description": "Heap domain exposes JavaScript heap attributes and capabilities.",
-    "workerSupported": true,
     "types": [
         {
             "id": "GarbageCollection",
 ,
 {
     "domain": "Inspector",
+    "availability": ["javascript", "web"],
     "types": [],
     "commands": [
         {
 {
     "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.",
-    "workerSupported": true,
     "types": [
         {
             "id": "RemoteObjectId",
 {
     "domain": "ScriptProfiler",
     "description": "Profiler domain exposes JavaScript evaluation timing and profiling.",
+    "availability": ["javascript", "web"],
     "types": [
         {
             "id": "EventType",
index 51f7552..79b3ab5 100644 (file)
 ,
 {
     "domain": "Inspector",
+    "availability": ["javascript", "web"],
     "types": [],
     "commands": [
         {
index b57550c..82f6d7f 100644 (file)
 ,
 {
     "domain": "Inspector",
+    "availability": ["javascript", "web"],
     "types": [],
     "commands": [
         {