1/*
2 * Copyright (C) 2007 Holger Hans Peter Freyther
3 * Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia
4 * Copyright (C) 2009-2010 ProFUSION embedded systems
5 * Copyright (C) 2009-2010 Samsung Electronics
6 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 * Library General Public License for more details.
17 *
18 * You should have received a copy of the GNU Library General Public License
19 * along with this library; see the file COPYING.LIB.  If not, write to
20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
22 */
23
24#ifndef ChromeClientEfl_h
25#define ChromeClientEfl_h
26
27#include "ChromeClient.h"
28#include "KURL.h"
29#include "PopupMenu.h"
30
31#if ENABLE(INPUT_TYPE_COLOR)
32#include "ColorChooser.h"
33#endif
34
35#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
36#include "NotificationClient.h"
37#endif
38
39namespace WebCore {
40
41class ChromeClientEfl : public ChromeClient {
42public:
43    explicit ChromeClientEfl(Evas_Object* view);
44    virtual ~ChromeClientEfl();
45
46    virtual void chromeDestroyed();
47
48    virtual void setWindowRect(const FloatRect&);
49    virtual FloatRect windowRect();
50
51    virtual FloatRect pageRect();
52
53    virtual void focus();
54    virtual void unfocus();
55
56    virtual bool canTakeFocus(FocusDirection);
57    virtual void takeFocus(FocusDirection);
58
59    virtual void focusedNodeChanged(Node*);
60    virtual void focusedFrameChanged(Frame*);
61
62    virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&);
63    virtual void show();
64
65    virtual bool canRunModal();
66    virtual void runModal();
67
68    virtual void setToolbarsVisible(bool);
69    virtual bool toolbarsVisible();
70
71    virtual void setStatusbarVisible(bool);
72    virtual bool statusbarVisible();
73
74    virtual void setScrollbarsVisible(bool);
75    virtual bool scrollbarsVisible();
76
77    virtual void setMenubarVisible(bool);
78    virtual bool menubarVisible();
79
80    virtual void createSelectPopup(PopupMenuClient*, int selected, const IntRect&);
81    virtual bool destroySelectPopup();
82
83    virtual void setResizable(bool);
84
85    virtual void addMessageToConsole(MessageSource, MessageLevel, const String& message,
86                                     unsigned lineNumber, unsigned columnNumber, const String& sourceID);
87
88    virtual bool canRunBeforeUnloadConfirmPanel();
89    virtual bool runBeforeUnloadConfirmPanel(const String& message, Frame*);
90
91    virtual void closeWindowSoon();
92
93    virtual void runJavaScriptAlert(Frame*, const String&);
94    virtual bool runJavaScriptConfirm(Frame*, const String&);
95    virtual bool runJavaScriptPrompt(Frame*, const String& message, const String& defaultValue, String& result);
96    virtual void setStatusbarText(const String&);
97    virtual bool shouldInterruptJavaScript();
98    virtual WebCore::KeyboardUIMode keyboardUIMode();
99
100    virtual IntRect windowResizerRect() const;
101
102    virtual void contentsSizeChanged(Frame*, const IntSize&) const;
103    virtual IntPoint screenToRootView(const IntPoint&) const;
104    virtual IntRect rootViewToScreen(const IntRect&) const;
105    virtual PlatformPageClient platformPageClient() const;
106
107    virtual void scrollbarsModeDidChange() const;
108    virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
109
110    virtual void setToolTip(const String&, TextDirection);
111
112    virtual void print(Frame*);
113
114#if ENABLE(SQL_DATABASE)
115    virtual void exceededDatabaseQuota(Frame*, const String&, DatabaseDetails);
116#endif
117
118#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
119    virtual WebCore::NotificationClient* notificationPresenter() const;
120#endif
121
122    virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
123    virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*, int64_t totalSpaceNeeded);
124
125    virtual void populateVisitedLinks();
126
127#if ENABLE(TOUCH_EVENTS)
128    virtual void needTouchEvents(bool);
129#endif
130
131#if USE(ACCELERATED_COMPOSITING)
132    virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*);
133    virtual void setNeedsOneShotDrawingSynchronization();
134    virtual void scheduleCompositingLayerFlush();
135    virtual CompositingTriggerFlags allowedCompositingTriggers() const;
136#endif
137
138#if ENABLE(FULLSCREEN_API)
139    virtual bool supportsFullScreenForElement(const WebCore::Element*, bool withKeyboard);
140    virtual void enterFullScreenForElement(WebCore::Element*);
141    virtual void exitFullScreenForElement(WebCore::Element*);
142#endif
143
144#if ENABLE(INPUT_TYPE_COLOR)
145    virtual PassOwnPtr<ColorChooser> createColorChooser(ColorChooserClient*, const Color&);
146    virtual void removeColorChooser();
147    virtual void updateColorChooser(const Color&);
148#endif
149
150    virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>);
151    virtual void loadIconForFiles(const Vector<String>&, FileIconLoader*);
152    virtual void formStateDidChange(const Node*);
153
154    virtual void setCursor(const Cursor&);
155    virtual void setCursorHiddenUntilMouseMoves(bool);
156
157#if ENABLE(REQUEST_ANIMATION_FRAME) && !USE(REQUEST_ANIMATION_FRAME_TIMER)
158    virtual void scheduleAnimation();
159    virtual void serviceScriptedAnimations();
160#endif
161
162    virtual void scrollRectIntoView(const IntRect&) const { }
163
164    virtual void cancelGeolocationPermissionForFrame(Frame*, Geolocation*);
165
166    virtual void invalidateContents(const IntRect&, bool);
167    virtual void invalidateRootView(const IntRect&, bool);
168    virtual void invalidateContentsAndRootView(const IntRect&, bool);
169    virtual void invalidateContentsForSlowScroll(const IntRect&, bool);
170    virtual void scroll(const IntSize&, const IntRect&, const IntRect&);
171    virtual void cancelGeolocationPermissionRequestForFrame(Frame*);
172    virtual void iconForFiles(const Vector<String, 0u>&, PassRefPtr<FileChooser>);
173
174    virtual void dispatchViewportPropertiesDidChange(const ViewportArguments&) const;
175
176    virtual bool selectItemWritingDirectionIsNatural();
177    virtual bool selectItemAlignmentFollowsMenuWritingDirection();
178    virtual bool hasOpenedPopup() const;
179    virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
180    virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
181
182    virtual bool shouldRubberBandInDirection(WebCore::ScrollDirection) const { return true; }
183    virtual void numWheelEventHandlersChanged(unsigned) { }
184
185#if USE(TILED_BACKING_STORE)
186    virtual void delegatedScrollRequested(const IntPoint& scrollPoint);
187    virtual IntRect visibleRectForTiledBackingStore() const;
188#endif
189
190    Evas_Object* m_view;
191    KURL m_hoveredLinkURL;
192#if ENABLE(FULLSCREEN_API)
193    RefPtr<Element> m_fullScreenElement;
194#endif
195};
196}
197
198#endif // ChromeClientEfl_h
199