| 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 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 } | 290 } |
| 291 | 291 |
| 292 bool WindowProxy::installDOMWindow() | 292 bool WindowProxy::installDOMWindow() |
| 293 { | 293 { |
| 294 LocalDOMWindow* window = m_frame->domWindow(); | 294 LocalDOMWindow* window = m_frame->domWindow(); |
| 295 const WrapperTypeInfo* wrapperTypeInfo = window->wrapperTypeInfo(); | 295 const WrapperTypeInfo* wrapperTypeInfo = window->wrapperTypeInfo(); |
| 296 v8::Local<v8::Object> windowWrapper = V8ObjectConstructor::newInstance(m_iso
late, m_scriptState->perContextData()->constructorForType(wrapperTypeInfo)); | 296 v8::Local<v8::Object> windowWrapper = V8ObjectConstructor::newInstance(m_iso
late, m_scriptState->perContextData()->constructorForType(wrapperTypeInfo)); |
| 297 if (windowWrapper.IsEmpty()) | 297 if (windowWrapper.IsEmpty()) |
| 298 return false; | 298 return false; |
| 299 | 299 |
| 300 V8DOMWrapper::setNativeInfoForHiddenWrapper(v8::Handle<v8::Object>::Cast(win
dowWrapper->GetPrototype()), wrapperTypeInfo, window->toScriptWrappableBase()); | 300 V8DOMWrapper::setNativeInfo(v8::Handle<v8::Object>::Cast(windowWrapper->GetP
rototype()), wrapperTypeInfo, window->toScriptWrappableBase()); |
| 301 | 301 |
| 302 // Install the windowWrapper as the prototype of the innerGlobalObject. | 302 // Install the windowWrapper as the prototype of the innerGlobalObject. |
| 303 // The full structure of the global object is as follows: | 303 // The full structure of the global object is as follows: |
| 304 // | 304 // |
| 305 // outerGlobalObject (Empty object, remains after navigation) | 305 // outerGlobalObject (Empty object, remains after navigation) |
| 306 // -- has prototype --> innerGlobalObject (Holds global variables, changes
during navigation) | 306 // -- has prototype --> innerGlobalObject (Holds global variables, changes
during navigation) |
| 307 // -- has prototype --> LocalDOMWindow instance | 307 // -- has prototype --> LocalDOMWindow instance |
| 308 // -- has prototype --> Window.prototype | 308 // -- has prototype --> Window.prototype |
| 309 // -- has prototype --> Object.prototype | 309 // -- has prototype --> Object.prototype |
| 310 // | 310 // |
| 311 // Note: Much of this prototype structure is hidden from web content. The | 311 // Note: Much of this prototype structure is hidden from web content. The |
| 312 // outer, inner, and LocalDOMWindow instance all appear to be the same | 312 // outer, inner, and LocalDOMWindow instance all appear to be the same |
| 313 // JavaScript object. | 313 // JavaScript object. |
| 314 // | |
| 315 // Note: With Oilpan, the LocalDOMWindow object is garbage collected. | |
| 316 // Persistent references to this inner global object view of the Local
DOMWindow | |
| 317 // aren't kept, as that would prevent the global object from ever bein
g released. | |
| 318 // It is safe not to do so, as the wrapper for the LocalDOMWindow bein
g installed here | |
| 319 // already keeps a persistent reference, and it along with the inner g
lobal object | |
| 320 // views of the LocalDOMWindow will die together once that wrapper cle
ars the persistent | |
| 321 // reference. | |
| 322 v8::Handle<v8::Object> innerGlobalObject = toInnerGlobalObject(m_scriptState
->context()); | 314 v8::Handle<v8::Object> innerGlobalObject = toInnerGlobalObject(m_scriptState
->context()); |
| 323 V8DOMWrapper::setNativeInfoForHiddenWrapper(innerGlobalObject, wrapperTypeIn
fo, window->toScriptWrappableBase()); | 315 V8DOMWrapper::setNativeInfo(innerGlobalObject, wrapperTypeInfo, window->toSc
riptWrappableBase()); |
| 324 innerGlobalObject->SetPrototype(windowWrapper); | 316 innerGlobalObject->SetPrototype(windowWrapper); |
| 325 V8DOMWrapper::associateObjectWithWrapperNonTemplate(window, wrapperTypeInfo,
windowWrapper, m_isolate); | 317 V8DOMWrapper::associateObjectWithWrapperNonTemplate(window, wrapperTypeInfo,
windowWrapper, m_isolate); |
| 326 wrapperTypeInfo->installConditionallyEnabledProperties(windowWrapper, m_isol
ate); | 318 wrapperTypeInfo->installConditionallyEnabledProperties(windowWrapper, m_isol
ate); |
| 327 return true; | 319 return true; |
| 328 } | 320 } |
| 329 | 321 |
| 330 void WindowProxy::updateDocumentWrapper(v8::Handle<v8::Object> wrapper) | 322 void WindowProxy::updateDocumentWrapper(v8::Handle<v8::Object> wrapper) |
| 331 { | 323 { |
| 332 ASSERT(m_world->isMainWorld()); | 324 ASSERT(m_world->isMainWorld()); |
| 333 m_document.set(m_isolate, wrapper); | 325 m_document.set(m_isolate, wrapper); |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 | 488 |
| 497 void WindowProxy::updateSecurityOrigin(SecurityOrigin* origin) | 489 void WindowProxy::updateSecurityOrigin(SecurityOrigin* origin) |
| 498 { | 490 { |
| 499 ASSERT(m_world->isMainWorld()); | 491 ASSERT(m_world->isMainWorld()); |
| 500 if (!isContextInitialized()) | 492 if (!isContextInitialized()) |
| 501 return; | 493 return; |
| 502 setSecurityToken(origin); | 494 setSecurityToken(origin); |
| 503 } | 495 } |
| 504 | 496 |
| 505 } // namespace blink | 497 } // namespace blink |
| OLD | NEW |