| 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 |