2 * Copyright (C) 2011 Samsung Electronics
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
26 #ifndef PageClientImpl_h
27 #define PageClientImpl_h
29 #include "PageClient.h"
33 #include "WebEditCommandProxy.h"
34 #include <WebCore/ViewportArguments.h>
36 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
37 #if ENABLE(TIZEN_WEBKIT2_TILED_AC)
38 #include "DrawingAreaProxyImpl.h"
39 #include <WebCore/Color.h>
42 #if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
43 #include "TextSelection.h"
45 #if ENABLE(TIZEN_OFFLINE_PAGE_SAVE)
46 #include "OfflinePageSave.h"
48 #if ENABLE(TIZEN_DRAG_SUPPORT)
51 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
52 #include "FormDataCandidate.h"
54 #endif // #if OS(TIZEN)
60 #if ENABLE(TIZEN_WEBKIT2_TILED_SCROLLBAR)
61 class MainFrameScrollbarTizen;
64 #if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
68 #if ENABLE(TIZEN_WEBKIT2_CLIPBOARD_HELPER)
69 class ClipboardHelper;
72 #if ENABLE(TIZEN_DRAG_SUPPORT)
76 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
77 class FormDataCandidate;
80 class PageClientImpl : public PageClient {
82 static PassOwnPtr<PageClientImpl> create(EwkViewImpl* viewImpl)
84 return adoptPtr(new PageClientImpl(viewImpl));
86 virtual ~PageClientImpl();
88 EwkViewImpl* viewImpl() const;
91 struct ViewportConstraints {
97 , contentsDefinedInitialScale(false)
98 , layoutSize(WebCore::IntSize())
105 bool contentsDefinedInitialScale;
106 WebCore::IntSize layoutSize;
109 ViewportConstraints viewportConstraints() { return m_viewportConstraints; }
110 ViewportConstraints computeViewportConstraints(const WebCore::ViewportAttributes&);
111 double adjustScaleWithViewport(double);
112 #if USE(TILED_BACKING_STORE) && ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
113 TIZEN_VIRTUAL void updateViewportSize(const WebCore::IntSize&, const int);
115 void initializeVisibleContentRect();
116 double availableMinimumScale();
117 void fitViewportToContent();
118 bool wasViewportFitsToContent() { return m_viewportFitsToContent; }
120 void setFocusedNodeRect(const WebCore::IntRect&);
121 WebCore::IntRect focusedNodeRect() { return m_focusedNodeRect; };
123 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
124 void textChangeInTextField(const String& name, const String& value);
127 void setViewFocused(bool focused) { m_viewFocused = focused; }
128 void setViewWindowActive(bool active) { m_viewWindowActive = active; }
129 void updateFormNavigation(int length, int offset);
131 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
132 #if ENABLE(TIZEN_WEBKIT2_TILED_AC)
133 DrawingAreaProxy* drawingArea() const;
136 const WebCore::IntPoint scrollPosition();
137 WebCore::IntRect adjustVisibleContentRect(WebCore::IntRect, float);
138 void setVisibleContentRect(const WebCore::IntRect&, float newScale, const WebCore::FloatPoint& trajectory = WebCore::FloatPoint());
139 TIZEN_VIRTUAL void displayViewport();
140 TIZEN_VIRTUAL void drawContents();
141 #if ENABLE(TIZEN_RUNTIME_BACKEND_SELECTION)
142 virtual void drawContents(BackingStore::PlatformGraphicsContext);
144 void scaleImage(double, WebCore::IntPoint);
145 void scaleContents(double, const WebCore::IntPoint&);
146 WebCore::IntRect visibleContentRect() { return m_visibleContentRect; }
148 #if ENABLE(TIZEN_WEBKIT2_TILED_SCROLLBAR)
149 void updateScrollbar();
150 void frameRectChanged();
151 void updateVisibility();
154 // FIXME: The concept of suspending content comes from webkit opensource's PageViewportController,
155 // so below code should be replaced when PageViewportController codes are merged.
156 // Please do not use below codes. They are only for scaling contents.
157 void suspendContent();
158 void resumeContent();
159 WebCore::FloatPoint boundContentsPositionAtScale(const WebCore::FloatPoint&, float scale);
161 float scaleFactor() { return page()->pageScaleFactor(); }
162 WebCore::IntPoint scrollPosition() { return page()->scrollPosition(); }
163 #endif // #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
165 #if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
166 bool isTextSelectionDowned();
167 bool isTextSelectionMode();
168 void setIsTextSelectionMode(bool isTextSelectionMode);
169 void updateTextSelectionHandlesAndContextMenu(bool isShow, bool isScrolling = false);
170 bool textSelectionDown(const WebCore::IntPoint& point, bool isStartedTextSelectionFromOutside = false);
171 void textSelectionMove(const WebCore::IntPoint& point, bool isStartedTextSelectionFromOutside = false);
172 void textSelectionUp(const WebCore::IntPoint& point, bool isStartedTextSelectionFromOutside = false);
173 bool isTextSelectionHandleDowned();
174 #if ENABLE(TIZEN_WEBKIT2_FOR_MOVING_TEXT_SELECTION_HANDLE_FROM_OSP)
175 void textSelectonHandleDown(const WebCore::IntPoint& point);
176 void textSelectonHandleMove(const WebCore::IntPoint& point);
177 void textSelectonHandleUp();
179 void requestToShowTextSelectionHandlesAndContextMenu();
182 #if ENABLE(TIZEN_OFFLINE_PAGE_SAVE)
183 void saveSerializedHTMLDataForMainPage(const String& serializedData, const String& fileName);
184 void saveSubresourcesData(Vector<WebSubresourceTizen>& subresourceData);
185 void startOfflinePageSave(String& path, String& url, String& title);
188 #if ENABLE(TIZEN_CLIPBOARD) || ENABLE(TIZEN_PASTEBOARD)
189 void setClipboardData(const String& data, const String& type);
190 void clearClipboardData();
193 #if ENABLE(TIZEN_WEBKIT2_CLIPBOARD_HELPER)
194 void pasteContextMenuSelected();
198 #if ENABLE(TIZEN_WEBKIT2_VIEW_VISIBILITY)
199 void setIsVisible(bool isVisible);
202 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
203 bool scrollBy(WebCore::IntSize);
204 void scrollTo(WebCore::IntPoint);
207 void setIsScrollableLayerFocused(const bool b) { m_isScrollableLayerFocused = b; }
208 bool isScrollableLayerFocused() const { return m_isScrollableLayerFocused; }
210 void setIsScrollableNodeFocused(const bool b) { m_isScrollableNodeFocused = b; }
211 bool isScrollableNodeFocused() const { return m_isScrollableNodeFocused; }
213 #if ENABLE(TIZEN_CSS_OVERFLOW_SCROLL_ACCELERATION)
214 void setOverflowResult(bool pressed, WebLayerID);
215 void findScrollableNode(const WebCore::IntPoint&);
218 #if ENABLE(TIZEN_CONTEXT_MENU_WEBKIT_2)
219 bool isContextMenuVisible() { return m_isContextMenuVisible; }
220 void setIsContextMenuVisible(bool isVisible) { m_isContextMenuVisible = isVisible; }
222 TIZEN_VIRTUAL void didRenderFrame();
223 #if ENABLE(TIZEN_WEBKIT2_TILED_AC)
224 void setBackgroundColor(double red, double green, double blue, double alpha);
225 TIZEN_VIRTUAL bool makeContextCurrent() { return true; }
227 #if ENABLE(TIZEN_WEBKIT2_GET_TEXT_STYLE_FOR_SELECTION)
228 void didGetTextStyleStateForSelection(int underlineState, int italicState, int boldState);
231 virtual void didFindZoomableArea(const WebCore::IntPoint&, const WebCore::IntRect&);
233 #if ENABLE(TIZEN_ICON_DATABASE)
234 virtual void didReceiveIcon();
237 #if ENABLE(TIZEN_WEBKIT2_CONTEXT_MENU_CLIPBOARD)
238 void clipboardContextMenuSelected();
239 bool isClipboardWindowOpened();
240 void closeClipboardWindow();
243 #if ENABLE(TIZEN_DRAG_SUPPORT)
244 void setDragPoint(const WebCore::IntPoint& point);
246 void setDragMode(bool isDragMode);
249 #if ENABLE(TIZEN_WEBKIT2_FOCUS_RING)
250 void hideFocusRing();
253 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
254 bool isShowingFormDataCandidate();
255 void updateFormDataCandidate(const Vector<String>& data);
256 void hideFormDataCandidate();
257 void showFormDataCandidate(const WebCore::IntRect& rect);
260 #if ENABLE(TIZEN_PRERENDERING_FOR_ROTATION)
261 void setWaitFrameOfNewViewortSize(bool waitFrameOfNewViewortSize) { m_waitFrameOfNewViewortSize = waitFrameOfNewViewortSize; }
264 #endif // #if OS(TIZEN)
268 virtual PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
269 virtual void setViewNeedsDisplay(const WebCore::IntRect&);
270 virtual void displayView();
271 virtual void scrollView(const WebCore::IntRect&, const WebCore::IntSize&);
272 virtual bool isViewWindowActive() { return m_viewWindowActive; }
273 virtual bool isViewFocused() { return m_viewFocused; }
274 virtual bool isViewVisible();
275 virtual bool isViewInWindow();
277 virtual void processDidCrash();
278 virtual void didRelaunchProcess();
279 virtual void pageClosed();
281 virtual void toolTipChanged(const String&, const String&);
283 virtual void setCursor(const WebCore::Cursor&);
284 virtual void setCursorHiddenUntilMouseMoves(bool);
285 virtual void didChangeViewportProperties(const WebCore::ViewportAttributes&);
287 virtual void registerEditCommand(PassRefPtr<WebEditCommandProxy>, WebPageProxy::UndoOrRedo);
288 virtual void clearAllEditCommands();
289 virtual bool canUndoRedo(WebPageProxy::UndoOrRedo);
290 virtual void executeUndoRedo(WebPageProxy::UndoOrRedo);
291 virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&);
292 virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&);
293 virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&);
294 virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&);
296 void updateTextInputState();
297 virtual void handleDownloadRequest(DownloadProxy*);
299 virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool);
300 #if ENABLE(GESTURE_EVENTS)
301 virtual void doneWithGestureEvent(const WebGestureEvent&, bool wasEventHandled);
303 #if ENABLE(TOUCH_EVENTS)
304 virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled);
307 virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*);
308 virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*);
310 #if ENABLE(INPUT_TYPE_COLOR)
311 virtual PassRefPtr<WebColorChooserProxy> createColorChooserProxy(WebPageProxy*, const WebCore::Color& initialColor);
314 virtual void setFindIndicator(PassRefPtr<FindIndicator>, bool, bool);
315 #if ENABLE(TIZEN_WEBKIT2_TILED_AC)
316 TIZEN_VIRTUAL void initializeAcceleratedCompositingMode();
317 TIZEN_VIRTUAL void finalizeAcceleratedCompositingMode() {}
318 virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) {}
319 virtual void exitAcceleratedCompositingMode() {}
321 virtual void updateAcceleratedCompositingMode(const LayerTreeContext&);
324 virtual void didChangeScrollbarsForMainFrame() const;
327 #if ENABLE(TIZEN_WEBKIT2_TILED_SCROLLBAR)
328 void createScrollbarIfNeeded(bool horizontalBar, bool verticalBar);
331 virtual void didFirstVisuallyNonEmptyLayoutForMainFrame();
332 virtual void didChangeContentsSize(const WebCore::IntSize);
333 virtual void pageScaleFactorDidChange();
336 virtual void didCommitLoadForMainFrame(bool);
337 virtual void didFinishLoadingDataForCustomRepresentation(const String&, const CoreIPC::DataReference&);
338 virtual double customRepresentationZoomFactor();
339 virtual void setCustomRepresentationZoomFactor(double);
341 virtual void flashBackingStoreUpdates(const Vector<WebCore::IntRect>&);
342 virtual void findStringInCustomRepresentation(const String&, FindOptions, unsigned);
343 virtual void countStringMatchesInCustomRepresentation(const String&, FindOptions, unsigned);
345 #if USE(TILED_BACKING_STORE)
346 virtual void pageDidRequestScroll(const WebCore::IntPoint&);
349 #if ENABLE(TIZEN_WEBKIT2_HISTORICAL_RESTORE_VISIBLE_CONTENT_RECT)
350 virtual void pageDidRequestRestoreVisibleContentRect(const WebCore::IntPoint&, float);
353 #if ENABLE(TIZEN_DRAG_SUPPORT)
354 virtual void startDrag(const WebCore::DragData&, PassRefPtr<ShareableBitmap> dragImage);
357 #if ENABLE(TIZEN_REGISTER_PROTOCOL_HANDLER)
358 virtual void registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title);
360 #if ENABLE(TIZEN_CUSTOM_SCHEME_HANDLER)
361 virtual unsigned int isProtocolHandlerRegistered(const String& scheme, const String& baseURL, const String& url);
362 virtual void unregisterProtocolHandler(const String& scheme, const String& baseURL, const String& url);
364 #if ENABLE(TIZEN_REGISTER_CONTENT_HANDLER)
365 virtual void registerContentHandler(const String& mimeType, const String& baseURL, const String& url, const String& title);
366 virtual unsigned int isContentHandlerRegistered(const String& mimeType, const String& baseURL, const String& url);
367 virtual void unregisterContentHandler(const String& mimeType, const String& baseURL, const String& url);
369 #if ENABLE(TIZEN_SEARCH_PROVIDER)
370 virtual void addSearchProvider(const String& baseURL, const String& engineURL);
371 virtual unsigned long isSearchProviderInstalled(const String& baseURL, const String& engineURL);
374 #if ENABLE(TIZEN_SUPPORT_WEBAPP_META_TAG)
375 virtual bool getStandaloneStatus();
378 #if ENABLE(SCREEN_ORIENTATION_SUPPORT) && ENABLE(TIZEN_SCREEN_ORIENTATION_SUPPORT)
379 virtual bool lockOrientation(int willLockOrientation);
380 virtual void unlockOrientation();
384 explicit PageClientImpl(EwkViewImpl*);
386 virtual WebCore::IntSize viewSize();
388 EwkViewImpl* m_viewImpl;
391 ViewportConstraints m_viewportConstraints;
394 bool m_viewWindowActive;
396 bool m_pageDidRendered;
398 // Both angle and wasMinimized are added to handle device rotation
400 bool m_viewportFitsToContent;
402 WebCore::IntRect m_focusedNodeRect;
404 #if ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
405 WebCore::IntRect m_visibleContentRect;
408 // FIXME: The concept of suspending content comes from webkit opensource's PageViewportController,
409 // so below code should be replaced when PageViewportController codes are merged.
410 // Please do not use below codes. They are only for scaling contents.
411 bool m_hasSuspendedContent;
412 #endif // ENABLE(TIZEN_WEBKIT2_TILED_BACKING_STORE)
414 #if ENABLE(TIZEN_WEBKIT2_HISTORICAL_RESTORE_VISIBLE_CONTENT_RECT)
415 WebCore::IntPoint m_restoredScrollPosition;
416 float m_restoredScaleFactor;
419 #if ENABLE(TIZEN_WEBKIT2_TILED_SCROLLBAR)
420 RefPtr<MainFrameScrollbarTizen> m_horizontalScrollbar;
421 RefPtr<MainFrameScrollbarTizen> m_verticalScrollbar;
423 #if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
424 OwnPtr<TextSelection> m_textSelection;
426 #if ENABLE(TIZEN_OFFLINE_PAGE_SAVE)
427 OwnPtr<OfflinePageSave> m_offlinePageSave;
429 #if ENABLE(TIZEN_WEBKIT2_CLIPBOARD_HELPER)
430 OwnPtr<ClipboardHelper> m_clipboardHelper;
432 #if ENABLE(TIZEN_DRAG_SUPPORT)
435 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
436 OwnPtr<FormDataCandidate> m_formDataCandidate;
438 bool m_suspendPainting;
439 bool m_suspendResource;
440 bool m_suspendRequested;
443 bool m_isScrollableLayerFocused;
444 bool m_isScrollableNodeFocused;
446 #if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE_BACKUP_IMAGE)
447 bool m_shouldMakeBackupTexture;
448 bool m_shouldShowBackupTexture;
449 WebCore::IntRect m_initialViewRect;
452 #if ENABLE(TIZEN_CONTEXT_MENU_WEBKIT_2)
453 bool m_isContextMenuVisible;
456 WebCore::Color m_bgColor;
458 Vector<RefPtr<WebKit::WebEditCommandProxy> > m_undoCommands;
459 Vector<RefPtr<WebKit::WebEditCommandProxy> > m_redoCommands;
461 #if ENABLE(TIZEN_PRERENDERING_FOR_ROTATION)
462 bool m_waitFrameOfNewViewortSize;
465 #endif // #if OS(TIZEN)
469 #if ENABLE(TIZEN_WEBKIT2_TILED_AC) && ENABLE(TIZEN_RUNTIME_BACKEND_SELECTION)
470 class PageClientEvasGL : public PageClientImpl {
472 static PassOwnPtr<PageClientEvasGL> create(EwkViewImpl* viewImpl)
474 return adoptPtr(new PageClientEvasGL(viewImpl));
478 virtual void updateViewportSize(const WebCore::IntSize&, const int);
479 virtual void setViewNeedsDisplay(const WebCore::IntRect&);
480 virtual void displayViewport();
481 virtual void drawContents();
482 virtual void didRenderFrame();
483 virtual bool makeContextCurrent();
486 explicit PageClientEvasGL(EwkViewImpl* viewImpl);
488 virtual void initializeAcceleratedCompositingMode();
489 virtual void finalizeAcceleratedCompositingMode();
490 virtual void enterAcceleratedCompositingMode(const LayerTreeContext&);
491 virtual void exitAcceleratedCompositingMode();
493 void setTargetSurface();
496 Evas_GL_API* m_evasGlApi;
497 Evas_GL_Context* m_context;
498 Evas_GL_Surface* m_surface;
499 Evas_GL_Config* m_config;
500 #if ENABLE(TIZEN_WEBKIT2_DIRECT_RENDERING)
504 bool m_isAcceleratedCompositingModeInitialized;
508 } // namespace WebKit
510 #endif // PageClientImpl_h