Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / frame / LocalDOMWindow.h
index 90f4755..9dd259f 100644 (file)
 #define LocalDOMWindow_h
 
 #include "core/events/EventTarget.h"
+#include "core/frame/DOMWindow.h"
 #include "core/frame/DOMWindowBase64.h"
 #include "core/frame/FrameDestructionObserver.h"
+#include "core/frame/LocalFrame.h"
 #include "platform/LifecycleContext.h"
 #include "platform/Supplementable.h"
 #include "platform/heap/Handle.h"
@@ -39,8 +41,6 @@
 
 namespace blink {
 
-class ApplicationCache;
-class BarProp;
 class CSSRuleList;
 class CSSStyleDeclaration;
 class Console;
@@ -49,7 +49,6 @@ class DOMWindowCSS;
 class DOMWindowEventQueue;
 class DOMWindowLifecycleNotifier;
 class DOMWindowProperty;
-class Document;
 class DocumentInit;
 class Element;
 class EventListener;
@@ -57,22 +56,14 @@ class EventQueue;
 class ExceptionState;
 class FloatRect;
 class FrameConsole;
-class History;
-class LocalFrame;
-class Location;
 class MediaQueryList;
-class Navigator;
 class Page;
-class Performance;
 class PostMessageTimer;
 class RequestAnimationFrameCallback;
-class Screen;
 class ScrollOptions;
 class ScriptCallStack;
 class SecurityOrigin;
 class SerializedScriptValue;
-class Storage;
-class StyleMedia;
 
 typedef WillBeHeapVector<RefPtrWillBeMember<MessagePort>, 1> MessagePortArray;
 
@@ -83,9 +74,10 @@ enum PageshowEventPersistence {
 
 enum SetLocationLocking { LockHistoryBasedOnGestureState, LockHistoryAndBackForwardList };
 
-class LocalDOMWindow FINAL : public RefCountedWillBeGarbageCollectedFinalized<LocalDOMWindow>, public EventTargetWithInlineData, public DOMWindowBase64, public FrameDestructionObserver, public WillBeHeapSupplementable<LocalDOMWindow>, public LifecycleContext<LocalDOMWindow> {
+// Note: if you're thinking of returning something DOM-related by reference,
+// please ping dcheng@chromium.org first. You probably don't want to do that.
+class LocalDOMWindow final : public DOMWindow, public DOMWindowBase64, public WillBeHeapSupplementable<LocalDOMWindow>, public LifecycleContext<LocalDOMWindow> {
     DEFINE_WRAPPERTYPEINFO();
-    REFCOUNTED_EVENT_TARGET(LocalDOMWindow);
     WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(LocalDOMWindow);
 public:
     static PassRefPtrWillBeRawPtr<Document> createDocument(const String& mimeType, const DocumentInit&, bool forceXHTML);
@@ -97,10 +89,57 @@ public:
 
     PassRefPtrWillBeRawPtr<Document> installNewDocument(const String& mimeType, const DocumentInit&, bool forceXHTML = false);
 
-    virtual const AtomicString& interfaceName() const OVERRIDE;
-    virtual ExecutionContext* executionContext() const OVERRIDE;
-
-    virtual LocalDOMWindow* toDOMWindow() OVERRIDE;
+    // EventTarget overrides:
+    virtual const AtomicString& interfaceName() const override;
+    virtual ExecutionContext* executionContext() const override;
+    virtual LocalDOMWindow* toDOMWindow() override;
+
+    // DOMWindow overrides:
+    void trace(Visitor*) override;
+    virtual LocalFrame* frame() const override;
+    Screen* screen() const override;
+    History* history() const override;
+    BarProp* locationbar() const override;
+    BarProp* menubar() const override;
+    BarProp* personalbar() const override;
+    BarProp* scrollbars() const override;
+    BarProp* statusbar() const override;
+    BarProp* toolbar() const override;
+    Navigator* navigator() const override;
+    Location& location() const override;
+    bool offscreenBuffering() const override;
+    int outerHeight() const override;
+    int outerWidth() const override;
+    int innerHeight() const override;
+    int innerWidth() const override;
+    int screenX() const override;
+    int screenY() const override;
+    double scrollX() const override;
+    double scrollY() const override;
+    bool closed() const override;
+    unsigned length() const override;
+    const AtomicString& name() const override;
+    void setName(const AtomicString&) override;
+    String status() const override;
+    void setStatus(const String&) override;
+    String defaultStatus() const override;
+    void setDefaultStatus(const String&) override;
+    LocalDOMWindow* self() const override;
+    LocalDOMWindow* window() const { return self(); }
+    LocalDOMWindow* frames() const { return self(); }
+    LocalDOMWindow* opener() const override;
+    LocalDOMWindow* parent() const override;
+    LocalDOMWindow* top() const override;
+    Document* document() const override;
+    StyleMedia* styleMedia() const override;
+    double devicePixelRatio() const override;
+    Storage* sessionStorage(ExceptionState&) const override;
+    Storage* localStorage(ExceptionState&) const override;
+    ApplicationCache* applicationCache() const override;
+    int orientation() const override;
+    Console* console() const override;
+    Performance* performance() const override;
+    DOMWindowCSS* css() const override;
 
     void registerProperty(DOMWindowProperty*);
     void unregisterProperty(DOMWindowProperty*);
@@ -118,19 +157,6 @@ public:
     static bool canShowModalDialogNow(const LocalFrame*);
 
     // DOM Level 0
-
-    Screen& screen() const;
-    History& history() const;
-    BarProp& locationbar() const;
-    BarProp& menubar() const;
-    BarProp& personalbar() const;
-    BarProp& scrollbars() const;
-    BarProp& statusbar() const;
-    BarProp& toolbar() const;
-    Navigator& navigator() const;
-    Navigator& clientInformation() const { return navigator(); }
-
-    Location& location() const;
     void setLocation(const String& location, LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow,
         SetLocationLocking = LockHistoryBasedOnGestureState);
 
@@ -157,51 +183,6 @@ public:
 
     bool find(const String&, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) const;
 
-    bool offscreenBuffering() const;
-
-    int outerHeight() const;
-    int outerWidth() const;
-    int innerHeight() const;
-    int innerWidth() const;
-    int screenX() const;
-    int screenY() const;
-    int screenLeft() const { return screenX(); }
-    int screenTop() const { return screenY(); }
-    double scrollX() const;
-    double scrollY() const;
-    double pageXOffset() const { return scrollX(); }
-    double pageYOffset() const { return scrollY(); }
-
-    bool closed() const;
-
-    unsigned length() const;
-
-    const AtomicString& name() const;
-    void setName(const AtomicString&);
-
-    String status() const;
-    void setStatus(const String&);
-    String defaultStatus() const;
-    void setDefaultStatus(const String&);
-
-    // Self-referential attributes
-
-    LocalDOMWindow* self() const;
-    LocalDOMWindow* window() const { return self(); }
-    LocalDOMWindow* frames() const { return self(); }
-
-    LocalDOMWindow* opener() const;
-    LocalDOMWindow* parent() const;
-    LocalDOMWindow* top() const;
-
-    // DOM Level 2 AbstractView Interface
-
-    Document* document() const;
-
-    // CSSOM View Module
-
-    StyleMedia& styleMedia() const;
-
     // DOM Level 2 Style Interface
 
     PassRefPtrWillBeRawPtr<CSSStyleDeclaration> getComputedStyle(Element*, const String& pseudoElt) const;
@@ -209,9 +190,7 @@ public:
     // WebKit extensions
 
     PassRefPtrWillBeRawPtr<CSSRuleList> getMatchedCSSRules(Element*, const String& pseudoElt) const;
-    double devicePixelRatio() const;
 
-    Console& console() const;
     FrameConsole* frameConsole() const;
 
     void printErrorMessage(const String&);
@@ -240,19 +219,18 @@ public:
     int webkitRequestAnimationFrame(RequestAnimationFrameCallback*);
     void cancelAnimationFrame(int id);
 
-    DOMWindowCSS& css() const;
-
     // Events
     // EventTarget API
-    virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture = false) OVERRIDE;
-    virtual bool removeEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture = false) OVERRIDE;
-    virtual void removeAllEventListeners() OVERRIDE;
+    virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture = false) override;
+    virtual bool removeEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture = false) override;
+    virtual void removeAllEventListeners() override;
 
     using EventTarget::dispatchEvent;
     bool dispatchEvent(PassRefPtrWillBeRawPtr<Event> prpEvent, PassRefPtrWillBeRawPtr<EventTarget> prpTarget);
 
     void dispatchLoadEvent();
 
