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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 #include "bindings/v8/V8ObjectConstructor.h" | 45 #include "bindings/v8/V8ObjectConstructor.h" |
46 #include "bindings/v8/V8PerContextData.h" | 46 #include "bindings/v8/V8PerContextData.h" |
47 #include "core/html/HTMLCollection.h" | 47 #include "core/html/HTMLCollection.h" |
48 #include "core/html/HTMLIFrameElement.h" | 48 #include "core/html/HTMLIFrameElement.h" |
49 #include "core/inspector/InspectorInstrumentation.h" | 49 #include "core/inspector/InspectorInstrumentation.h" |
50 #include "core/loader/DocumentLoader.h" | 50 #include "core/loader/DocumentLoader.h" |
51 #include "core/loader/FrameLoader.h" | 51 #include "core/loader/FrameLoader.h" |
52 #include "core/loader/FrameLoaderClient.h" | 52 #include "core/loader/FrameLoaderClient.h" |
53 #include "core/frame/LocalFrame.h" | 53 #include "core/frame/LocalFrame.h" |
54 #include "core/frame/csp/ContentSecurityPolicy.h" | 54 #include "core/frame/csp/ContentSecurityPolicy.h" |
| 55 #include "heap/Handle.h" |
55 #include "platform/TraceEvent.h" | 56 #include "platform/TraceEvent.h" |
56 #include "platform/weborigin/SecurityOrigin.h" | 57 #include "platform/weborigin/SecurityOrigin.h" |
57 #include "public/platform/Platform.h" | 58 #include "public/platform/Platform.h" |
58 #include "wtf/Assertions.h" | 59 #include "wtf/Assertions.h" |
59 #include "wtf/OwnPtr.h" | 60 #include "wtf/OwnPtr.h" |
60 #include "wtf/StringExtras.h" | 61 #include "wtf/StringExtras.h" |
61 #include "wtf/text/CString.h" | 62 #include "wtf/text/CString.h" |
62 #include <algorithm> | 63 #include <algorithm> |
63 #include <utility> | 64 #include <utility> |
64 #include <v8-debug.h> | 65 #include <v8-debug.h> |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 | 297 |
297 bool V8WindowShell::installDOMWindow() | 298 bool V8WindowShell::installDOMWindow() |
298 { | 299 { |
299 DOMWindow* window = m_frame->domWindow(); | 300 DOMWindow* window = m_frame->domWindow(); |
300 v8::Local<v8::Object> windowWrapper = V8ObjectConstructor::newInstance(V8Per
ContextData::from(m_perContextData->context())->constructorForType(&V8Window::wr
apperTypeInfo)); | 301 v8::Local<v8::Object> windowWrapper = V8ObjectConstructor::newInstance(V8Per
ContextData::from(m_perContextData->context())->constructorForType(&V8Window::wr
apperTypeInfo)); |
301 if (windowWrapper.IsEmpty()) | 302 if (windowWrapper.IsEmpty()) |
302 return false; | 303 return false; |
303 | 304 |
304 V8Window::installPerContextEnabledProperties(windowWrapper, window, m_isolat
e); | 305 V8Window::installPerContextEnabledProperties(windowWrapper, window, m_isolat
e); |
305 | 306 |
306 V8DOMWrapper::setNativeInfo(v8::Handle<v8::Object>::Cast(windowWrapper->GetP
rototype()), &V8Window::wrapperTypeInfo, window); | 307 V8DOMWrapper::setNativeInfoForHiddenWrapper(v8::Handle<v8::Object>::Cast(win
dowWrapper->GetPrototype()), &V8Window::wrapperTypeInfo, window); |
307 | 308 |
308 // Install the windowWrapper as the prototype of the innerGlobalObject. | 309 // Install the windowWrapper as the prototype of the innerGlobalObject. |
309 // The full structure of the global object is as follows: | 310 // The full structure of the global object is as follows: |
310 // | 311 // |
311 // outerGlobalObject (Empty object, remains after navigation) | 312 // outerGlobalObject (Empty object, remains after navigation) |
312 // -- has prototype --> innerGlobalObject (Holds global variables, changes
during navigation) | 313 // -- has prototype --> innerGlobalObject (Holds global variables, changes
during navigation) |
313 // -- has prototype --> DOMWindow instance | 314 // -- has prototype --> DOMWindow instance |
314 // -- has prototype --> Window.prototype | 315 // -- has prototype --> Window.prototype |
315 // -- has prototype --> Object.prototype | 316 // -- has prototype --> Object.prototype |
316 // | 317 // |
317 // Note: Much of this prototype structure is hidden from web content. The | 318 // Note: Much of this prototype structure is hidden from web content. The |
318 // outer, inner, and DOMWindow instance all appear to be the same | 319 // outer, inner, and DOMWindow instance all appear to be the same |
319 // JavaScript object. | 320 // JavaScript object. |
320 // | 321 // |
| 322 // Note: With Oilpan, the DOMWindow object is garbage collected. |
| 323 // Persistent references to this inner global object view of the DOMWi
ndow |
| 324 // aren't kept, as that would prevent the global object from ever bein
g released. |
| 325 // It is safe not to do so, as the wrapper for the DOMWindow being ins
talled here |
| 326 // already keeps a persistent reference, and it along with the inner g
lobal object |
| 327 // views of the DOMWindow will die together once that wrapper clears t
he persistent |
| 328 // reference. |
321 v8::Handle<v8::Object> innerGlobalObject = toInnerGlobalObject(m_perContextD
ata->context()); | 329 v8::Handle<v8::Object> innerGlobalObject = toInnerGlobalObject(m_perContextD
ata->context()); |
322 V8DOMWrapper::setNativeInfo(innerGlobalObject, &V8Window::wrapperTypeInfo, w
indow); | 330 V8DOMWrapper::setNativeInfoForHiddenWrapper(innerGlobalObject, &V8Window::wr
apperTypeInfo, window); |
323 innerGlobalObject->SetPrototype(windowWrapper); | 331 innerGlobalObject->SetPrototype(windowWrapper); |
324 V8DOMWrapper::associateObjectWithWrapper<V8Window>(PassRefPtr<DOMWindow>(win
dow), &V8Window::wrapperTypeInfo, windowWrapper, m_isolate, WrapperConfiguration
::Dependent); | 332 V8DOMWrapper::associateObjectWithWrapper<V8Window>(PassRefPtrWillBeRawPtr<DO
MWindow>(window), &V8Window::wrapperTypeInfo, windowWrapper, m_isolate, WrapperC
onfiguration::Dependent); |
325 return true; | 333 return true; |
326 } | 334 } |
327 | 335 |
328 void V8WindowShell::updateDocumentWrapper(v8::Handle<v8::Object> wrapper) | 336 void V8WindowShell::updateDocumentWrapper(v8::Handle<v8::Object> wrapper) |
329 { | 337 { |
330 ASSERT(m_world->isMainWorld()); | 338 ASSERT(m_world->isMainWorld()); |
331 m_document.set(m_isolate, wrapper); | 339 m_document.set(m_isolate, wrapper); |
332 } | 340 } |
333 | 341 |
334 void V8WindowShell::updateDocumentProperty() | 342 void V8WindowShell::updateDocumentProperty() |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 void V8WindowShell::updateSecurityOrigin(SecurityOrigin* origin) | 498 void V8WindowShell::updateSecurityOrigin(SecurityOrigin* origin) |
491 { | 499 { |
492 ASSERT(m_world->isMainWorld()); | 500 ASSERT(m_world->isMainWorld()); |
493 if (!m_perContextData) | 501 if (!m_perContextData) |
494 return; | 502 return; |
495 v8::HandleScope handleScope(m_isolate); | 503 v8::HandleScope handleScope(m_isolate); |
496 setSecurityToken(origin); | 504 setSecurityToken(origin); |
497 } | 505 } |
498 | 506 |
499 } // WebCore | 507 } // WebCore |
OLD | NEW |