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

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

Issue 451013003: Rename V8WindowShell to WindowProxy (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
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 28 matching lines...) Expand all
39 #include "bindings/core/v8/ScriptSourceCode.h" 39 #include "bindings/core/v8/ScriptSourceCode.h"
40 #include "bindings/core/v8/ScriptValue.h" 40 #include "bindings/core/v8/ScriptValue.h"
41 #include "bindings/core/v8/V8Binding.h" 41 #include "bindings/core/v8/V8Binding.h"
42 #include "bindings/core/v8/V8Event.h" 42 #include "bindings/core/v8/V8Event.h"
43 #include "bindings/core/v8/V8GCController.h" 43 #include "bindings/core/v8/V8GCController.h"
44 #include "bindings/core/v8/V8HTMLElement.h" 44 #include "bindings/core/v8/V8HTMLElement.h"
45 #include "bindings/core/v8/V8NPObject.h" 45 #include "bindings/core/v8/V8NPObject.h"
46 #include "bindings/core/v8/V8PerContextData.h" 46 #include "bindings/core/v8/V8PerContextData.h"
47 #include "bindings/core/v8/V8ScriptRunner.h" 47 #include "bindings/core/v8/V8ScriptRunner.h"
48 #include "bindings/core/v8/V8Window.h" 48 #include "bindings/core/v8/V8Window.h"
49 #include "bindings/core/v8/V8WindowShell.h" 49 #include "bindings/core/v8/WindowProxy.h"
50 #include "bindings/core/v8/npruntime_impl.h" 50 #include "bindings/core/v8/npruntime_impl.h"
51 #include "bindings/core/v8/npruntime_priv.h" 51 #include "bindings/core/v8/npruntime_priv.h"
52 #include "core/dom/Document.h" 52 #include "core/dom/Document.h"
53 #include "core/dom/Node.h" 53 #include "core/dom/Node.h"
54 #include "core/dom/ScriptableDocumentParser.h" 54 #include "core/dom/ScriptableDocumentParser.h"
55 #include "core/events/Event.h" 55 #include "core/events/Event.h"
56 #include "core/events/EventListener.h" 56 #include "core/events/EventListener.h"
57 #include "core/frame/LocalDOMWindow.h" 57 #include "core/frame/LocalDOMWindow.h"
58 #include "core/frame/LocalFrame.h" 58 #include "core/frame/LocalFrame.h"
59 #include "core/frame/Settings.h" 59 #include "core/frame/Settings.h"
(...skipping 27 matching lines...) Expand all
87 if (!frame) 87 if (!frame)
88 return false; 88 return false;
89 v8::Isolate* isolate = toIsolate(frame); 89 v8::Isolate* isolate = toIsolate(frame);
90 return !isolate->InContext() || BindingSecurity::shouldAllowAccessToFrame(is olate, frame); 90 return !isolate->InContext() || BindingSecurity::shouldAllowAccessToFrame(is olate, frame);
91 } 91 }
92 92
93 ScriptController::ScriptController(LocalFrame* frame) 93 ScriptController::ScriptController(LocalFrame* frame)
94 : m_frame(frame) 94 : m_frame(frame)
95 , m_sourceURL(0) 95 , m_sourceURL(0)
96 , m_isolate(v8::Isolate::GetCurrent()) 96 , m_isolate(v8::Isolate::GetCurrent())
97 , m_windowShell(V8WindowShell::create(frame, DOMWrapperWorld::mainWorld(), m _isolate)) 97 , m_windowProxy(WindowProxy::create(frame, DOMWrapperWorld::mainWorld(), m_i solate))
98 , m_windowScriptNPObject(0) 98 , m_windowScriptNPObject(0)
99 { 99 {
100 } 100 }
101 101
102 ScriptController::~ScriptController() 102 ScriptController::~ScriptController()
103 { 103 {
104 // V8WindowShell::clearForClose() must be invoked before destruction starts. 104 // WindowProxy::clearForClose() must be invoked before destruction starts.
105 ASSERT(!m_windowShell->isContextInitialized()); 105 ASSERT(!m_windowProxy->isContextInitialized());
106 } 106 }
107 107
108 void ScriptController::clearScriptObjects() 108 void ScriptController::clearScriptObjects()
109 { 109 {
110 PluginObjectMap::iterator it = m_pluginObjects.begin(); 110 PluginObjectMap::iterator it = m_pluginObjects.begin();
111 for (; it != m_pluginObjects.end(); ++it) { 111 for (; it != m_pluginObjects.end(); ++it) {
112 _NPN_UnregisterObject(it->value); 112 _NPN_UnregisterObject(it->value);
113 _NPN_ReleaseObject(it->value); 113 _NPN_ReleaseObject(it->value);
114 } 114 }
115 m_pluginObjects.clear(); 115 m_pluginObjects.clear();
116 116
117 if (m_windowScriptNPObject) { 117 if (m_windowScriptNPObject) {
118 // Dispose of the underlying V8 object before releasing our reference 118 // Dispose of the underlying V8 object before releasing our reference
119 // to it, so that if a plugin fails to release it properly we will 119 // to it, so that if a plugin fails to release it properly we will
120 // only leak the NPObject wrapper, not the object, its document, or 120 // only leak the NPObject wrapper, not the object, its document, or
121 // anything else they reference. 121 // anything else they reference.
122 disposeUnderlyingV8Object(m_windowScriptNPObject, m_isolate); 122 disposeUnderlyingV8Object(m_windowScriptNPObject, m_isolate);
123 _NPN_ReleaseObject(m_windowScriptNPObject); 123 _NPN_ReleaseObject(m_windowScriptNPObject);
124 m_windowScriptNPObject = 0; 124 m_windowScriptNPObject = 0;
125 } 125 }
126 } 126 }
127 127
128 void ScriptController::clearForClose() 128 void ScriptController::clearForClose()
129 { 129 {
130 double start = currentTime(); 130 double start = currentTime();
131 m_windowShell->clearForClose(); 131 m_windowProxy->clearForClose();
132 for (IsolatedWorldMap::iterator iter = m_isolatedWorlds.begin(); iter != m_i solatedWorlds.end(); ++iter) 132 for (IsolatedWorldMap::iterator iter = m_isolatedWorlds.begin(); iter != m_i solatedWorlds.end(); ++iter)
133 iter->value->clearForClose(); 133 iter->value->clearForClose();
134 blink::Platform::current()->histogramCustomCounts("WebCore.ScriptController. clearForClose", (currentTime() - start) * 1000, 0, 10000, 50); 134 blink::Platform::current()->histogramCustomCounts("WebCore.ScriptController. clearForClose", (currentTime() - start) * 1000, 0, 10000, 50);
135 } 135 }
136 136
137 void ScriptController::updateSecurityOrigin(SecurityOrigin* origin) 137 void ScriptController::updateSecurityOrigin(SecurityOrigin* origin)
138 { 138 {
139 m_windowShell->updateSecurityOrigin(origin); 139 m_windowProxy->updateSecurityOrigin(origin);
140 } 140 }
141 141
142 v8::Local<v8::Value> ScriptController::callFunction(v8::Handle<v8::Function> fun ction, v8::Handle<v8::Value> receiver, int argc, v8::Handle<v8::Value> info[]) 142 v8::Local<v8::Value> ScriptController::callFunction(v8::Handle<v8::Function> fun ction, v8::Handle<v8::Value> receiver, int argc, v8::Handle<v8::Value> info[])
143 { 143 {
144 // Keep LocalFrame (and therefore ScriptController) alive. 144 // Keep LocalFrame (and therefore ScriptController) alive.
145 RefPtr<LocalFrame> protect(m_frame); 145 RefPtr<LocalFrame> protect(m_frame);
146 return ScriptController::callFunction(m_frame->document(), function, receive r, argc, info, m_isolate); 146 return ScriptController::callFunction(m_frame->document(), function, receive r, argc, info, m_isolate);
147 } 147 }
148 148
149 v8::Local<v8::Value> ScriptController::callFunction(ExecutionContext* context, v 8::Handle<v8::Function> function, v8::Handle<v8::Value> receiver, int argc, v8:: Handle<v8::Value> info[], v8::Isolate* isolate) 149 v8::Local<v8::Value> ScriptController::callFunction(ExecutionContext* context, v 8::Handle<v8::Function> function, v8::Handle<v8::Value> receiver, int argc, v8:: Handle<v8::Value> info[], v8::Isolate* isolate)
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 } 195 }
196 196
197 InspectorInstrumentation::didEvaluateScript(cookie); 197 InspectorInstrumentation::didEvaluateScript(cookie);
198 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "Update Counters", "data", InspectorUpdateCountersEvent::data()); 198 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "Update Counters", "data", InspectorUpdateCountersEvent::data());
199 199
200 return result; 200 return result;
201 } 201 }
202 202
203 bool ScriptController::initializeMainWorld() 203 bool ScriptController::initializeMainWorld()
204 { 204 {
205 if (m_windowShell->isContextInitialized()) 205 if (m_windowProxy->isContextInitialized())
206 return false; 206 return false;
207 return windowShell(DOMWrapperWorld::mainWorld())->isContextInitialized(); 207 return windowProxy(DOMWrapperWorld::mainWorld())->isContextInitialized();
208 } 208 }
209 209
210 V8WindowShell* ScriptController::existingWindowShell(DOMWrapperWorld& world) 210 WindowProxy* ScriptController::existingWindowProxy(DOMWrapperWorld& world)
211 { 211 {
212 if (world.isMainWorld()) 212 if (world.isMainWorld())
213 return m_windowShell->isContextInitialized() ? m_windowShell.get() : 0; 213 return m_windowProxy->isContextInitialized() ? m_windowProxy.get() : 0;
214 214
215 IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId()); 215 IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId());
216 if (iter == m_isolatedWorlds.end()) 216 if (iter == m_isolatedWorlds.end())
217 return 0; 217 return 0;
218 return iter->value->isContextInitialized() ? iter->value.get() : 0; 218 return iter->value->isContextInitialized() ? iter->value.get() : 0;
219 } 219 }
220 220
221 V8WindowShell* ScriptController::windowShell(DOMWrapperWorld& world) 221 WindowProxy* ScriptController::windowProxy(DOMWrapperWorld& world)
222 { 222 {
223 V8WindowShell* shell = 0; 223 WindowProxy* windowProxy = 0;
224 if (world.isMainWorld()) { 224 if (world.isMainWorld()) {
225 shell = m_windowShell.get(); 225 windowProxy = m_windowProxy.get();
226 } else { 226 } else {
227 IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId()) ; 227 IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId()) ;
228 if (iter != m_isolatedWorlds.end()) { 228 if (iter != m_isolatedWorlds.end()) {
229 shell = iter->value.get(); 229 windowProxy = iter->value.get();
230 } else { 230 } else {
231 OwnPtr<V8WindowShell> isolatedWorldShell = V8WindowShell::create(m_f rame, world, m_isolate); 231 OwnPtr<WindowProxy> isolatedWorldWindowProxy = WindowProxy::create(m _frame, world, m_isolate);
232 shell = isolatedWorldShell.get(); 232 windowProxy = isolatedWorldWindowProxy.get();
233 m_isolatedWorlds.set(world.worldId(), isolatedWorldShell.release()); 233 m_isolatedWorlds.set(world.worldId(), isolatedWorldWindowProxy.relea se());
234 } 234 }
235 } 235 }
236 if (!shell->isContextInitialized() && shell->initializeIfNeeded() && world.i sMainWorld()) 236 if (!windowProxy->isContextInitialized() && windowProxy->initializeIfNeeded( ) && world.isMainWorld())
237 m_frame->loader().dispatchDidClearWindowObjectInMainWorld(); 237 m_frame->loader().dispatchDidClearWindowObjectInMainWorld();
238 return shell; 238 return windowProxy;
239 } 239 }
240 240
241 bool ScriptController::shouldBypassMainWorldCSP() 241 bool ScriptController::shouldBypassMainWorldCSP()
242 { 242 {
243 v8::Handle<v8::Context> context = m_isolate->GetCurrentContext(); 243 v8::Handle<v8::Context> context = m_isolate->GetCurrentContext();
244 if (context.IsEmpty() || !toDOMWindow(context)) 244 if (context.IsEmpty() || !toDOMWindow(context))
245 return false; 245 return false;
246 DOMWrapperWorld& world = DOMWrapperWorld::current(m_isolate); 246 DOMWrapperWorld& world = DOMWrapperWorld::current(m_isolate);
247 return world.isIsolatedWorld() ? world.isolatedWorldHasContentSecurityPolicy () : false; 247 return world.isIsolatedWorld() ? world.isolatedWorldHasContentSecurityPolicy () : false;
248 } 248 }
(...skipping 15 matching lines...) Expand all
264 264
265 ScriptState::Scope scope(scriptState); 265 ScriptState::Scope scope(scriptState);
266 v8::Handle<v8::Object> value = createV8ObjectForNPObject(object, 0, m_isolat e); 266 v8::Handle<v8::Object> value = createV8ObjectForNPObject(object, 0, m_isolat e);
267 267
268 // Attach to the global object. 268 // Attach to the global object.
269 scriptState->context()->Global()->Set(v8String(m_isolate, key), value); 269 scriptState->context()->Global()->Set(v8String(m_isolate, key), value);
270 } 270 }
271 271
272 void ScriptController::enableEval() 272 void ScriptController::enableEval()
273 { 273 {
274 if (!m_windowShell->isContextInitialized()) 274 if (!m_windowProxy->isContextInitialized())
275 return; 275 return;
276 v8::HandleScope handleScope(m_isolate); 276 v8::HandleScope handleScope(m_isolate);
277 m_windowShell->context()->AllowCodeGenerationFromStrings(true); 277 m_windowProxy->context()->AllowCodeGenerationFromStrings(true);
278 } 278 }
279 279
280 void ScriptController::disableEval(const String& errorMessage) 280 void ScriptController::disableEval(const String& errorMessage)
281 { 281 {
282 if (!m_windowShell->isContextInitialized()) 282 if (!m_windowProxy->isContextInitialized())
283 return; 283 return;
284 v8::HandleScope handleScope(m_isolate); 284 v8::HandleScope handleScope(m_isolate);
285 v8::Local<v8::Context> v8Context = m_windowShell->context(); 285 v8::Local<v8::Context> v8Context = m_windowProxy->context();
286 v8Context->AllowCodeGenerationFromStrings(false); 286 v8Context->AllowCodeGenerationFromStrings(false);
287 v8Context->SetErrorMessageForCodeGenerationFromStrings(v8String(m_isolate, e rrorMessage)); 287 v8Context->SetErrorMessageForCodeGenerationFromStrings(v8String(m_isolate, e rrorMessage));
288 } 288 }
289 289
290 PassRefPtr<SharedPersistent<v8::Object> > ScriptController::createPluginWrapper( Widget* widget) 290 PassRefPtr<SharedPersistent<v8::Object> > ScriptController::createPluginWrapper( Widget* widget)
291 { 291 {
292 ASSERT(widget); 292 ASSERT(widget);
293 293
294 if (!widget->isPluginView()) 294 if (!widget->isPluginView())
295 return nullptr; 295 return nullptr;
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 409
410 ScriptState::Scope scope(scriptState); 410 ScriptState::Scope scope(scriptState);
411 LocalDOMWindow* window = m_frame->domWindow(); 411 LocalDOMWindow* window = m_frame->domWindow();
412 v8::Handle<v8::Value> v8plugin = toV8(plugin, scriptState->context()->Global (), scriptState->isolate()); 412 v8::Handle<v8::Value> v8plugin = toV8(plugin, scriptState->context()->Global (), scriptState->isolate());
413 if (!v8plugin->IsObject()) 413 if (!v8plugin->IsObject())
414 return createNoScriptObject(); 414 return createNoScriptObject();
415 415
416 return npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(v8plugin), win dow, scriptState->isolate()); 416 return npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(v8plugin), win dow, scriptState->isolate());
417 } 417 }
418 418
419 void ScriptController::clearWindowShell() 419 void ScriptController::clearWindowProxy()
420 { 420 {
421 double start = currentTime(); 421 double start = currentTime();
422 // V8 binding expects ScriptController::clearWindowShell only be called 422 // V8 binding expects ScriptController::clearWindowProxy only be called
423 // when a frame is loading a new page. This creates a new context for the ne w page. 423 // when a frame is loading a new page. This creates a new context for the ne w page.
424 424
425 // The V8 context must be available for |clearScriptObjects()|. 425 // The V8 context must be available for |clearScriptObjects()|.
426 // The below call must be before |clearForNavigation()| which disposes the V 8 context. 426 // The below call must be before |clearForNavigation()| which disposes the V 8 context.
427 clearScriptObjects(); 427 clearScriptObjects();
428 m_windowShell->clearForNavigation(); 428 m_windowProxy->clearForNavigation();
429 for (IsolatedWorldMap::iterator iter = m_isolatedWorlds.begin(); iter != m_i solatedWorlds.end(); ++iter) 429 for (IsolatedWorldMap::iterator iter = m_isolatedWorlds.begin(); iter != m_i solatedWorlds.end(); ++iter)
430 iter->value->clearForNavigation(); 430 iter->value->clearForNavigation();
431 blink::Platform::current()->histogramCustomCounts("WebCore.ScriptController. clearWindowShell", (currentTime() - start) * 1000, 0, 10000, 50); 431 blink::Platform::current()->histogramCustomCounts("WebCore.ScriptController. clearWindowProxy", (currentTime() - start) * 1000, 0, 10000, 50);
432 } 432 }
433 433
434 void ScriptController::setCaptureCallStackForUncaughtExceptions(bool value) 434 void ScriptController::setCaptureCallStackForUncaughtExceptions(bool value)
435 { 435 {
436 v8::V8::SetCaptureStackTraceForUncaughtExceptions(value, ScriptCallStack::ma xCallStackSizeToCapture, stackTraceOptions); 436 v8::V8::SetCaptureStackTraceForUncaughtExceptions(value, ScriptCallStack::ma xCallStackSizeToCapture, stackTraceOptions);
437 } 437 }
438 438
439 void ScriptController::collectIsolatedContexts(Vector<std::pair<ScriptState*, Se curityOrigin*> >& result) 439 void ScriptController::collectIsolatedContexts(Vector<std::pair<ScriptState*, Se curityOrigin*> >& result)
440 { 440 {
441 for (IsolatedWorldMap::iterator it = m_isolatedWorlds.begin(); it != m_isola tedWorlds.end(); ++it) { 441 for (IsolatedWorldMap::iterator it = m_isolatedWorlds.begin(); it != m_isola tedWorlds.end(); ++it) {
442 V8WindowShell* isolatedWorldShell = it->value.get(); 442 WindowProxy* isolatedWorldWindowProxy = it->value.get();
443 SecurityOrigin* origin = isolatedWorldShell->world().isolatedWorldSecuri tyOrigin(); 443 SecurityOrigin* origin = isolatedWorldWindowProxy->world().isolatedWorld SecurityOrigin();
444 if (!origin) 444 if (!origin)
445 continue; 445 continue;
446 if (!isolatedWorldShell->isContextInitialized()) 446 if (!isolatedWorldWindowProxy->isContextInitialized())
447 continue; 447 continue;
448 result.append(std::pair<ScriptState*, SecurityOrigin*>(isolatedWorldShel l->scriptState(), origin)); 448 result.append(std::pair<ScriptState*, SecurityOrigin*>(isolatedWorldWind owProxy->scriptState(), origin));
449 } 449 }
450 } 450 }
451 451
452 void ScriptController::setWorldDebugId(int worldId, int debuggerId) 452 void ScriptController::setWorldDebugId(int worldId, int debuggerId)
453 { 453 {
454 ASSERT(debuggerId > 0); 454 ASSERT(debuggerId > 0);
455 bool isMainWorld = worldId == MainWorldId; 455 bool isMainWorld = worldId == MainWorldId;
456 V8WindowShell* shell = 0; 456 WindowProxy* windowProxy = 0;
457 if (isMainWorld) { 457 if (isMainWorld) {
458 shell = m_windowShell.get(); 458 windowProxy = m_windowProxy.get();
459 } else { 459 } else {
460 IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(worldId); 460 IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(worldId);
461 if (iter != m_isolatedWorlds.end()) 461 if (iter != m_isolatedWorlds.end())
462 shell = iter->value.get(); 462 windowProxy = iter->value.get();
463 } 463 }
464 if (!shell || !shell->isContextInitialized()) 464 if (!windowProxy || !windowProxy->isContextInitialized())
465 return; 465 return;
466 v8::HandleScope scope(m_isolate); 466 v8::HandleScope scope(m_isolate);
467 v8::Local<v8::Context> context = shell->context(); 467 v8::Local<v8::Context> context = windowProxy->context();
468 const char* worldName = isMainWorld ? "page" : "injected"; 468 const char* worldName = isMainWorld ? "page" : "injected";
469 V8PerContextDebugData::setContextDebugData(context, worldName, debuggerId); 469 V8PerContextDebugData::setContextDebugData(context, worldName, debuggerId);
470 } 470 }
471 471
472 void ScriptController::updateDocument() 472 void ScriptController::updateDocument()
473 { 473 {
474 // For an uninitialized main window shell, do not incur the cost of context initialization. 474 // For an uninitialized main window windowProxy, do not incur the cost of co ntext initialization.
475 if (!m_windowShell->isGlobalInitialized()) 475 if (!m_windowProxy->isGlobalInitialized())
476 return; 476 return;
477 477
478 if (!initializeMainWorld()) 478 if (!initializeMainWorld())
479 windowShell(DOMWrapperWorld::mainWorld())->updateDocument(); 479 windowProxy(DOMWrapperWorld::mainWorld())->updateDocument();
480 } 480 }
481 481
482 void ScriptController::namedItemAdded(HTMLDocument* doc, const AtomicString& nam e) 482 void ScriptController::namedItemAdded(HTMLDocument* doc, const AtomicString& nam e)
483 { 483 {
484 windowShell(DOMWrapperWorld::mainWorld())->namedItemAdded(doc, name); 484 windowProxy(DOMWrapperWorld::mainWorld())->namedItemAdded(doc, name);
485 } 485 }
486 486
487 void ScriptController::namedItemRemoved(HTMLDocument* doc, const AtomicString& n ame) 487 void ScriptController::namedItemRemoved(HTMLDocument* doc, const AtomicString& n ame)
488 { 488 {
489 windowShell(DOMWrapperWorld::mainWorld())->namedItemRemoved(doc, name); 489 windowProxy(DOMWrapperWorld::mainWorld())->namedItemRemoved(doc, name);
490 } 490 }
491 491
492 static bool isInPrivateScriptIsolateWorld(v8::Isolate* isolate) 492 static bool isInPrivateScriptIsolateWorld(v8::Isolate* isolate)
493 { 493 {
494 v8::Handle<v8::Context> context = isolate->GetCurrentContext(); 494 v8::Handle<v8::Context> context = isolate->GetCurrentContext();
495 return !context.IsEmpty() && toDOMWindow(context) && DOMWrapperWorld::curren t(isolate).isPrivateScriptIsolatedWorld(); 495 return !context.IsEmpty() && toDOMWindow(context) && DOMWrapperWorld::curren t(isolate).isPrivateScriptIsolatedWorld();
496 } 496 }
497 497
498 bool ScriptController::canExecuteScripts(ReasonForCallingCanExecuteScripts reaso n) 498 bool ScriptController::canExecuteScripts(ReasonForCallingCanExecuteScripts reaso n)
499 { 499 {
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 return v8::Local<v8::Value>(); 615 return v8::Local<v8::Value>();
616 616
617 return handleScope.Escape(object); 617 return handleScope.Escape(object);
618 } 618 }
619 619
620 void ScriptController::executeScriptInIsolatedWorld(int worldID, const Vector<Sc riptSourceCode>& sources, int extensionGroup, Vector<v8::Local<v8::Value> >* res ults) 620 void ScriptController::executeScriptInIsolatedWorld(int worldID, const Vector<Sc riptSourceCode>& sources, int extensionGroup, Vector<v8::Local<v8::Value> >* res ults)
621 { 621 {
622 ASSERT(worldID > 0); 622 ASSERT(worldID > 0);
623 623
624 RefPtr<DOMWrapperWorld> world = DOMWrapperWorld::ensureIsolatedWorld(worldID , extensionGroup); 624 RefPtr<DOMWrapperWorld> world = DOMWrapperWorld::ensureIsolatedWorld(worldID , extensionGroup);
625 V8WindowShell* isolatedWorldShell = windowShell(*world); 625 WindowProxy* isolatedWorldWindowProxy = windowProxy(*world);
626 if (!isolatedWorldShell->isContextInitialized()) 626 if (!isolatedWorldWindowProxy->isContextInitialized())
627 return; 627 return;
628 628
629 ScriptState* scriptState = isolatedWorldShell->scriptState(); 629 ScriptState* scriptState = isolatedWorldWindowProxy->scriptState();
630 v8::EscapableHandleScope handleScope(scriptState->isolate()); 630 v8::EscapableHandleScope handleScope(scriptState->isolate());
631 ScriptState::Scope scope(scriptState); 631 ScriptState::Scope scope(scriptState);
632 v8::Local<v8::Array> resultArray = v8::Array::New(m_isolate, sources.size()) ; 632 v8::Local<v8::Array> resultArray = v8::Array::New(m_isolate, sources.size()) ;
633 633
634 for (size_t i = 0; i < sources.size(); ++i) { 634 for (size_t i = 0; i < sources.size(); ++i) {
635 v8::Local<v8::Value> evaluationResult = executeScriptAndReturnValue(scri ptState->context(), sources[i]); 635 v8::Local<v8::Value> evaluationResult = executeScriptAndReturnValue(scri ptState->context(), sources[i]);
636 if (evaluationResult.IsEmpty()) 636 if (evaluationResult.IsEmpty())
637 evaluationResult = v8::Local<v8::Value>::New(m_isolate, v8::Undefine d(m_isolate)); 637 evaluationResult = v8::Local<v8::Value>::New(m_isolate, v8::Undefine d(m_isolate));
638 resultArray->Set(i, evaluationResult); 638 resultArray->Set(i, evaluationResult);
639 } 639 }
640 640
641 if (results) { 641 if (results) {
642 for (size_t i = 0; i < resultArray->Length(); ++i) 642 for (size_t i = 0; i < resultArray->Length(); ++i)
643 results->append(handleScope.Escape(resultArray->Get(i))); 643 results->append(handleScope.Escape(resultArray->Get(i)));
644 } 644 }
645 } 645 }
646 646
647 } // namespace blink 647 } // namespace blink
OLDNEW
« no previous file with comments | « Source/bindings/core/v8/ScriptController.h ('k') | Source/bindings/core/v8/ScriptEventListener.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698