18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2006, 2007, 2008, 2009 Apple, Inc. All rights reserved.
3db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef ChromeClient_h
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ChromeClient_h
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
24bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include "AXObjectCache.h"
255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "Console.h"
265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "Cursor.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FocusDirection.h"
285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "GraphicsContext.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HostWindow.h"
30db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include "PopupMenu.h"
31db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include "PopupMenuClient.h"
325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "ScrollTypes.h"
33db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include "SearchPopupMenu.h"
3481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "WebCoreKeyboardUIMode.h"
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Forward.h>
365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include <wtf/PassOwnPtr.h>
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Vector.h>
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef __OBJC__
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass NSMenu;
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass NSResponder;
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
46bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    class AccessibilityObject;
47ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    class Element;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class FileChooser;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class FloatRect;
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class Frame;
518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    class Geolocation;
522bde8e466a4451c7319e3a072d118917957d6554Steve Block    class GraphicsLayer;
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class HitTestResult;
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class IntRect;
55e14391e94c850b8bd03680c23b38978db68687a8John Reck    class NavigationAction;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class Node;
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class Page;
58e14391e94c850b8bd03680c23b38978db68687a8John Reck    class PopupMenuClient;
59db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    class SecurityOrigin;
605abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    class SharedGraphicsContext3D;
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class Widget;
628f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    struct FrameLoadRequest;
64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    struct ViewportArguments;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    struct WindowFeatures;
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING)
688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    class GraphicsLayer;
698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif
708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(NOTIFICATIONS)
72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    class NotificationPresenter;
73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
74231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class ChromeClient {
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void chromeDestroyed() = 0;
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void setWindowRect(const FloatRect&) = 0;
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual FloatRect windowRect() = 0;
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual FloatRect pageRect() = 0;
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual float scaleFactor() = 0;
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void focus() = 0;
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void unfocus() = 0;
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool canTakeFocus(FocusDirection) = 0;
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void takeFocus(FocusDirection) = 0;
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        virtual void focusedNodeChanged(Node*) = 0;
9328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        virtual void focusedFrameChanged(Frame*) = 0;
94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // The Frame pointer provides the ChromeClient with context about which
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Frame wants to create the new Page.  Also, the newly created window
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // should not be shown to the user until the ChromeClient of the newly
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // created Page has its show method called.
9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // The FrameLoadRequest parameter is only for ChromeClient to check if the
10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // request could be fulfilled.  The ChromeClient should not load the request.
101e14391e94c850b8bd03680c23b38978db68687a8John Reck        virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&) = 0;
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void show() = 0;
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool canRunModal() = 0;
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void runModal() = 0;
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void setToolbarsVisible(bool) = 0;
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool toolbarsVisible() = 0;
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void setStatusbarVisible(bool) = 0;
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool statusbarVisible() = 0;
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void setScrollbarsVisible(bool) = 0;
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool scrollbarsVisible() = 0;
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void setMenubarVisible(bool) = 0;
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool menubarVisible() = 0;
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void setResizable(bool) = 0;
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, unsigned int lineNumber, const String& sourceID) = 0;
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool canRunBeforeUnloadConfirmPanel() = 0;
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool runBeforeUnloadConfirmPanel(const String& message, Frame* frame) = 0;
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void closeWindowSoon() = 0;
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void runJavaScriptAlert(Frame*, const String&) = 0;
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool runJavaScriptConfirm(Frame*, const String&) = 0;
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool runJavaScriptPrompt(Frame*, const String& message, const String& defaultValue, String& result) = 0;
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void setStatusbarText(const String&) = 0;
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool shouldInterruptJavaScript() = 0;
13381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        virtual KeyboardUIMode keyboardUIMode() = 0;
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13554cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block        virtual void* webView() const = 0;
13654cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block
1372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(REGISTER_PROTOCOL_HANDLER)
1382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        virtual void registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title) = 0;
1392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
1402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual IntRect windowResizerRect() const = 0;
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Methods used by HostWindow.
144dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        virtual void invalidateWindow(const IntRect&, bool) = 0;
145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        virtual void invalidateContentsAndWindow(const IntRect&, bool) = 0;
146dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        virtual void invalidateContentsForSlowScroll(const IntRect&, bool) = 0;
147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        virtual void scroll(const IntSize&, const IntRect&, const IntRect&) = 0;
14828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#if ENABLE(TILED_BACKING_STORE)
1492bde8e466a4451c7319e3a072d118917957d6554Steve Block        virtual void delegatedScrollRequested(const IntPoint&) = 0;
15028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual IntPoint screenToWindow(const IntPoint&) const = 0;
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual IntRect windowToScreen(const IntRect&) const = 0;
153231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual PlatformPageClient platformPageClient() const = 0;
154967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        virtual void scrollbarsModeDidChange() const = 0;
155967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        virtual void setCursor(const Cursor&) = 0;
156ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#if ENABLE(REQUEST_ANIMATION_FRAME)
157ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        virtual void scheduleAnimation() = 0;
158ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#endif
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // End methods used by HostWindow.
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
161a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        virtual void dispatchViewportDataDidChange(const ViewportArguments&) const { }
162a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
163967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        virtual void contentsSizeChanged(Frame*, const IntSize&) const = 0;
164967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const = 0; // Currently only Mac has a non empty implementation.
165967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
166e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        virtual bool shouldMissingPluginMessageBeButton() const { return false; }
167ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual void missingPluginButtonClicked(Element*) const { }
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags) = 0;
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void setToolTip(const String&, TextDirection) = 0;
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void print(Frame*) = 0;
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1748ccf722629b08f2a06b2cadbdc3d0c9dc885e25dBen Murdoch#if ENABLE(DATABASE)
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void exceededDatabaseQuota(Frame*, const String& databaseName) = 0;
1768ccf722629b08f2a06b2cadbdc3d0c9dc885e25dBen Murdoch#endif
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
178c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu#if ENABLE(OFFLINE_WEB_APPLICATIONS)
179c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu        // Callback invoked when the application cache fails to save a cache object
180c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu        // because storing it would grow the database file past its defined maximum
181c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu        // size or past the amount of free space on the device.
182c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu        // The chrome client would need to take some action such as evicting some
183c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu        // old caches.
184c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu        virtual void reachedMaxAppCacheSize(int64_t spaceNeeded) = 0;
185db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
186db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        // Callback invoked when the application cache origin quota is reached. This
187db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        // means that the resources attempting to be cached via the manifest are
188db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        // more than allowed on this origin. This callback allows the chrome client
189db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        // to take action, such as prompting the user to ask to increase the quota
190db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        // for this origin.
191db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        virtual void reachedApplicationCacheOriginQuota(SecurityOrigin* origin) = 0;
192c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu#endif
193c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT)
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void dashboardRegionsChanged();
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
198231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(NOTIFICATIONS)
199231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual NotificationPresenter* notificationPresenter() const = 0;
200231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
201231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void populateVisitedLinks();
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual FloatRect customHighlightRect(Node*, const AtomicString& type, const FloatRect& lineRect);
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void paintCustomHighlight(Node*, const AtomicString& type, const FloatRect& boxRect, const FloatRect& lineRect,
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            bool behindText, bool entireLine);
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool shouldReplaceWithGeneratedFileForUpload(const String& path, String& generatedFilename);
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual String generateReplacementFile(const String& path);
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool paintCustomScrollbar(GraphicsContext*, const FloatRect&, ScrollbarControlSize,
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                          ScrollbarControlState, ScrollbarPart pressedPart, bool vertical,
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                          float value, float proportion, ScrollbarControlPartMask);
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool paintCustomScrollCorner(GraphicsContext*, const FloatRect&);
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        virtual bool paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&);
2172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
218f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        // FIXME: Remove once all ports are using client-based geolocation. https://bugs.webkit.org/show_bug.cgi?id=40373
219f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        // For client-based geolocation, these two methods have moved to GeolocationClient. https://bugs.webkit.org/show_bug.cgi?id=50061
220231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        // This can be either a synchronous or asynchronous call. The ChromeClient can display UI asking the user for permission
221234ad679c5705a581292e45349c33513bbaa526aSteve Block        // to use Geolocation.
2225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) = 0;
223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*) = 0;
224f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) = 0;
226692e5dbf12901edacf14812a6fae25462920af42Steve Block        // Asynchronous request to load an icon for specified filenames.
227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        virtual void chooseIconForFiles(const Vector<String>&, FileChooser*) = 0;
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if ENABLE(DIRECTORY_UPLOAD)
2302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        // Asychronous request to enumerate all files in a directory chosen by the user.
2312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        virtual void enumerateChosenDirectory(const String&, FileChooser*) = 0;
2322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
2332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
234635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        // Notification that the given form element has changed. This function
235635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        // will be called frequently, so handling should be very fast.
236635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        virtual void formStateDidChange(const Node*) = 0;
2370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void formDidFocus(const Node*) { };
2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void formDidBlur(const Node*) { };
240635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
2418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING)
2428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        // Pass 0 as the GraphicsLayer to detatch the root layer.
2435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) = 0;
2448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        // Sets a flag to specify that the next time content is drawn to the window,
2458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        // the changes appear on the screen in synchrony with updates to GraphicsLayers.
2465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        virtual void setNeedsOneShotDrawingSynchronization() = 0;
2475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // Sets a flag to specify that the view needs to be updated, so we need
2485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // to do an eager layout before the drawing.
2490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void scheduleCompositingLayerSync() = 0;
250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        // Returns whether or not the client can render the composited layer,
251dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        // regardless of the settings.
252dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        virtual bool allowsAcceleratedCompositing() const { return true; }
2534a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch
2544a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch        enum CompositingTrigger {
2554a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch            ThreeDTransformTrigger = 1 << 0,
2564a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch            VideoTrigger = 1 << 1,
2574a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch            PluginTrigger = 1 << 2,
2584a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch            CanvasTrigger = 1 << 3,
2594a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch            AnimationTrigger = 1 << 4,
2604a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch            AllTriggers = 0xFFFFFFFF
2614a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch        };
2624a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch        typedef unsigned CompositingTriggerFlags;
2634a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch
2644a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch        // Returns a bitfield indicating conditions that can trigger the compositor.
2654a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch        virtual CompositingTriggerFlags allowedCompositingTriggers() const { return static_cast<CompositingTriggerFlags>(AllTriggers); }
2668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif
2678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
268231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual bool supportsFullscreenForNode(const Node*) { return false; }
269231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual void enterFullscreenForNode(Node*) { }
270231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual void exitFullscreenForNode(Node*) { }
271f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        virtual bool requiresFullscreenForVideoPlayback() { return false; }
2726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
2735ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if ENABLE(FULLSCREEN_API)
2742bde8e466a4451c7319e3a072d118917957d6554Steve Block        virtual bool supportsFullScreenForElement(const Element*, bool) { return false; }
2755ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        virtual void enterFullScreenForElement(Element*) { }
2765ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        virtual void exitFullScreenForElement(Element*) { }
277cad810f21b803229eb11403f9209855525a25d57Steve Block        virtual void fullScreenRendererChanged(RenderBox*) { }
2782bde8e466a4451c7319e3a072d118917957d6554Steve Block        virtual void setRootFullScreenLayer(GraphicsLayer*) { }
2795ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif
2805ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
2816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#if ENABLE(TILED_BACKING_STORE)
2826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        virtual IntRect visibleRectForTiledBackingStore() const { return IntRect(); }
2836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif
2846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual NSResponder *firstResponder() { return 0; }
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void makeFirstResponder(NSResponder *) { }
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void willPopUpMenu(NSMenu *) { }
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
292967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if PLATFORM(WIN)
293967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        virtual void setLastSetCursorToCurrentCursor() = 0;
294967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif
295967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
296f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch#if ENABLE(TOUCH_EVENTS)
297d1919980a4bbb7f3aa73a6a83110fbec0c220e59Ben Murdoch        virtual void needTouchEvents(bool) = 0;
298f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch#endif
299f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch
300db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        virtual bool selectItemWritingDirectionIsNatural() = 0;
3012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        virtual bool selectItemAlignmentFollowsMenuWritingDirection() = 0;
302db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const = 0;
303db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const = 0;
304dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
30528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#if ENABLE(CONTEXT_MENUS)
30628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        virtual void showContextMenu() = 0;
30728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif
30828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
309e1a0cd8247467a70fed9f6099fc9c65ec35ae23eKristian Monsen        virtual void postAccessibilityNotification(AccessibilityObject*, AXObjectCache::AXNotification) { }
310e1a0cd8247467a70fed9f6099fc9c65ec35ae23eKristian Monsen
31109b60ab8488b362c96df8f268613aafaeebfcfa1Steve Block        virtual void didCompleteRubberBandForMainFrame(const IntSize&) const { }
31209b60ab8488b362c96df8f268613aafaeebfcfa1Steve Block
3132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        enum DialogType {
3142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            AlertDialog = 0,
3152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            ConfirmDialog = 1,
3162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            PromptDialog = 2,
3172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            HTMLDialog = 3,
3182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            NumDialogTypes = 4
3192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        };
3202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        virtual void willRunModalDialogDuringPageDismissal(const DialogType&) const { }
321bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch
3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    protected:
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual ~ChromeClient() { }
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ChromeClient_h
329