2
* Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
14
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
#include <WebCore/ChromeClient.h>
28
#include <WebCore/COMPtr.h>
29
#include <WebCore/GraphicsContext.h>
30
#include <WebCore/FocusDirection.h>
31
#include <WebCore/ScrollTypes.h>
32
#include <wtf/Forward.h>
33
#include <wtf/PassRefPtr.h>
36
class WebDesktopNotificationsDelegate;
38
interface IWebUIDelegate;
40
class WebChromeClient : public WebCore::ChromeClient {
42
WebChromeClient(WebView*);
44
virtual void chromeDestroyed();
46
virtual void* webView() const { return m_webView; }
47
virtual void setWindowRect(const WebCore::FloatRect&);
48
virtual WebCore::FloatRect windowRect();
50
virtual WebCore::FloatRect pageRect();
53
virtual void unfocus();
55
virtual bool canTakeFocus(WebCore::FocusDirection);
56
virtual void takeFocus(WebCore::FocusDirection);
58
virtual void focusedNodeChanged(WebCore::Node*);
59
virtual void focusedFrameChanged(WebCore::Frame*);
61
virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&, const WebCore::WindowFeatures&, const WebCore::NavigationAction&);
64
virtual bool canRunModal();
65
virtual void runModal();
67
virtual void setToolbarsVisible(bool);
68
virtual bool toolbarsVisible();
70
virtual void setStatusbarVisible(bool);
71
virtual bool statusbarVisible();
73
virtual void setScrollbarsVisible(bool);
74
virtual bool scrollbarsVisible();
76
virtual void setMenubarVisible(bool);
77
virtual bool menubarVisible();
79
virtual void setResizable(bool);
81
virtual void addMessageToConsole(WebCore::MessageSource source, WebCore::MessageType type, WebCore::MessageLevel level, const WTF::String& message, unsigned line, const WTF::String& url);
83
virtual bool canRunBeforeUnloadConfirmPanel();
84
virtual bool runBeforeUnloadConfirmPanel(const WTF::String& message, WebCore::Frame* frame);
86
virtual void closeWindowSoon();
88
virtual void runJavaScriptAlert(WebCore::Frame*, const WTF::String&);
89
virtual bool runJavaScriptConfirm(WebCore::Frame*, const WTF::String&);
90
virtual bool runJavaScriptPrompt(WebCore::Frame*, const WTF::String& message, const WTF::String& defaultValue, WTF::String& result);
91
virtual void setStatusbarText(const WTF::String&);
92
virtual bool shouldInterruptJavaScript();
94
virtual WebCore::KeyboardUIMode keyboardUIMode();
95
virtual WebCore::IntRect windowResizerRect() const;
97
virtual void invalidateRootView(const WebCore::IntRect&, bool);
98
virtual void invalidateContentsAndRootView(const WebCore::IntRect&, bool);
99
virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool);
100
virtual void scroll(const WebCore::IntSize& scrollDelta, const WebCore::IntRect& rectToScroll, const WebCore::IntRect& clipRect);
102
virtual WebCore::IntPoint screenToRootView(const WebCore::IntPoint&) const;
103
virtual WebCore::IntRect rootViewToScreen(const WebCore::IntRect&) const;
104
virtual PlatformPageClient platformPageClient() const;
105
virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const;
107
virtual void scrollbarsModeDidChange() const { }
108
virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags);
109
virtual bool shouldUnavailablePluginMessageBeButton(WebCore::RenderEmbeddedObject::PluginUnavailabilityReason) const;
110
virtual void unavailablePluginButtonClicked(WebCore::Element*, WebCore::RenderEmbeddedObject::PluginUnavailabilityReason) const;
112
virtual void setToolTip(const WTF::String&, WebCore::TextDirection);
114
virtual void print(WebCore::Frame*);
116
#if ENABLE(SQL_DATABASE)
117
virtual void exceededDatabaseQuota(WebCore::Frame*, const WTF::String&);
120
virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
121
virtual void reachedApplicationCacheOriginQuota(WebCore::SecurityOrigin*, int64_t totalSpaceNeeded);
123
virtual void populateVisitedLinks();
125
virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>);
126
virtual void loadIconForFiles(const Vector<WTF::String>&, WebCore::FileIconLoader*);
128
virtual void setCursor(const WebCore::Cursor&);
129
virtual void setCursorHiddenUntilMouseMoves(bool);
130
virtual void setLastSetCursorToCurrentCursor();
132
virtual void formStateDidChange(const WebCore::Node*) { }
134
#if USE(ACCELERATED_COMPOSITING)
135
// Pass 0 as the GraphicsLayer to detatch the root layer.
136
virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*);
137
// Sets a flag to specify that the next time content is drawn to the window,
138
// the changes appear on the screen in synchrony with updates to GraphicsLayers.
139
virtual void setNeedsOneShotDrawingSynchronization() { }
140
// Sets a flag to specify that the view needs to be updated, so we need
141
// to do an eager layout before the drawing.
142
virtual void scheduleCompositingLayerFlush();
145
#if PLATFORM(WIN) && USE(AVFOUNDATION)
146
virtual WebCore::GraphicsDeviceAdapter* graphicsDeviceAdapter() const OVERRIDE;
149
virtual void scrollRectIntoView(const WebCore::IntRect&) const { }
152
virtual bool supportsFullscreenForNode(const WebCore::Node*);
153
virtual void enterFullscreenForNode(WebCore::Node*);
154
virtual void exitFullscreenForNode(WebCore::Node*);
157
#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
158
virtual WebCore::NotificationClient* notificationPresenter() const { return reinterpret_cast<WebCore::NotificationClient*>(m_notificationsDelegate.get()); }
161
virtual bool selectItemWritingDirectionIsNatural();
162
virtual bool selectItemAlignmentFollowsMenuWritingDirection();
163
virtual bool hasOpenedPopup() const;
164
virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
165
virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
167
#if ENABLE(FULLSCREEN_API)
168
virtual bool supportsFullScreenForElement(const WebCore::Element*, bool withKeyboard);
169
virtual void enterFullScreenForElement(WebCore::Element*);
170
virtual void exitFullScreenForElement(WebCore::Element*);
173
virtual bool shouldRubberBandInDirection(WebCore::ScrollDirection) const { return true; }
174
virtual void numWheelEventHandlersChanged(unsigned) { }
177
COMPtr<IWebUIDelegate> uiDelegate();
181
#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
182
OwnPtr<WebDesktopNotificationsDelegate> m_notificationsDelegate;