summaryrefslogtreecommitdiff
path: root/Source/WebCore/page/DOMWindow.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/page/DOMWindow.h')
-rw-r--r--Source/WebCore/page/DOMWindow.h704
1 files changed, 308 insertions, 396 deletions
diff --git a/Source/WebCore/page/DOMWindow.h b/Source/WebCore/page/DOMWindow.h
index b681f77c3..584ba5afc 100644
--- a/Source/WebCore/page/DOMWindow.h
+++ b/Source/WebCore/page/DOMWindow.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2006-2017 Apple Inc. All rights reserved.
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
*
* Redistribution and use in source and binary forms, with or without
@@ -11,501 +11,413 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef DOMWindow_h
-#define DOMWindow_h
+#pragma once
+#include "Base64Utilities.h"
#include "ContextDestructionObserver.h"
#include "EventTarget.h"
+#include "ExceptionOr.h"
#include "FrameDestructionObserver.h"
-#include "URL.h"
+#include "ScrollToOptions.h"
#include "Supplementable.h"
-#include <functional>
+#include <wtf/HashSet.h>
+#include <wtf/WeakPtr.h>
-namespace WebCore {
-
- class BarProp;
- class CSSRuleList;
- class CSSStyleDeclaration;
- class Console;
- class Crypto;
- class DOMApplicationCache;
- class DOMSelection;
- class DOMURL;
- class DOMWindowProperty;
- class Database;
- class DatabaseCallback;
- class Document;
- class Element;
- class EventListener;
- class FloatRect;
- class Frame;
- class History;
- class IDBFactory;
- class Location;
- class MediaQueryList;
- class MessageEvent;
- class Navigator;
- class Node;
- class Page;
- class PageConsole;
- class Performance;
- class PostMessageTimer;
- class ScheduledAction;
- class Screen;
- class ScriptCallStack;
- class SecurityOrigin;
- class SerializedScriptValue;
- class Storage;
- class StyleMedia;
- class WebKitPoint;
- class DOMWindowCSS;
-
-#if ENABLE(REQUEST_ANIMATION_FRAME)
- class RequestAnimationFrameCallback;
-#endif
-
- struct WindowFeatures;
-
- typedef Vector<RefPtr<MessagePort>, 1> MessagePortArray;
-
- typedef int ExceptionCode;
-
- enum SetLocationLocking { LockHistoryBasedOnGestureState, LockHistoryAndBackForwardList };
-
- // FIXME: DOMWindow shouldn't subclass FrameDestructionObserver and instead should get to Frame via its Document.
- class DOMWindow final
- : public RefCounted<DOMWindow>
- , public EventTargetWithInlineData
- , public ContextDestructionObserver
- , public FrameDestructionObserver
- , public Supplementable<DOMWindow> {
- public:
- static PassRefPtr<DOMWindow> create(Document* document) { return adoptRef(new DOMWindow(document)); }
- virtual ~DOMWindow();
-
- // In some rare cases, we'll re-used a DOMWindow for a new Document. For example,
- // when a script calls window.open("..."), the browser gives JavaScript a window
- // synchronously but kicks off the load in the window asynchronously. Web sites
- // expect that modifications that they make to the window object synchronously
- // won't be blown away when the network load commits. To make that happen, we
- // "securely transition" the existing DOMWindow to the Document that results from
- // the network load. See also SecurityContext::isSecureTransitionTo.
- void didSecureTransitionTo(Document*);
+namespace JSC {
+class ExecState;
+class JSObject;
+class JSValue;
+template<typename> class Strong;
+}
- virtual EventTargetInterface eventTargetInterface() const override { return DOMWindowEventTargetInterfaceType; }
- virtual ScriptExecutionContext* scriptExecutionContext() const override { return ContextDestructionObserver::scriptExecutionContext(); }
-
- virtual DOMWindow* toDOMWindow() override;
-
- void registerProperty(DOMWindowProperty*);
- void unregisterProperty(DOMWindowProperty*);
-
- void resetUnlessSuspendedForPageCache();
- void suspendForPageCache();
- void resumeFromPageCache();
-
- PassRefPtr<MediaQueryList> matchMedia(const String&);
+namespace WebCore {
- unsigned pendingUnloadEventListeners() const;
+class BarProp;
+class CSSRuleList;
+class CSSStyleDeclaration;
+class Crypto;
+class CustomElementRegistry;
+class DOMApplicationCache;
+class DOMSelection;
+class DOMWindowProperty;
+class DOMWrapperWorld;
+class Document;
+class Element;
+class EventListener;
+class FloatRect;
+class History;
+class Location;
+class MediaQueryList;
+class Navigator;
+class Node;
+class NodeList;
+class Page;
+class PageConsoleClient;
+class Performance;
+class PostMessageTimer;
+class RequestAnimationFrameCallback;
+class ScheduledAction;
+class Screen;
+class Storage;
+class StyleMedia;
+class WebKitNamespace;
+class WebKitPoint;
+
+struct WindowFeatures;
+
+enum SetLocationLocking { LockHistoryBasedOnGestureState, LockHistoryAndBackForwardList };
+
+// FIXME: DOMWindow shouldn't subclass FrameDestructionObserver and instead should get to Frame via its Document.
+class DOMWindow final
+ : public RefCounted<DOMWindow>
+ , public EventTargetWithInlineData
+ , public ContextDestructionObserver
+ , public FrameDestructionObserver
+ , public Base64Utilities
+ , public Supplementable<DOMWindow> {
+public:
+ static Ref<DOMWindow> create(Document& document) { return adoptRef(*new DOMWindow(document)); }
+ WEBCORE_EXPORT virtual ~DOMWindow();
+
+ // In some rare cases, we'll reuse a DOMWindow for a new Document. For example,
+ // when a script calls window.open("..."), the browser gives JavaScript a window
+ // synchronously but kicks off the load in the window asynchronously. Web sites
+ // expect that modifications that they make to the window object synchronously
+ // won't be blown away when the network load commits. To make that happen, we
+ // "securely transition" the existing DOMWindow to the Document that results from
+ // the network load. See also SecurityContext::isSecureTransitionTo.
+ void didSecureTransitionTo(Document&);
+
+ void registerProperty(DOMWindowProperty&);
+ void unregisterProperty(DOMWindowProperty&);
+
+ void resetUnlessSuspendedForDocumentSuspension();
+ void suspendForDocumentSuspension();
+ void resumeFromDocumentSuspension();
+
+ RefPtr<MediaQueryList> matchMedia(const String&);
+
+ WEBCORE_EXPORT unsigned pendingUnloadEventListeners() const;
+
+ WEBCORE_EXPORT static bool dispatchAllPendingBeforeUnloadEvents();
+ WEBCORE_EXPORT static void dispatchAllPendingUnloadEvents();
+
+ static FloatRect adjustWindowRect(Page&, const FloatRect& pendingChanges);
+
+ bool allowPopUp(); // Call on first window, not target window.
+ static bool allowPopUp(Frame& firstFrame);
+ static bool canShowModalDialog(const Frame&);
+ WEBCORE_EXPORT void setCanShowModalDialogOverride(bool);
+
+ Screen* screen() const;
+ History* history() const;
+ Crypto* crypto() 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(DOMWindow& activeWindow, DOMWindow& firstWindow, const String& location, SetLocationLocking = LockHistoryBasedOnGestureState);
+
+ DOMSelection* getSelection();
+
+ Element* frameElement() const;
+
+ WEBCORE_EXPORT void focus(bool allowFocus = false);
+ void focus(DOMWindow& callerWindow);
+ void blur();
+ WEBCORE_EXPORT void close();
+ void close(Document&);
+ void print();
+ void stop();
+
+ WEBCORE_EXPORT RefPtr<DOMWindow> open(const String& urlString, const AtomicString& frameName, const String& windowFeaturesString, DOMWindow& activeWindow, DOMWindow& firstWindow);
+
+ void showModalDialog(const String& urlString, const String& dialogFeaturesString, DOMWindow& activeWindow, DOMWindow& firstWindow, std::function<void(DOMWindow&)> prepareDialogFunction);
+
+ void alert(const String& message = emptyString());
+ bool confirm(const String& message);
+ String prompt(const String& message, const String& defaultValue);
- static bool dispatchAllPendingBeforeUnloadEvents();
- static void dispatchAllPendingUnloadEvents();
+ bool find(const String&, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) const;
- static FloatRect adjustWindowRect(Page*, const FloatRect& pendingChanges);
+ bool offscreenBuffering() const;
- bool allowPopUp(); // Call on first window, not target window.
- static bool allowPopUp(Frame* firstFrame);
- static bool canShowModalDialog(const Frame*);
- static bool canShowModalDialogNow(const Frame*);
+ 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(); }
+ int scrollX() const;
+ int scrollY() const;
- // DOM Level 0
+ bool closed() const;
- Screen* screen() const;
- History* history() const;
- Crypto* crypto() 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(); }
+ unsigned length() const;
- Location* location() const;
- void setLocation(const String& location, DOMWindow& activeWindow, DOMWindow& firstWindow,
- SetLocationLocking = LockHistoryBasedOnGestureState);
+ String name() const;
+ void setName(const String&);
- DOMSelection* getSelection();
+ String status() const;
+ void setStatus(const String&);
+ String defaultStatus() const;
+ void setDefaultStatus(const String&);
- Element* frameElement() const;
+ // Self-referential attributes
- void focus(ScriptExecutionContext* = 0);
- void blur();
- void close(ScriptExecutionContext* = 0);
- void print();
- void stop();
+ DOMWindow* self() const;
+ DOMWindow* window() const { return self(); }
+ DOMWindow* frames() const { return self(); }
- PassRefPtr<DOMWindow> open(const String& urlString, const AtomicString& frameName, const String& windowFeaturesString,
- DOMWindow& activeWindow, DOMWindow& firstWindow);
+ DOMWindow* opener() const;
+ DOMWindow* parent() const;
+ DOMWindow* top() const;
- void showModalDialog(const String& urlString, const String& dialogFeaturesString, DOMWindow& activeWindow, DOMWindow& firstWindow, std::function<void (DOMWindow&)> prepareDialogFunction);
+ // DOM Level 2 AbstractView Interface
- void alert(const String& message);
- bool confirm(const String& message);
- String prompt(const String& message, const String& defaultValue);
- String btoa(const String& stringToEncode, ExceptionCode&);
- String atob(const String& encodedString, ExceptionCode&);
+ WEBCORE_EXPORT Document* document() const;
- bool find(const String&, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) const;
+ // CSSOM View Module
- bool offscreenBuffering() const;
+ RefPtr<StyleMedia> styleMedia() 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(); }
- int scrollX() const;
- int scrollY() const;
- int pageXOffset() const { return scrollX(); }
- int pageYOffset() const { return scrollY(); }
+ // DOM Level 2 Style Interface
- bool closed() const;
+ WEBCORE_EXPORT Ref<CSSStyleDeclaration> getComputedStyle(Element&, const String& pseudoElt) const;
- unsigned length() const;
+ // WebKit extensions
- String name() const;
- void setName(const String&);
+ WEBCORE_EXPORT RefPtr<CSSRuleList> getMatchedCSSRules(Element*, const String& pseudoElt, bool authorOnly = true) const;
+ double devicePixelRatio() const;
- String status() const;
- void setStatus(const String&);
- String defaultStatus() const;
- void setDefaultStatus(const String&);
+ RefPtr<WebKitPoint> webkitConvertPointFromPageToNode(Node*, const WebKitPoint*) const;
+ RefPtr<WebKitPoint> webkitConvertPointFromNodeToPage(Node*, const WebKitPoint*) const;
- // Self-referential attributes
+ PageConsoleClient* console() const;
- DOMWindow* self() const;
- DOMWindow* window() const { return self(); }
- DOMWindow* frames() const { return self(); }
+ void printErrorMessage(const String&);
+ String crossDomainAccessErrorMessage(const DOMWindow& activeWindow);
- DOMWindow* opener() const;
- DOMWindow* parent() const;
- DOMWindow* top() const;
+ ExceptionOr<void> postMessage(JSC::ExecState&, DOMWindow& callerWindow, JSC::JSValue message, const String& targetOrigin, Vector<JSC::Strong<JSC::JSObject>>&&);
+ void postMessageTimerFired(PostMessageTimer&);
- // DOM Level 2 AbstractView Interface
+ void languagesChanged();
- Document* document() const;
+ void scrollBy(const ScrollToOptions&) const;
+ void scrollBy(double x, double y) const;
+ void scrollTo(const ScrollToOptions&) const;
+ void scrollTo(double x, double y) const;
- // CSSOM View Module
+ void moveBy(float x, float y) const;
+ void moveTo(float x, float y) const;
- PassRefPtr<StyleMedia> styleMedia() const;
+ void resizeBy(float x, float y) const;
+ void resizeTo(float width, float height) const;
- // DOM Level 2 Style Interface
+ // Timers
+ ExceptionOr<int> setTimeout(std::unique_ptr<ScheduledAction>, int timeout);
+ void clearTimeout(int timeoutId);
+ ExceptionOr<int> setInterval(std::unique_ptr<ScheduledAction>, int timeout);
+ void clearInterval(int timeoutId);
- PassRefPtr<CSSStyleDeclaration> getComputedStyle(Element*, const String& pseudoElt) const;
+ int requestAnimationFrame(Ref<RequestAnimationFrameCallback>&&);
+ int webkitRequestAnimationFrame(Ref<RequestAnimationFrameCallback>&&);
+ void cancelAnimationFrame(int id);
- // WebKit extensions
+ // Events
+ // EventTarget API
+ bool addEventListener(const AtomicString& eventType, Ref<EventListener>&&, const AddEventListenerOptions&) final;
+ bool removeEventListener(const AtomicString& eventType, EventListener&, const ListenerOptions&) final;
+ void removeAllEventListeners() final;
- PassRefPtr<CSSRuleList> getMatchedCSSRules(Element*, const String& pseudoElt, bool authorOnly = true) const;
- double devicePixelRatio() const;
+ using EventTarget::dispatchEvent;
+ bool dispatchEvent(Event&, EventTarget*);
- PassRefPtr<WebKitPoint> webkitConvertPointFromPageToNode(Node*, const WebKitPoint*) const;
- PassRefPtr<WebKitPoint> webkitConvertPointFromNodeToPage(Node*, const WebKitPoint*) const;
+ void dispatchLoadEvent();
- Console* console() const;
- PageConsole* pageConsole() const;
+ void captureEvents();
+ void releaseEvents();
- void printErrorMessage(const String&);
- String crossDomainAccessErrorMessage(const DOMWindow& activeWindow);
+ void finishedLoading();
- void postMessage(PassRefPtr<SerializedScriptValue> message, const MessagePortArray*, const String& targetOrigin, DOMWindow& source, ExceptionCode&);
- // Needed for Objective-C bindings (see bug 28774).
- void postMessage(PassRefPtr<SerializedScriptValue> message, MessagePort*, const String& targetOrigin, DOMWindow& source, ExceptionCode&);
- void postMessageTimerFired(PassOwnPtr<PostMessageTimer>);
- void dispatchMessageEventWithOriginCheck(SecurityOrigin* intendedTargetOrigin, PassRefPtr<Event>, PassRefPtr<ScriptCallStack>);
+ using RefCounted::ref;
+ using RefCounted::deref;
- void scrollBy(int x, int y) const;
- void scrollTo(int x, int y) const;
- void scroll(int x, int y) const { scrollTo(x, y); }
+ // HTML 5 key/value storage
+ ExceptionOr<Storage*> sessionStorage() const;
+ ExceptionOr<Storage*> localStorage() const;
+ Storage* optionalSessionStorage() const { return m_sessionStorage.get(); }
+ Storage* optionalLocalStorage() const { return m_localStorage.get(); }
- void moveBy(float x, float y) const;
- void moveTo(float x, float y) const;
+ DOMApplicationCache* applicationCache() const;
+ DOMApplicationCache* optionalApplicationCache() const { return m_applicationCache.get(); }
- void resizeBy(float x, float y) const;
- void resizeTo(float width, float height) const;
+ CustomElementRegistry* customElementRegistry() { return m_customElementRegistry.get(); }
+ CustomElementRegistry& ensureCustomElementRegistry();
- // Timers
- int setTimeout(PassOwnPtr<ScheduledAction>, int timeout, ExceptionCode&);
- void clearTimeout(int timeoutId);
- int setInterval(PassOwnPtr<ScheduledAction>, int timeout, ExceptionCode&);
- void clearInterval(int timeoutId);
+ ExceptionOr<Ref<NodeList>> collectMatchingElementsInFlatTree(Node&, const String& selectors);
+ ExceptionOr<RefPtr<Element>> matchingElementInFlatTree(Node&, const String& selectors);
- // WebKit animation extensions
-#if ENABLE(REQUEST_ANIMATION_FRAME)
- int requestAnimationFrame(PassRefPtr<RequestAnimationFrameCallback>);
- int webkitRequestAnimationFrame(PassRefPtr<RequestAnimationFrameCallback>);
- void cancelAnimationFrame(int id);
+#if ENABLE(ORIENTATION_EVENTS)
+ // 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;
#endif
-#if ENABLE(CSS3_CONDITIONAL_RULES)
- DOMWindowCSS* css();
+#if ENABLE(WEB_TIMING)
+ Performance* performance() const;
#endif
- // Events
- // EventTarget API
- virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture) override;
- virtual bool removeEventListener(const AtomicString& eventType, EventListener*, bool useCapture) override;
- virtual void removeAllEventListeners() override;
-
- using EventTarget::dispatchEvent;
- bool dispatchEvent(PassRefPtr<Event> prpEvent, PassRefPtr<EventTarget> prpTarget);
-
- void dispatchLoadEvent();
-
- DEFINE_ATTRIBUTE_EVENT_LISTENER(abort);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(beforeunload);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(blur);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(canplay);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(canplaythrough);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(change);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(click);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(contextmenu);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(dblclick);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(drag);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(dragend);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(dragenter);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(dragleave);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(dragover);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(dragstart);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(drop);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(durationchange);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(emptied);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(ended);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(focus);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(hashchange);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(input);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(invalid);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(keydown);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(keypress);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(keyup);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(load);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(loadeddata);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(loadedmetadata);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(loadstart);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(message);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(mousedown);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(mouseenter);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(mouseleave);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(mousemove);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(mouseout);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(mouseover);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(mouseup);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(mousewheel);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(offline);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(online);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(pagehide);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(pageshow);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(pause);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(play);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(playing);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(popstate);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(progress);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(ratechange);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(reset);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(resize);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(scroll);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(search);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(seeked);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(seeking);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(select);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(stalled);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(storage);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(submit);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(suspend);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(timeupdate);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(unload);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(volumechange);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(waiting);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitbeginfullscreen);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitendfullscreen);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(wheel);
-
- DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER(webkitanimationstart, webkitAnimationStart);
- DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER(webkitanimationiteration, webkitAnimationIteration);
- DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER(webkitanimationend, webkitAnimationEnd);
- DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER(webkittransitionend, webkitTransitionEnd);
- DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER(transitionend, transitionend);
-
- void captureEvents();
- void releaseEvents();
-
- void finishedLoading();
-
- using RefCounted<DOMWindow>::ref;
- using RefCounted<DOMWindow>::deref;
-
-#if ENABLE(DEVICE_ORIENTATION)
- DEFINE_ATTRIBUTE_EVENT_LISTENER(devicemotion);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(deviceorientation);
-#endif
+ double nowTimestamp() const;
-#if ENABLE(PROXIMITY_EVENTS)
- DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitdeviceproximity);
+#if PLATFORM(IOS)
+ void incrementScrollEventListenersCount();
+ void decrementScrollEventListenersCount();
+ unsigned scrollEventListenerCount() const { return m_scrollEventListenerCount; }
#endif
- // HTML 5 key/value storage
- Storage* sessionStorage(ExceptionCode&) const;
- Storage* localStorage(ExceptionCode&) const;
- Storage* optionalSessionStorage() const { return m_sessionStorage.get(); }
- Storage* optionalLocalStorage() const { return m_localStorage.get(); }
+ void resetAllGeolocationPermission();
- DOMApplicationCache* applicationCache() const;
- DOMApplicationCache* optionalApplicationCache() const { return m_applicationCache.get(); }
-
-#if ENABLE(ORIENTATION_EVENTS)
- // 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;
-
- DEFINE_ATTRIBUTE_EVENT_LISTENER(orientationchange);
+#if ENABLE(IOS_TOUCH_EVENTS) || ENABLE(IOS_GESTURE_EVENTS)
+ bool hasTouchEventListeners() const { return m_touchEventListenerCount > 0; }
#endif
-#if ENABLE(TOUCH_EVENTS)
- DEFINE_ATTRIBUTE_EVENT_LISTENER(touchstart);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(touchmove);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(touchend);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(touchcancel);
+#if ENABLE(USER_MESSAGE_HANDLERS)
+ bool shouldHaveWebKitNamespaceForWorld(DOMWrapperWorld&);
+ WebKitNamespace* webkitNamespace() const;
#endif
-#if ENABLE(IOS_GESTURE_EVENTS)
- DEFINE_ATTRIBUTE_EVENT_LISTENER(gesturestart);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(gesturechange);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(gestureend);
-#endif
+ // FIXME: When this DOMWindow is no longer the active DOMWindow (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
+ // by the document that is currently active in m_frame.
+ bool isCurrentlyDisplayedInFrame() const;
-#if ENABLE(WEB_TIMING)
- Performance* performance() const;
-#endif
+ void willDetachDocumentFromFrame();
+ void willDestroyCachedFrame();
-#if PLATFORM(IOS)
- void incrementScrollEventListenersCount();
- void decrementScrollEventListenersCount();
- unsigned scrollEventListenerCount() const { return m_scrollEventListenerCount; }
-#endif
+ void enableSuddenTermination();
+ void disableSuddenTermination();
- void resetAllGeolocationPermission();
+ WeakPtr<DOMWindow> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); }
-#if ENABLE(IOS_TOUCH_EVENTS) || ENABLE(IOS_GESTURE_EVENTS)
- bool hasTouchEventListeners() const { return m_touchEventListenerCount > 0; }
-#endif
+private:
+ explicit DOMWindow(Document&);
- // FIXME: When this DOMWindow is no longer the active DOMWindow (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
- // by the document that is currently active in m_frame.
- bool isCurrentlyDisplayedInFrame() const;
+ EventTargetInterface eventTargetInterface() const final { return DOMWindowEventTargetInterfaceType; }
+ ScriptExecutionContext* scriptExecutionContext() const final { return ContextDestructionObserver::scriptExecutionContext(); }
- void willDetachDocumentFromFrame();
- void willDestroyCachedFrame();
+ DOMWindow* toDOMWindow() final;
- void enableSuddenTermination();
- void disableSuddenTermination();
+ Page* page();
+ bool allowedToChangeWindowGeometry() const;
- private:
- explicit DOMWindow(Document*);
+ void frameDestroyed() final;
+ void willDetachPage() final;
- Page* page();
- bool allowedToChangeWindowGeometry() const;
+ void refEventTarget() final { ref(); }
+ void derefEventTarget() final { deref(); }
- virtual void frameDestroyed() override;
- virtual void willDetachPage() override;
+ static RefPtr<Frame> createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures&, DOMWindow& activeWindow, Frame& firstFrame, Frame& openerFrame, std::function<void(DOMWindow&)> prepareDialogFunction = nullptr);
+ bool isInsecureScriptAccess(DOMWindow& activeWindow, const String& urlString);
- virtual void refEventTarget() override { ref(); }
- virtual void derefEventTarget() override { deref(); }
+ void resetDOMWindowProperties();
+ void disconnectDOMWindowProperties();
+ void reconnectDOMWindowProperties();
+ void willDestroyDocumentInFrame();
- static PassRefPtr<Frame> createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures&, DOMWindow& activeWindow, Frame* firstFrame, Frame* openerFrame, std::function<void (DOMWindow&)> prepareDialogFunction = nullptr);
- bool isInsecureScriptAccess(DOMWindow& activeWindow, const String& urlString);
+ bool isSameSecurityOriginAsMainFrame() const;
+
+#if ENABLE(GAMEPAD)
+ void incrementGamepadEventListenerCount();
+ void decrementGamepadEventListenerCount();
+#endif
- void resetDOMWindowProperties();
- void disconnectDOMWindowProperties();
- void reconnectDOMWindowProperties();
- void willDestroyDocumentInFrame();
+ bool m_shouldPrintWhenFinishedLoading { false };
+ bool m_suspendedForDocumentSuspension { false };
+ std::optional<bool> m_canShowModalDialogOverride;
- bool m_shouldPrintWhenFinishedLoading;
- bool m_suspendedForPageCache;
+ HashSet<DOMWindowProperty*> m_properties;
- HashSet<DOMWindowProperty*> m_properties;
+ mutable RefPtr<Crypto> m_crypto;
+ mutable RefPtr<History> m_history;
+ mutable RefPtr<BarProp> m_locationbar;
+ mutable RefPtr<StyleMedia> m_media;
+ mutable RefPtr<BarProp> m_menubar;
+ mutable RefPtr<Navigator> m_navigator;
+ mutable RefPtr<BarProp> m_personalbar;
+ mutable RefPtr<Screen> m_screen;
+ mutable RefPtr<BarProp> m_scrollbars;
+ mutable RefPtr<DOMSelection> m_selection;
+ mutable RefPtr<BarProp> m_statusbar;
+ mutable RefPtr<BarProp> m_toolbar;
+ mutable RefPtr<Location> m_location;
- mutable RefPtr<Screen> m_screen;
- mutable RefPtr<History> m_history;
- mutable RefPtr<Crypto> m_crypto;
- mutable RefPtr<BarProp> m_locationbar;
- mutable RefPtr<BarProp> m_menubar;
- mutable RefPtr<BarProp> m_personalbar;
- mutable RefPtr<BarProp> m_scrollbars;
- mutable RefPtr<BarProp> m_statusbar;
- mutable RefPtr<BarProp> m_toolbar;
- mutable RefPtr<Console> m_console;
- mutable RefPtr<Navigator> m_navigator;
- mutable RefPtr<Location> m_location;
- mutable RefPtr<StyleMedia> m_media;
+ String m_status;
+ String m_defaultStatus;
- String m_status;
- String m_defaultStatus;
+ enum class PageStatus { None, Shown, Hidden };
+ PageStatus m_lastPageStatus { PageStatus::None };
- enum PageStatus { PageStatusNone, PageStatusShown, PageStatusHidden };
- PageStatus m_lastPageStatus;
+ WeakPtrFactory<DOMWindow> m_weakPtrFactory;
#if PLATFORM(IOS)
- unsigned m_scrollEventListenerCount;
+ unsigned m_scrollEventListenerCount { 0 };
#endif
#if ENABLE(IOS_TOUCH_EVENTS) || ENABLE(IOS_GESTURE_EVENTS)
- unsigned m_touchEventListenerCount;
+ unsigned m_touchEventListenerCount { 0 };
#endif
- mutable RefPtr<Storage> m_sessionStorage;
- mutable RefPtr<Storage> m_localStorage;
- mutable RefPtr<DOMApplicationCache> m_applicationCache;
+#if ENABLE(GAMEPAD)
+ unsigned m_gamepadEventListenerCount { 0 };
+#endif
+
+ mutable RefPtr<Storage> m_sessionStorage;
+ mutable RefPtr<Storage> m_localStorage;
+ mutable RefPtr<DOMApplicationCache> m_applicationCache;
+
+ RefPtr<CustomElementRegistry> m_customElementRegistry;
#if ENABLE(WEB_TIMING)
- mutable RefPtr<Performance> m_performance;
+ mutable RefPtr<Performance> m_performance;
#endif
-#if ENABLE(CSS3_CONDITIONAL_RULES)
- mutable RefPtr<DOMWindowCSS> m_css;
+#if ENABLE(USER_MESSAGE_HANDLERS)
+ mutable RefPtr<WebKitNamespace> m_webkitNamespace;
#endif
- };
+};
- inline String DOMWindow::status() const
- {
- return m_status;
- }
+inline String DOMWindow::status() const
+{
+ return m_status;
+}
- inline String DOMWindow::defaultStatus() const
- {
- return m_defaultStatus;
- }
+inline String DOMWindow::defaultStatus() const
+{
+ return m_defaultStatus;
+}
} // namespace WebCore
-
-#endif // DOMWindow_h