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