1/* 2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 4 * Copyright (C) 2012, Samsung Electronics. All rights reserved. 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Library General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Library General Public License for more details. 15 * 16 * You should have received a copy of the GNU Library General Public License 17 * along with this library; see the file COPYING.LIB. If not, write to 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 * Boston, MA 02110-1301, USA. 20 */ 21 22#ifndef Chrome_h 23#define Chrome_h 24 25#include "Cursor.h" 26#include "FocusDirection.h" 27#include "HostWindow.h" 28#include <wtf/Forward.h> 29#include <wtf/RefPtr.h> 30 31#if PLATFORM(MAC) 32#ifndef __OBJC__ 33class NSView; 34#endif 35#endif 36 37namespace WebCore { 38 39class ChromeClient; 40class ColorChooser; 41class ColorChooserClient; 42class DateTimeChooser; 43class DateTimeChooserClient; 44class FileChooser; 45class FileIconLoader; 46class FloatRect; 47class Frame; 48class Geolocation; 49class HitTestResult; 50class IntRect; 51class NavigationAction; 52class Node; 53class Page; 54class PopupMenu; 55class PopupMenuClient; 56class PopupOpeningObserver; 57class SearchPopupMenu; 58 59struct DateTimeChooserParameters; 60struct FrameLoadRequest; 61struct ViewportArguments; 62struct WindowFeatures; 63 64class Chrome : public HostWindow { 65public: 66 ~Chrome(); 67 68 static PassOwnPtr<Chrome> create(Page*, ChromeClient*); 69 70 ChromeClient* client() { return m_client; } 71 72 // HostWindow methods. 73 virtual void invalidateRootView(const IntRect&, bool) OVERRIDE; 74 virtual void invalidateContentsAndRootView(const IntRect&, bool) OVERRIDE; 75 virtual void invalidateContentsForSlowScroll(const IntRect&, bool) OVERRIDE; 76 virtual void scroll(const IntSize&, const IntRect&, const IntRect&) OVERRIDE; 77#if USE(TILED_BACKING_STORE) 78 virtual void delegatedScrollRequested(const IntPoint& scrollPoint) OVERRIDE; 79#endif 80 virtual IntPoint screenToRootView(const IntPoint&) const OVERRIDE; 81 virtual IntRect rootViewToScreen(const IntRect&) const OVERRIDE; 82 virtual PlatformPageClient platformPageClient() const OVERRIDE; 83 virtual void scrollbarsModeDidChange() const OVERRIDE; 84 virtual void setCursor(const Cursor&) OVERRIDE; 85 virtual void setCursorHiddenUntilMouseMoves(bool) OVERRIDE; 86 87#if ENABLE(REQUEST_ANIMATION_FRAME) 88 virtual void scheduleAnimation() OVERRIDE; 89#endif 90 91 void scrollRectIntoView(const IntRect&) const; 92 93 void contentsSizeChanged(Frame*, const IntSize&) const; 94 void layoutUpdated(Frame*) const; 95 96 void setWindowRect(const FloatRect&) const; 97 FloatRect windowRect() const; 98 99 FloatRect pageRect() const; 100 101 void focus() const; 102 void unfocus() const; 103 104 bool canTakeFocus(FocusDirection) const; 105 void takeFocus(FocusDirection) const; 106 107 void focusedNodeChanged(Node*) const; 108 void focusedFrameChanged(Frame*) const; 109 110 Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&) const; 111 void show() const; 112 113 bool canRunModal() const; 114 bool canRunModalNow() const; 115 void runModal() const; 116 117 void setToolbarsVisible(bool) const; 118 bool toolbarsVisible() const; 119 120 void setStatusbarVisible(bool) const; 121 bool statusbarVisible() const; 122 123 void setScrollbarsVisible(bool) const; 124 bool scrollbarsVisible() const; 125 126 void setMenubarVisible(bool) const; 127 bool menubarVisible() const; 128 129 void setResizable(bool) const; 130 131 bool canRunBeforeUnloadConfirmPanel(); 132 bool runBeforeUnloadConfirmPanel(const String& message, Frame*); 133 134 void closeWindowSoon(); 135 136 void runJavaScriptAlert(Frame*, const String&); 137 bool runJavaScriptConfirm(Frame*, const String&); 138 bool runJavaScriptPrompt(Frame*, const String& message, const String& defaultValue, String& result); 139 void setStatusbarText(Frame*, const String&); 140 bool shouldInterruptJavaScript(); 141 142 IntRect windowResizerRect() const; 143 144 void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags); 145 146 void setToolTip(const HitTestResult&); 147 148 void print(Frame*); 149 150 void enableSuddenTermination(); 151 void disableSuddenTermination(); 152 153#if ENABLE(INPUT_TYPE_COLOR) 154 PassOwnPtr<ColorChooser> createColorChooser(ColorChooserClient*, const Color& initialColor); 155#endif 156#if ENABLE(DATE_AND_TIME_INPUT_TYPES) 157 PassRefPtr<DateTimeChooser> openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&); 158#endif 159 160 void runOpenPanel(Frame*, PassRefPtr<FileChooser>); 161 void loadIconForFiles(const Vector<String>&, FileIconLoader*); 162#if ENABLE(DIRECTORY_UPLOAD) 163 void enumerateChosenDirectory(FileChooser*); 164#endif 165 166 void dispatchViewportPropertiesDidChange(const ViewportArguments&) const; 167 168 bool requiresFullscreenForVideoPlayback(); 169 170#if PLATFORM(MAC) 171 void focusNSView(NSView*); 172#endif 173 174 bool selectItemWritingDirectionIsNatural(); 175 bool selectItemAlignmentFollowsMenuWritingDirection(); 176 bool hasOpenedPopup() const; 177 PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const; 178 PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const; 179 180 void registerPopupOpeningObserver(PopupOpeningObserver*); 181 void unregisterPopupOpeningObserver(PopupOpeningObserver*); 182 183private: 184 Chrome(Page*, ChromeClient*); 185 void notifyPopupOpeningObservers() const; 186 187 Page* m_page; 188 ChromeClient* m_client; 189 Vector<PopupOpeningObserver*> m_popupOpeningObservers; 190}; 191 192} 193 194#endif // Chrome_h 195