#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"
namespace blink {
-class ApplicationCache;
-class BarProp;
class CSSRuleList;
class CSSStyleDeclaration;
class Console;
class DOMWindowEventQueue;
class DOMWindowLifecycleNotifier;
class DOMWindowProperty;
-class Document;
class DocumentInit;
class Element;
class EventListener;
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;
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);
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*);
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);
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;
// WebKit extensions
PassRefPtrWillBeRawPtr<CSSRuleList> getMatchedCSSRules(Element*, const String& pseudoElt) const;
- double devicePixelRatio() const;
- Console& console() const;
FrameConsole* frameConsole() const;
void printErrorMessage(const String&);
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);
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);
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
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();
DoBroadcastListenerRemoval
};
+ void willDetachFrameHost();
void removeAllEventListenersInternal(BroadcastListenerRemoval);
+ OwnPtrWillBeMember<WindowFrameObserver> m_frameObserver;
RefPtrWillBeMember<Document> m_document;
bool m_shouldPrintWhenFinishedLoading;