OLD | NEW |
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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 #include "wtf/OwnPtr.h" | 59 #include "wtf/OwnPtr.h" |
60 #include "wtf/StringExtras.h" | 60 #include "wtf/StringExtras.h" |
61 #include "wtf/text/CString.h" | 61 #include "wtf/text/CString.h" |
62 #include <algorithm> | 62 #include <algorithm> |
63 #include <utility> | 63 #include <utility> |
64 #include <v8-debug.h> | 64 #include <v8-debug.h> |
65 #include <v8.h> | 65 #include <v8.h> |
66 | 66 |
67 namespace WebCore { | 67 namespace WebCore { |
68 | 68 |
69 static bool contextBeingInitialized = false; | |
70 | |
71 static void checkDocumentWrapper(v8::Handle<v8::Object> wrapper, Document* docum
ent) | 69 static void checkDocumentWrapper(v8::Handle<v8::Object> wrapper, Document* docum
ent) |
72 { | 70 { |
73 ASSERT(V8Document::toNative(wrapper) == document); | 71 ASSERT(V8Document::toNative(wrapper) == document); |
74 ASSERT(!document->isHTMLDocument() || (V8Document::toNative(v8::Handle<v8::O
bject>::Cast(wrapper->GetPrototype())) == document)); | 72 ASSERT(!document->isHTMLDocument() || (V8Document::toNative(v8::Handle<v8::O
bject>::Cast(wrapper->GetPrototype())) == document)); |
75 } | 73 } |
76 | 74 |
77 static void setInjectedScriptContextDebugId(v8::Handle<v8::Context> targetContex
t, int debugId) | 75 static void setInjectedScriptContextDebugId(v8::Handle<v8::Context> targetContex
t, int debugId) |
78 { | 76 { |
79 V8PerContextDebugData::setContextDebugData(targetContext, "injected", debugI
d); | 77 V8PerContextDebugData::setContextDebugData(targetContext, "injected", debugI
d); |
80 } | 78 } |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 // When a frame navigates to a new page, the inner window is cut off | 176 // When a frame navigates to a new page, the inner window is cut off |
179 // the outer window, and the outer window identify is preserved for | 177 // the outer window, and the outer window identify is preserved for |
180 // the frame. However, a new inner window is created for the new page. | 178 // the frame. However, a new inner window is created for the new page. |
181 // If there are JS code holds a closure to the old inner window, | 179 // If there are JS code holds a closure to the old inner window, |
182 // it won't be able to reach the outer window via its global object. | 180 // it won't be able to reach the outer window via its global object. |
183 bool V8WindowShell::initializeIfNeeded() | 181 bool V8WindowShell::initializeIfNeeded() |
184 { | 182 { |
185 if (m_perContextData) | 183 if (m_perContextData) |
186 return true; | 184 return true; |
187 | 185 |
188 ASSERT(!contextBeingInitialized); | 186 DOMWrapperWorld::setWorldOfInitializingWindow(m_world.get()); |
189 contextBeingInitialized = true; | |
190 bool result = initialize(); | 187 bool result = initialize(); |
191 contextBeingInitialized = false; | 188 DOMWrapperWorld::setWorldOfInitializingWindow(0); |
192 return result; | 189 return result; |
193 } | 190 } |
194 | 191 |
195 bool V8WindowShell::initialize() | 192 bool V8WindowShell::initialize() |
196 { | 193 { |
197 TRACE_EVENT0("v8", "V8WindowShell::initialize"); | 194 TRACE_EVENT0("v8", "V8WindowShell::initialize"); |
198 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "InitializeWindow"); | 195 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "InitializeWindow"); |
199 | 196 |
200 v8::HandleScope handleScope(m_isolate); | 197 v8::HandleScope handleScope(m_isolate); |
201 | 198 |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 | 491 |
495 void V8WindowShell::updateSecurityOrigin(SecurityOrigin* origin) | 492 void V8WindowShell::updateSecurityOrigin(SecurityOrigin* origin) |
496 { | 493 { |
497 ASSERT(m_world->isMainWorld()); | 494 ASSERT(m_world->isMainWorld()); |
498 if (!m_perContextData) | 495 if (!m_perContextData) |
499 return; | 496 return; |
500 v8::HandleScope handleScope(m_isolate); | 497 v8::HandleScope handleScope(m_isolate); |
501 setSecurityToken(origin); | 498 setSecurityToken(origin); |
502 } | 499 } |
503 | 500 |
504 bool V8WindowShell::contextHasCorrectPrototype(v8::Handle<v8::Context> context) | |
505 { | |
506 if (!isMainThread()) | |
507 return true; | |
508 // We're initializing the context, so it is not yet in a status where we can | |
509 // validate the context. | |
510 if (contextBeingInitialized) | |
511 return true; | |
512 return !!toDOMWindow(context); | |
513 } | |
514 | |
515 } // WebCore | 501 } // WebCore |
OLD | NEW |