Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(390)

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp

Issue 2702273004: bindings: Simplifies WindowProxyManager and its relation to Frame. (Closed)
Patch Set: Fixed WindowProxyManager::createWindowProxy(ForFrame). Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008, 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2008, 2009 Google Inc. All rights reserved.
3 * Copyright (C) 2009 Apple Inc. All rights reserved. 3 * Copyright (C) 2009 Apple Inc. All rights reserved.
4 * Copyright (C) 2014 Opera Software ASA. All rights reserved. 4 * Copyright (C) 2014 Opera Software ASA. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are 7 * modification, are permitted provided that the following conditions are
8 * met: 8 * met:
9 * 9 *
10 * * Redistributions of source code must retain the above copyright 10 * * Redistributions of source code must retain the above copyright
(...skipping 15 matching lines...) Expand all
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */ 31 */
32 32
33 #include "bindings/core/v8/ScriptController.h" 33 #include "bindings/core/v8/ScriptController.h"
34 34
35 #include "bindings/core/v8/ScriptSourceCode.h" 35 #include "bindings/core/v8/ScriptSourceCode.h"
36 #include "bindings/core/v8/ScriptValue.h"
37 #include "bindings/core/v8/V8Binding.h" 36 #include "bindings/core/v8/V8Binding.h"
38 #include "bindings/core/v8/V8Event.h"
39 #include "bindings/core/v8/V8GCController.h" 37 #include "bindings/core/v8/V8GCController.h"
40 #include "bindings/core/v8/V8HTMLElement.h"
41 #include "bindings/core/v8/V8PerContextData.h"
42 #include "bindings/core/v8/V8ScriptRunner.h" 38 #include "bindings/core/v8/V8ScriptRunner.h"
43 #include "bindings/core/v8/V8Window.h"
44 #include "bindings/core/v8/WindowProxy.h" 39 #include "bindings/core/v8/WindowProxy.h"
45 #include "core/dom/Document.h" 40 #include "core/dom/Document.h"
46 #include "core/dom/Node.h"
47 #include "core/dom/ScriptableDocumentParser.h" 41 #include "core/dom/ScriptableDocumentParser.h"
48 #include "core/events/Event.h" 42 #include "core/frame/LocalFrame.h"
49 #include "core/events/EventListener.h"
50 #include "core/frame/LocalDOMWindow.h"
51 #include "core/frame/LocalFrameClient.h" 43 #include "core/frame/LocalFrameClient.h"
52 #include "core/frame/Settings.h" 44 #include "core/frame/Settings.h"
53 #include "core/frame/UseCounter.h" 45 #include "core/frame/UseCounter.h"
54 #include "core/frame/csp/ContentSecurityPolicy.h" 46 #include "core/frame/csp/ContentSecurityPolicy.h"
55 #include "core/html/HTMLPlugInElement.h" 47 #include "core/html/HTMLPlugInElement.h"
56 #include "core/inspector/ConsoleMessage.h" 48 #include "core/inspector/ConsoleMessage.h"
57 #include "core/inspector/InspectorInstrumentation.h" 49 #include "core/inspector/InspectorInstrumentation.h"
58 #include "core/inspector/InspectorTraceEvents.h" 50 #include "core/inspector/InspectorTraceEvents.h"
59 #include "core/inspector/MainThreadDebugger.h" 51 #include "core/inspector/MainThreadDebugger.h"
60 #include "core/loader/DocumentLoader.h" 52 #include "core/loader/DocumentLoader.h"
61 #include "core/loader/FrameLoader.h" 53 #include "core/loader/FrameLoader.h"
62 #include "core/loader/NavigationScheduler.h" 54 #include "core/loader/NavigationScheduler.h"
63 #include "core/loader/ProgressTracker.h" 55 #include "core/loader/ProgressTracker.h"
64 #include "core/plugins/PluginView.h" 56 #include "core/plugins/PluginView.h"
65 #include "platform/FrameViewBase.h" 57 #include "platform/FrameViewBase.h"
66 #include "platform/Histogram.h" 58 #include "platform/Histogram.h"
67 #include "platform/UserGestureIndicator.h" 59 #include "platform/UserGestureIndicator.h"
68 #include "platform/instrumentation/tracing/TraceEvent.h" 60 #include "platform/instrumentation/tracing/TraceEvent.h"
69 #include "platform/weborigin/SecurityOrigin.h" 61 #include "platform/weborigin/SecurityOrigin.h"
70 #include "public/platform/Platform.h"
71 #include "wtf/CurrentTime.h" 62 #include "wtf/CurrentTime.h"
72 #include "wtf/StdLibExtras.h" 63 #include "wtf/StdLibExtras.h"
73 #include "wtf/StringExtras.h" 64 #include "wtf/StringExtras.h"
74 #include "wtf/text/CString.h" 65 #include "wtf/text/CString.h"
75 #include "wtf/text/StringBuilder.h" 66 #include "wtf/text/StringBuilder.h"
76 #include "wtf/text/TextPosition.h"
77 67
78 namespace blink { 68 namespace blink {
79 69
80 ScriptController::ScriptController(LocalFrame* frame)
81 : m_windowProxyManager(LocalWindowProxyManager::create(*frame)) {}
82
83 DEFINE_TRACE(ScriptController) { 70 DEFINE_TRACE(ScriptController) {
71 visitor->trace(m_frame);
84 visitor->trace(m_windowProxyManager); 72 visitor->trace(m_windowProxyManager);
85 } 73 }
86 74
87 void ScriptController::clearForClose() { 75 void ScriptController::clearForClose() {
88 m_windowProxyManager->clearForClose(); 76 m_windowProxyManager->clearForClose();
89 MainThreadDebugger::instance()->didClearContextsForFrame(frame()); 77 MainThreadDebugger::instance()->didClearContextsForFrame(frame());
90 } 78 }
91 79
92 void ScriptController::updateSecurityOrigin(SecurityOrigin* securityOrigin) { 80 void ScriptController::updateSecurityOrigin(SecurityOrigin* securityOrigin) {
93 m_windowProxyManager->updateSecurityOrigin(securityOrigin); 81 m_windowProxyManager->updateSecurityOrigin(securityOrigin);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 134
147 if (!v8Call(V8ScriptRunner::runCompiledScript(isolate(), script, 135 if (!v8Call(V8ScriptRunner::runCompiledScript(isolate(), script,
148 frame()->document()), 136 frame()->document()),
149 result, tryCatch)) 137 result, tryCatch))
150 return result; 138 return result;
151 } 139 }
152 140
153 return result; 141 return result;
154 } 142 }
155 143
156 LocalWindowProxy* ScriptController::windowProxy(DOMWrapperWorld& world) {
157 LocalWindowProxy* windowProxy = m_windowProxyManager->windowProxy(world);
158 windowProxy->initializeIfNeeded();
159 return windowProxy;
160 }
161
162 bool ScriptController::shouldBypassMainWorldCSP() { 144 bool ScriptController::shouldBypassMainWorldCSP() {
163 v8::HandleScope handleScope(isolate()); 145 v8::HandleScope handleScope(isolate());
164 v8::Local<v8::Context> context = isolate()->GetCurrentContext(); 146 v8::Local<v8::Context> context = isolate()->GetCurrentContext();
165 if (context.IsEmpty() || !toLocalDOMWindow(context)) 147 if (context.IsEmpty() || !toLocalDOMWindow(context))
166 return false; 148 return false;
167 DOMWrapperWorld& world = DOMWrapperWorld::current(isolate()); 149 DOMWrapperWorld& world = DOMWrapperWorld::current(isolate());
168 return world.isIsolatedWorld() ? world.isolatedWorldHasContentSecurityPolicy() 150 return world.isIsolatedWorld() ? world.isolatedWorldHasContentSecurityPolicy()
169 : false; 151 : false;
170 } 152 }
171 153
172 TextPosition ScriptController::eventHandlerPosition() const { 154 TextPosition ScriptController::eventHandlerPosition() const {
173 ScriptableDocumentParser* parser = 155 ScriptableDocumentParser* parser =
174 frame()->document()->scriptableDocumentParser(); 156 frame()->document()->scriptableDocumentParser();
175 if (parser) 157 if (parser)
176 return parser->textPosition(); 158 return parser->textPosition();
177 return TextPosition::minimumPosition(); 159 return TextPosition::minimumPosition();
178 } 160 }
179 161
180 void ScriptController::enableEval() { 162 void ScriptController::enableEval() {
181 v8::HandleScope handleScope(isolate()); 163 v8::HandleScope handleScope(isolate());
182 v8::Local<v8::Context> v8Context = 164 v8::Local<v8::Context> v8Context =
183 m_windowProxyManager->mainWorldProxy()->contextIfInitialized(); 165 m_windowProxyManager->mainWorldProxyMaybeUninitialized()
166 ->contextIfInitialized();
184 if (v8Context.IsEmpty()) 167 if (v8Context.IsEmpty())
185 return; 168 return;
186 v8Context->AllowCodeGenerationFromStrings(true); 169 v8Context->AllowCodeGenerationFromStrings(true);
187 } 170 }
188 171
189 void ScriptController::disableEval(const String& errorMessage) { 172 void ScriptController::disableEval(const String& errorMessage) {
190 v8::HandleScope handleScope(isolate()); 173 v8::HandleScope handleScope(isolate());
191 v8::Local<v8::Context> v8Context = 174 v8::Local<v8::Context> v8Context =
192 m_windowProxyManager->mainWorldProxy()->contextIfInitialized(); 175 m_windowProxyManager->mainWorldProxyMaybeUninitialized()
176 ->contextIfInitialized();
193 if (v8Context.IsEmpty()) 177 if (v8Context.IsEmpty())
194 return; 178 return;
195 v8Context->AllowCodeGenerationFromStrings(false); 179 v8Context->AllowCodeGenerationFromStrings(false);
196 v8Context->SetErrorMessageForCodeGenerationFromStrings( 180 v8Context->SetErrorMessageForCodeGenerationFromStrings(
197 v8String(isolate(), errorMessage)); 181 v8String(isolate(), errorMessage));
198 } 182 }
199 183
200 PassRefPtr<SharedPersistent<v8::Object>> ScriptController::createPluginWrapper( 184 PassRefPtr<SharedPersistent<v8::Object>> ScriptController::createPluginWrapper(
201 FrameViewBase* frameViewBase) { 185 FrameViewBase* frameViewBase) {
202 DCHECK(frameViewBase); 186 DCHECK(frameViewBase);
(...skipping 27 matching lines...) Expand all
230 } 214 }
231 215
232 void ScriptController::clearWindowProxy() { 216 void ScriptController::clearWindowProxy() {
233 // V8 binding expects ScriptController::clearWindowProxy only be called when a 217 // V8 binding expects ScriptController::clearWindowProxy only be called when a
234 // frame is loading a new page. This creates a new context for the new page. 218 // frame is loading a new page. This creates a new context for the new page.
235 m_windowProxyManager->clearForNavigation(); 219 m_windowProxyManager->clearForNavigation();
236 MainThreadDebugger::instance()->didClearContextsForFrame(frame()); 220 MainThreadDebugger::instance()->didClearContextsForFrame(frame());
237 } 221 }
238 222
239 void ScriptController::updateDocument() { 223 void ScriptController::updateDocument() {
240 m_windowProxyManager->mainWorldProxy()->updateDocument(); 224 m_windowProxyManager->mainWorldProxyMaybeUninitialized()->updateDocument();
241 } 225 }
242 226
243 bool ScriptController::executeScriptIfJavaScriptURL(const KURL& url, 227 bool ScriptController::executeScriptIfJavaScriptURL(const KURL& url,
244 Element* element) { 228 Element* element) {
245 if (!url.protocolIsJavaScript()) 229 if (!url.protocolIsJavaScript())
246 return false; 230 return false;
247 231
248 const int javascriptSchemeLength = sizeof("javascript:") - 1; 232 const int javascriptSchemeLength = sizeof("javascript:") - 1;
249 String scriptSource = decodeURLEscapeSequences(url.getString()) 233 String scriptSource = decodeURLEscapeSequences(url.getString())
250 .substring(javascriptSchemeLength); 234 .substring(javascriptSchemeLength);
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 for (size_t i = 0; i < resultArray->Length(); ++i) { 359 for (size_t i = 0; i < resultArray->Length(); ++i) {
376 v8::Local<v8::Value> value; 360 v8::Local<v8::Value> value;
377 if (!resultArray->Get(scriptState->context(), i).ToLocal(&value)) 361 if (!resultArray->Get(scriptState->context(), i).ToLocal(&value))
378 return; 362 return;
379 results->push_back(value); 363 results->push_back(value);
380 } 364 }
381 } 365 }
382 } 366 }
383 367
384 } // namespace blink 368 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698