Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Unified Diff: third_party/WebKit/Source/bindings/core/v8/WindowProxy.h

Issue 2769803003: v8binding: Initializes WindowProxy iff it's uninitialized. (Closed)
Patch Set: Addressed review comments. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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>);

Powered by Google App Engine
This is Rietveld 408576698