+    // FIXME: It's not clear how to move these to DOMWindow yet.
     DEFINE_ATTRIBUTE_EVENT_LISTENER(animationend);
     DEFINE_ATTRIBUTE_EVENT_LISTENER(animationiteration);
     DEFINE_ATTRIBUTE_EVENT_LISTENER(animationstart);
@@ -271,18 +249,13 @@ public:
     void finishedLoading();
 
     // HTML 5 key/value storage
-    Storage* sessionStorage(ExceptionState&) const;
-    Storage* localStorage(ExceptionState&) const;
     Storage* optionalSessionStorage() const { return m_sessionStorage.get(); }
     Storage* optionalLocalStorage() const { return m_localStorage.get(); }
-
-    ApplicationCache* applicationCache() const;
     ApplicationCache* optionalApplicationCache() const { return m_applicationCache.get(); }
 
-    // This is the interface orientation in degrees. Some examples are:
-    //  0 is straight up; -90 is when the device is rotated 90 clockwise;
-    //  90 is when rotated counter clockwise.
-    int orientation() const;
+    // Dispatch the (deprecated) orientationchange event to this DOMWindow and
+    // recurse on its child frames.
+    void sendOrientationChangeEvent();
 
     DEFINE_ATTRIBUTE_EVENT_LISTENER(orientationchange);
     DEFINE_ATTRIBUTE_EVENT_LISTENER(touchstart);
