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

Side by Side Diff: Source/bindings/v8/V8WindowShell.cpp

Issue 182903003: Make DOMWrapperWorld::current() callable from workers (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008, 2009, 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2008, 2009, 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 #include "wtf/text/CString.h" 60 #include "wtf/text/CString.h"
61 #include <algorithm> 61 #include <algorithm>
62 #include <utility> 62 #include <utility>
63 #include <v8-debug.h> 63 #include <v8-debug.h>
64 #include <v8.h> 64 #include <v8.h>
65 65
66 namespace WebCore { 66 namespace WebCore {
67 67
68 static bool contextBeingInitialized = false; 68 static bool contextBeingInitialized = false;
69 69
70 bool V8WindowShell::contextIsBeingInitialized()
71 {
72 return contextBeingInitialized;
73 }
74
70 static void checkDocumentWrapper(v8::Handle<v8::Object> wrapper, Document* docum ent) 75 static void checkDocumentWrapper(v8::Handle<v8::Object> wrapper, Document* docum ent)
71 { 76 {
72 ASSERT(V8Document::toNative(wrapper) == document); 77 ASSERT(V8Document::toNative(wrapper) == document);
73 ASSERT(!document->isHTMLDocument() || (V8Document::toNative(v8::Handle<v8::O bject>::Cast(wrapper->GetPrototype())) == document)); 78 ASSERT(!document->isHTMLDocument() || (V8Document::toNative(v8::Handle<v8::O bject>::Cast(wrapper->GetPrototype())) == document));
74 } 79 }
75 80
76 static void setInjectedScriptContextDebugId(v8::Handle<v8::Context> targetContex t, int debugId) 81 static void setInjectedScriptContextDebugId(v8::Handle<v8::Context> targetContex t, int debugId)
77 { 82 {
78 V8PerContextDebugData::setContextDebugData(targetContext, "injected", debugI d); 83 V8PerContextDebugData::setContextDebugData(targetContext, "injected", debugI d);
79 } 84 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 // the frame. However, a new inner window is created for the new page. 186 // the frame. However, a new inner window is created for the new page.
182 // If there are JS code holds a closure to the old inner window, 187 // If there are JS code holds a closure to the old inner window,
183 // it won't be able to reach the outer window via its global object. 188 // it won't be able to reach the outer window via its global object.
184 bool V8WindowShell::initializeIfNeeded() 189 bool V8WindowShell::initializeIfNeeded()
185 { 190 {
186 if (m_contextHolder) 191 if (m_contextHolder)
187 return true; 192 return true;
188 193
189 ASSERT(!contextBeingInitialized); 194 ASSERT(!contextBeingInitialized);
190 contextBeingInitialized = true; 195 contextBeingInitialized = true;
196 DOMWrapperWorld::setWorldOfInitializingWindow(m_world.get());
191 bool result = initialize(); 197 bool result = initialize();
192 contextBeingInitialized = false; 198 contextBeingInitialized = false;
199 DOMWrapperWorld::setWorldOfInitializingWindow(0);
193 return result; 200 return result;
194 } 201 }
195 202
196 bool V8WindowShell::initialize() 203 bool V8WindowShell::initialize()
197 { 204 {
198 TRACE_EVENT0("v8", "V8WindowShell::initialize"); 205 TRACE_EVENT0("v8", "V8WindowShell::initialize");
199 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "InitializeWindow"); 206 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "InitializeWindow");
200 207
201 v8::HandleScope handleScope(m_isolate); 208 v8::HandleScope handleScope(m_isolate);
202 209
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 512
506 void V8WindowShell::updateSecurityOrigin(SecurityOrigin* origin) 513 void V8WindowShell::updateSecurityOrigin(SecurityOrigin* origin)
507 { 514 {
508 ASSERT(m_world->isMainWorld()); 515 ASSERT(m_world->isMainWorld());
509 if (!m_contextHolder) 516 if (!m_contextHolder)
510 return; 517 return;
511 v8::HandleScope handleScope(m_isolate); 518 v8::HandleScope handleScope(m_isolate);
512 setSecurityToken(origin); 519 setSecurityToken(origin);
513 } 520 }
514 521
515 bool V8WindowShell::contextHasCorrectPrototype(v8::Handle<v8::Context> context)
516 {
517 if (!isMainThread())
518 return true;
519 // We're initializing the context, so it is not yet in a status where we can
520 // validate the context.
521 if (contextBeingInitialized)
522 return true;
523 return !!toDOMWindow(context);
524 }
525
526 } // WebCore 522 } // WebCore
OLDNEW
« Source/bindings/v8/DOMWrapperWorld.h ('K') | « Source/bindings/v8/V8WindowShell.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698