]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. | |
3 | * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> | |
4 | * Copyright (C) 2011 Google Inc. All rights reserved. | |
5 | * | |
6 | * Redistribution and use in source and binary forms, with or without | |
7 | * modification, are permitted provided that the following conditions | |
8 | * are met: | |
9 | * | |
10 | * 1. Redistributions of source code must retain the above copyright | |
11 | * notice, this list of conditions and the following disclaimer. | |
12 | * 2. Redistributions in binary form must reproduce the above copyright | |
13 | * notice, this list of conditions and the following disclaimer in the | |
14 | * documentation and/or other materials provided with the distribution. | |
15 | * 3. Neither the name of Apple Inc. ("Apple") nor the names of | |
16 | * its contributors may be used to endorse or promote products derived | |
17 | * from this software without specific prior written permission. | |
18 | * | |
19 | * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY | |
20 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
21 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
22 | * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY | |
23 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
24 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
25 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
26 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
27 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | |
28 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
29 | */ | |
30 | ||
31 | #include "config.h" | |
32 | #include "InspectorAgent.h" | |
33 | ||
34 | #include "InspectorEnvironment.h" | |
35 | #include "InspectorValues.h" | |
36 | #include "ScriptValue.h" | |
37 | ||
38 | namespace Inspector { | |
39 | ||
40 | InspectorAgent::InspectorAgent(InspectorEnvironment& environment) | |
41 | : InspectorAgentBase(ASCIILiteral("Inspector")) | |
42 | , m_environment(environment) | |
43 | , m_enabled(false) | |
44 | { | |
45 | } | |
46 | ||
47 | InspectorAgent::~InspectorAgent() | |
48 | { | |
49 | } | |
50 | ||
51 | void InspectorAgent::didCreateFrontendAndBackend(FrontendChannel* frontendChannel, BackendDispatcher* backendDispatcher) | |
52 | { | |
53 | m_frontendDispatcher = std::make_unique<InspectorFrontendDispatcher>(frontendChannel); | |
54 | m_backendDispatcher = InspectorBackendDispatcher::create(backendDispatcher, this); | |
55 | } | |
56 | ||
57 | void InspectorAgent::willDestroyFrontendAndBackend(DisconnectReason) | |
58 | { | |
59 | m_frontendDispatcher = nullptr; | |
60 | m_backendDispatcher = nullptr; | |
61 | ||
62 | m_pendingEvaluateTestCommands.clear(); | |
63 | ||
64 | ErrorString unused; | |
65 | disable(unused); | |
66 | } | |
67 | ||
68 | void InspectorAgent::enable(ErrorString&) | |
69 | { | |
70 | m_enabled = true; | |
71 | ||
72 | if (m_pendingInspectData.first) | |
73 | inspect(m_pendingInspectData.first.copyRef(), m_pendingInspectData.second.copyRef()); | |
74 | ||
75 | #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS) | |
76 | if (m_pendingExtraDomainsData) | |
77 | m_frontendDispatcher->activateExtraDomains(m_pendingExtraDomainsData); | |
78 | #endif | |
79 | ||
80 | for (auto& testCommand : m_pendingEvaluateTestCommands) { | |
81 | if (!m_frontendDispatcher) | |
82 | break; | |
83 | ||
84 | m_frontendDispatcher->evaluateForTestInFrontend(testCommand); | |
85 | } | |
86 | ||
87 | m_pendingEvaluateTestCommands.clear(); | |
88 | } | |
89 | ||
90 | void InspectorAgent::disable(ErrorString&) | |
91 | { | |
92 | m_enabled = false; | |
93 | } | |
94 | ||
95 | void InspectorAgent::initialized(ErrorString&) | |
96 | { | |
97 | m_environment.frontendInitialized(); | |
98 | } | |
99 | ||
100 | void InspectorAgent::inspect(RefPtr<Protocol::Runtime::RemoteObject>&& objectToInspect, RefPtr<InspectorObject>&& hints) | |
101 | { | |
102 | if (m_enabled && m_frontendDispatcher) { | |
103 | m_frontendDispatcher->inspect(objectToInspect, hints); | |
104 | m_pendingInspectData.first = nullptr; | |
105 | m_pendingInspectData.second = nullptr; | |
106 | return; | |
107 | } | |
108 | ||
109 | m_pendingInspectData.first = objectToInspect; | |
110 | m_pendingInspectData.second = hints; | |
111 | } | |
112 | ||
113 | void InspectorAgent::evaluateForTestInFrontend(const String& script) | |
114 | { | |
115 | if (m_enabled && m_frontendDispatcher) | |
116 | m_frontendDispatcher->evaluateForTestInFrontend(script); | |
117 | else | |
118 | m_pendingEvaluateTestCommands.append(script); | |
119 | } | |
120 | ||
121 | #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS) | |
122 | void InspectorAgent::activateExtraDomain(const String& domainName) | |
123 | { | |
124 | if (!m_enabled) { | |
125 | if (!m_pendingExtraDomainsData) | |
126 | m_pendingExtraDomainsData = Inspector::Protocol::Array<String>::create(); | |
127 | m_pendingExtraDomainsData->addItem(domainName); | |
128 | return; | |
129 | } | |
130 | ||
131 | Ref<Inspector::Protocol::Array<String>> domainNames = Inspector::Protocol::Array<String>::create(); | |
132 | domainNames->addItem(domainName); | |
133 | m_frontendDispatcher->activateExtraDomains(WTF::move(domainNames)); | |
134 | } | |
135 | ||
136 | void InspectorAgent::activateExtraDomains(const Vector<String>& extraDomains) | |
137 | { | |
138 | if (extraDomains.isEmpty()) | |
139 | return; | |
140 | ||
141 | RefPtr<Inspector::Protocol::Array<String>> domainNames = Inspector::Protocol::Array<String>::create(); | |
142 | for (auto domainName : extraDomains) | |
143 | domainNames->addItem(domainName); | |
144 | ||
145 | if (!m_enabled) | |
146 | m_pendingExtraDomainsData = domainNames.release(); | |
147 | else | |
148 | m_frontendDispatcher->activateExtraDomains(domainNames.release()); | |
149 | } | |
150 | #endif | |
151 | ||
152 | } // namespace Inspector |