@@ -290,8 +263,6 @@ public:
     DEFINE_ATTRIBUTE_EVENT_LISTENER(touchend);
     DEFINE_ATTRIBUTE_EVENT_LISTENER(touchcancel);
 
-    Performance& performance() const;
-
     // FIXME: When this LocalDOMWindow is no longer the active LocalDOMWindow (i.e.,
     // when its document is no longer the document that is displayed in its
     // frame), we would like to zero out m_frame to avoid being confused
@@ -320,21 +291,41 @@ public:
 
     void acceptLanguagesChanged();
 
-    virtual void trace(Visitor*) OVERRIDE;
-
-    virtual v8::Handle<v8::Object> wrap(v8::Handle<v8::Object> creationContext, v8::Isolate*) OVERRIDE;
+    virtual v8::Handle<v8::Object> wrap(v8::Handle<v8::Object> creationContext, v8::Isolate*) override;
 
 protected:
     DOMWindowLifecycleNotifier& lifecycleNotifier();
 
 private:
+    // Rather than simply inheriting FrameDestructionObserver like most other
+    // classes, LocalDOMWindow hides its FrameDestructionObserver with
+    // composition. This prevents conflicting overloads between DOMWindow, which
+    // has a frame() accessor that returns Frame* for bindings code, and
+    // FrameDestructionObserver, which has a frame() accessor that returns a
+    // LocalFrame*.
+    class WindowFrameObserver final : public NoBaseWillBeGarbageCollected<WindowFrameObserver>, public FrameDestructionObserver {
+        WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
+        WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(WindowFrameObserver);
+        DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(WindowFrameObserver);
+    public:
+        static PassOwnPtrWillBeRawPtr<WindowFrameObserver> create(LocalDOMWindow*, LocalFrame&);
+
+        virtual void trace(Visitor*) override;
+
+    private:
+        WindowFrameObserver(LocalDOMWindow*, LocalFrame&);
+
+        // FrameDestructionObserver overrides:
+        void willDetachFrameHost() override;
+
+        RawPtrWillBeMember<LocalDOMWindow> m_window;
+    };
+    friend WTF::OwnedPtrDeleter<WindowFrameObserver>;
+
     explicit LocalDOMWindow(LocalFrame&);
 
     Page* page();
 
-    // FrameDestructionObserver
-    virtual void willDetachFrameHost() OVERRIDE;
-
     void clearDocument();
     void willDestroyDocumentInFrame();
 
@@ -348,8 +339,10 @@ private:
         DoBroadcastListenerRemoval
     };
 
+    void willDetachFrameHost();
     void removeAllEventListenersInternal(BroadcastListenerRemoval);
 
+    OwnPtrWillBeMember<WindowFrameObserver> m_frameObserver;
     RefPtrWillBeMember<Document> m_document;
 
     bool m_shouldPrintWhenFinishedLoading;