| Index: third_party/WebKit/Source/bindings/core/v8/WindowProxy.h
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/WindowProxy.h b/third_party/WebKit/Source/bindings/core/v8/WindowProxy.h
|
| index 5b012aaf1a0dc628afc0646d9bd629844ccc74de..64256bdcc08ddf7984c9f9be19e62a0d9ebe9a1b 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/WindowProxy.h
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/WindowProxy.h
|
| @@ -42,7 +42,6 @@ namespace blink {
|
|
|
| class DOMWindow;
|
| class Frame;
|
| -class ScriptController;
|
|
|
| // WindowProxy implements the split window model of a window for a frame. In the
|
| // HTML standard, the split window model is composed of the Window interface
|
| @@ -163,16 +162,62 @@ class WindowProxy : public GarbageCollectedFinalized<WindowProxy> {
|
| virtual bool isLocal() const { return false; }
|
|
|
| protected:
|
| - // TODO(dcheng): Remove this friend declaration once LocalWindowProxyManager
|
| - // and ScriptController are merged.
|
| - friend class ScriptController;
|
| -
|
| - // A valid transition is from ContextUninitialized to ContextInitialized,
|
| - // and then ContextDetached. Other transitions are forbidden.
|
| + // Lifecycle represents the following four states.
|
| + //
|
| + // * ContextIsUninitialized
|
| + // We lazily initialize WindowProxies for performance reasons, and this state
|
| + // is "to be initialized on demand". WindowProxy basically behaves the same as
|
| + // |ContextIsInitialized| from a point of view of call sites.
|
| + // - Possible next states: ContextIsInitialized
|
| + // It's possible to detach the context's frame from the DOM or navigate to a
|
| + // new page without initializing the WindowProxy, however, there is no
|
| + // transition to |FrameIsDetached| or |GlobalObjectIsDetached|
|
| + // because |disposeContext| does not change the state if the state is
|
| + // |ContextIsUninitialized|. In either case of a) the browsing context
|
| + // container is detached from the DOM or b) the page is navigated away, there
|
| + // must be no way for author script to access the context of
|
| + // |ContextIsUninitialized| because |ContextIsUninitialized| means that author
|
| + // script has never accessed the context, hence there must exist no reference
|
| + // to the context.
|
| + //
|
| + // * ContextIsInitialized
|
| + // The context is initialized and its frame is still attached to the DOM.
|
| + // - Possible next states: FrameIsDetached, GlobalObjectIsDetached
|
| + //
|
| + // * GlobalObjectIsDetached
|
| + // The context is initialized and its frame is still attached to the DOM, but
|
| + // the global object(inner global)'s Document is no longer the active Document
|
| + // of the frame (i.e. it is being navigated away). The global object (inner
|
| + // global) is detached from the global proxy (outer global), but the
|
| + // (detached) global object and context are still alive, and author script may
|
| + // have references to the context.
|
| + // The spec does not support full web features in this state. Blink supports
|
| + // less things than the spec.
|
| + // This state is also used when swapping frames. See also |WebFrame::swap|.
|
| + // - Possible next states: ContextIsInitialized
|
| + // This state is in the middle of navigation. Once document loading is
|
| + // completed, the WindowProxy will always be reinitialized, as
|
| + // |DocumentLoader::installNewDocument| ends up calling to
|
| + // |WindowProxy::updateDocument|, which reinitializes the WindowProxy.
|
| + //
|
| + // * FrameIsDetached
|
| + // The context was initialized, but its frame has been detached from the DOM.
|
| + // Note that the context is still alive and author script may have references
|
| + // to the context and hence author script may run in the context.
|
| + // The spec does not support some of web features such as setTimeout, etc. on
|
| + // a detached window. Blink supports less things than the spec.
|
| + // V8PerContextData is cut off from the context.
|
| + // - Possible next states: n/a
|
| enum class Lifecycle {
|
| - ContextUninitialized,
|
| - ContextInitialized,
|
| - ContextDetached,
|
| + // v8::Context is not yet initialized.
|
| + ContextIsUninitialized,
|
| + // v8::Context is initialized.
|
| + ContextIsInitialized,
|
| + // The global object (inner global) is detached from the global proxy (outer
|
| + // global).
|
| + GlobalObjectIsDetached,
|
| + // The context's frame is detached from the DOM.
|
| + FrameIsDetached,
|
| };
|
|
|
| WindowProxy(v8::Isolate*, Frame&, RefPtr<DOMWrapperWorld>);
|
|
|