/* * 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 #if USE(V8) #include #endif #include namespace WebCore { class BarInfo; class CSSRuleList; class CSSStyleDeclaration; class Console; class DOMSelection; class Database; class Document; class Element; class FloatRect; class Frame; class History; class Location; class Navigator; class PostMessageTimer; class Screen; class String; #if USE(V8) class ScheduledAction; class PausedTimeouts; class DOMWindowTimer; #endif #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, 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; // 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*); 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 private: void updateLayout() const; #if USE(V8) public: // DOM methods & attributes for Window. DOMWindow* open(const String& url = "", const String& name = "_blank", const String& options = ""); void back(); void forward(); Navigator* navigator(); void dump(const String&); Location* location(); // Change the current window location to a new location. // The function checks domain security. void setLocation(const String& loc); // void home(); // void stop(); void clearTimeout(int id); void clearInterval(int id) { clearTimeout(id); } void timerFired(DOMWindowTimer* timer); // void updateCommands(const String&); // // String escape(const String&); // String unescape(const String&); int installTimeout(ScheduledAction* a, int t, bool singleShot); void scheduleClose(); void clearAllTimeouts(); void pauseTimeouts(OwnPtr&); void resumeTimeouts(OwnPtr&); private: typedef HashMap TimeoutsMap; TimeoutsMap m_timeouts; #endif }; } // namespace WebCore #endif