/* * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * 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 * 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 * 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. */ #ifndef DOMWindow_h #define DOMWindow_h #include "KURL.h" #include "PlatformString.h" #include "SecurityOrigin.h" #include #include #include namespace WebCore { class BarInfo; class CSSRuleList; class CSSStyleDeclaration; class Console; class DOMSelection; class Database; class Document; class Element; class EventListener; class FloatRect; class Frame; class History; class Location; class MessagePort; class Navigator; class PostMessageTimer; class Screen; #if ENABLE(DOM_STORAGE) class SessionStorage; class Storage; #endif #if ENABLE(OFFLINE_WEB_APPLICATIONS) class DOMApplicationCache; #endif typedef int ExceptionCode; class DOMWindow : public RefCounted { public: static PassRefPtr create(Frame* frame) { return adoptRef(new DOMWindow(frame)); } virtual ~DOMWindow(); Frame* frame() { return m_frame; } void disconnectFrame(); void clear(); void setSecurityOrigin(SecurityOrigin* securityOrigin) { m_securityOrigin = securityOrigin; } SecurityOrigin* securityOrigin() const { return m_securityOrigin.get(); } void setURL(const KURL& url) { m_url = url; } KURL url() const { return m_url; } static void adjustWindowRect(const FloatRect& screen, FloatRect& window, const FloatRect& pendingChanges); // DOM Level 0 Screen* screen() const; History* history() const; BarInfo* locationbar() const; BarInfo* menubar() const; BarInfo* personalbar() const; BarInfo* scrollbars() const; BarInfo* statusbar() const; BarInfo* toolbar() const; Navigator* navigator() const; Navigator* clientInformation() const { return navigator(); } Location* location() const; DOMSelection* getSelection(); Element* frameElement() const; void focus(); void blur(); void close(); void print(); void stop(); void alert(const String& message); bool confirm(const String& message); String prompt(const String& message, const String& defaultValue); 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(); } int scrollX() const; int scrollY() const; int pageXOffset() const { return scrollX(); } int pageYOffset() const { return scrollY(); } bool closed() const; unsigned length() const; String name() const; void setName(const String&); String status() const; void setStatus(const String&); String defaultStatus() const; void setDefaultStatus(const String&); // This attribute is an alias of defaultStatus and is necessary for legacy uses. String defaultstatus() const { return defaultStatus(); } void setDefaultstatus(const String& status) { setDefaultStatus(status); } // Self referential attributes DOMWindow* self() const; DOMWindow* window() const { return self(); } DOMWindow* frames() const { return self(); } DOMWindow* opener() const; DOMWindow* parent() const; DOMWindow* top() const; // DOM Level 2 AbstractView Interface Document* document() const; // DOM Level 2 Style Interface PassRefPtr getComputedStyle(Element*, const String& pseudoElt) const; // WebKit extensions PassRefPtr getMatchedCSSRules(Element*, const String& pseudoElt, bool authorOnly = true) const; double devicePixelRatio() const; #if ENABLE(DATABASE) // HTML 5 client-side database PassRefPtr openDatabase(const String& name, const String& version, const String& displayName, unsigned long estimatedSize, ExceptionCode&); #endif #if ENABLE(DOM_STORAGE) // HTML 5 key/value storage Storage* sessionStorage() const; Storage* localStorage() const; #endif Console* console() const; #if ENABLE(OFFLINE_WEB_APPLICATIONS) DOMApplicationCache* applicationCache() const; #endif void postMessage(const String& message, MessagePort*, const String& targetOrigin, DOMWindow* source, ExceptionCode&); void postMessageTimerFired(PostMessageTimer*); void scrollBy(int x, int y) const; void scrollTo(int x, int y) const; void scroll(int x, int y) const { scrollTo(x, y); } void moveBy(float x, float y) const; void moveTo(float x, float y) const; void resizeBy(float x, float y) const; void resizeTo(float width, float height) const; EventListener* onabort() const; void setOnabort(PassRefPtr); EventListener* onblur() const; void setOnblur(PassRefPtr); EventListener* onchange() const; void setOnchange(PassRefPtr); EventListener* onclick() const; void setOnclick(PassRefPtr); EventListener* ondblclick() const; void setOndblclick(PassRefPtr); EventListener* onerror() const; void setOnerror(PassRefPtr); EventListener* onfocus() const; void setOnfocus(PassRefPtr); EventListener* onkeydown() const; void setOnkeydown(PassRefPtr); EventListener* onkeypress() const; void setOnkeypress(PassRefPtr); EventListener* onkeyup() const; void setOnkeyup(PassRefPtr); EventListener* onload() const; void setOnload(PassRefPtr); EventListener* onmousedown() const; void setOnmousedown(PassRefPtr); EventListener* onmousemove() const; void setOnmousemove(PassRefPtr); EventListener* onmouseout() const; void setOnmouseout(PassRefPtr); EventListener* onmouseover() const; void setOnmouseover(PassRefPtr); EventListener* onmouseup() const; void setOnmouseup(PassRefPtr); EventListener* onmousewheel() const; void setOnmousewheel(PassRefPtr); EventListener* onreset() const; void setOnreset(PassRefPtr); EventListener* onresize() const; void setOnresize(PassRefPtr); EventListener* onscroll() const; void setOnscroll(PassRefPtr); EventListener* onsearch() const; void setOnsearch(PassRefPtr); EventListener* onselect() const; void setOnselect(PassRefPtr); EventListener* onsubmit() const; void setOnsubmit(PassRefPtr); EventListener* onunload() const; void setOnunload(PassRefPtr); EventListener* onbeforeunload() const; void setOnbeforeunload(PassRefPtr); EventListener* onwebkitanimationstart() const; void setOnwebkitanimationstart(PassRefPtr); EventListener* onwebkitanimationiteration() const; void setOnwebkitanimationiteration(PassRefPtr); EventListener* onwebkitanimationend() const; void setOnwebkitanimationend(PassRefPtr); EventListener* onwebkittransitionend() const; void setOnwebkittransitionend(PassRefPtr); // These methods are used for GC marking. See JSDOMWindow::mark() in // JSDOMWindowCustom.cpp. Screen* optionalScreen() const { return m_screen.get(); } DOMSelection* optionalSelection() const { return m_selection.get(); } History* optionalHistory() const { return m_history.get(); } BarInfo* optionalLocationbar() const { return m_locationbar.get(); } BarInfo* optionalMenubar() const { return m_menubar.get(); } BarInfo* optionalPersonalbar() const { return m_personalbar.get(); } BarInfo* optionalScrollbars() const { return m_scrollbars.get(); } BarInfo* optionalStatusbar() const { return m_statusbar.get(); } BarInfo* optionalToolbar() const { return m_toolbar.get(); } Console* optionalConsole() const { return m_console.get(); } Navigator* optionalNavigator() const { return m_navigator.get(); } Location* optionalLocation() const { return m_location.get(); } #if ENABLE(DOM_STORAGE) Storage* optionalSessionStorage() const { return m_sessionStorage.get(); } Storage* optionalLocalStorage() const { return m_sessionStorage.get(); } #endif #if ENABLE(OFFLINE_WEB_APPLICATIONS) DOMApplicationCache* optionalApplicationCache() const { return m_applicationCache.get(); } #endif private: DOMWindow(Frame*); void setInlineEventListenerForType(const AtomicString& eventType, PassRefPtr); EventListener* inlineEventListenerForType(const AtomicString& eventType) const; RefPtr m_securityOrigin; KURL m_url; Frame* m_frame; mutable RefPtr m_screen; mutable RefPtr m_selection; mutable RefPtr m_history; mutable RefPtr m_locationbar; mutable RefPtr m_menubar; mutable RefPtr m_personalbar; mutable RefPtr m_scrollbars; mutable RefPtr m_statusbar; mutable RefPtr m_toolbar; mutable RefPtr m_console; mutable RefPtr m_navigator; mutable RefPtr m_location; #if ENABLE(DOM_STORAGE) mutable RefPtr m_sessionStorage; mutable RefPtr m_localStorage; #endif #if ENABLE(OFFLINE_WEB_APPLICATIONS) mutable RefPtr m_applicationCache; #endif }; } // namespace WebCore #endif