[iOS] Synchronize the WKContentView and UIScrollView updates with the tiles being...
[WebKit-https.git] / Source / WebKit2 / UIProcess / API / ios / PageClientImplIOS.mm
1 /*
2  * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
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.
12  *
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.
24  */
25
26 #import "config.h"
27 #import "PageClientImplIOS.h"
28
29 #import "NativeWebKeyboardEvent.h"
30 #import "InteractionInformationAtPosition.h"
31 #import "WKContentViewInternal.h"
32 #import "WebContextMenuProxy.h"
33 #import "WebEditCommandProxy.h"
34 #import <UIKit/UIImagePickerController_Private.h>
35 #import <UIKit/UIWebTouchEventsGestureRecognizer.h>
36 #import <WebCore/NotImplemented.h>
37 #import <WebCore/PlatformScreen.h>
38 #import <WebCore/SharedBuffer.h>
39
40 @interface UIView (IPI)
41 - (UIScrollView *)_scroller;
42 @end
43
44 using namespace WebCore;
45
46 namespace WebKit {
47
48 PageClientImpl::PageClientImpl(WKContentView *view)
49     : m_view(view)
50 {
51 }
52
53 PageClientImpl::~PageClientImpl()
54 {
55 }
56
57 std::unique_ptr<DrawingAreaProxy> PageClientImpl::createDrawingAreaProxy()
58 {
59     return [m_view _createDrawingAreaProxy];
60 }
61
62 void PageClientImpl::setViewNeedsDisplay(const IntRect& rect)
63 {
64     ASSERT_NOT_REACHED();
65 }
66
67 void PageClientImpl::displayView()
68 {
69     ASSERT_NOT_REACHED();
70 }
71
72 void PageClientImpl::scrollView(const IntRect&, const IntSize&)
73 {
74     ASSERT_NOT_REACHED();
75 }
76
77 bool PageClientImpl::canScrollView()
78 {
79     notImplemented();
80     return false;
81 }
82
83 IntSize PageClientImpl::viewSize()
84 {
85     if (UIScrollView *scroller = [m_view _scroller])
86         return IntSize(scroller.bounds.size);
87
88     return IntSize(m_view.bounds.size);
89 }
90
91 bool PageClientImpl::isViewWindowActive()
92 {
93     notImplemented();
94     return true;
95 }
96
97 bool PageClientImpl::isViewFocused()
98 {
99     notImplemented();
100     return true;
101 }
102
103 bool PageClientImpl::isViewVisible()
104 {
105     notImplemented();
106     return true;
107 }
108
109 bool PageClientImpl::isViewInWindow()
110 {
111     return [m_view window];
112 }
113
114 void PageClientImpl::processDidExit()
115 {
116     [m_view _processDidExit];
117 }
118
119 void PageClientImpl::didRelaunchProcess()
120 {
121     [m_view _didRelaunchProcess];
122 }
123
124 void PageClientImpl::pageClosed()
125 {
126     notImplemented();
127 }
128
129 void PageClientImpl::preferencesDidChange()
130 {
131     notImplemented();
132 }
133
134 void PageClientImpl::toolTipChanged(const String&, const String&)
135 {
136     notImplemented();
137 }
138
139 bool PageClientImpl::decidePolicyForGeolocationPermissionRequest(WebFrameProxy& frame, WebSecurityOrigin& origin, GeolocationPermissionRequestProxy& request)
140 {
141     [m_view _decidePolicyForGeolocationRequestFromOrigin:origin frame:frame request:request];
142     return true;
143 }
144
145 void PageClientImpl::didCommitLoadForMainFrame()
146 {
147     [m_view _didCommitLoadForMainFrame];
148 }
149
150 void PageClientImpl::setCursor(const Cursor&)
151 {
152     notImplemented();
153 }
154
155 void PageClientImpl::setCursorHiddenUntilMouseMoves(bool)
156 {
157     notImplemented();
158 }
159
160 void PageClientImpl::didChangeViewportProperties(const ViewportAttributes&)
161 {
162     notImplemented();
163 }
164
165 void PageClientImpl::registerEditCommand(PassRefPtr<WebEditCommandProxy>, WebPageProxy::UndoOrRedo)
166 {
167     notImplemented();
168 }
169
170 void PageClientImpl::clearAllEditCommands()
171 {
172     notImplemented();
173 }
174
175 bool PageClientImpl::canUndoRedo(WebPageProxy::UndoOrRedo)
176 {
177     notImplemented();
178     return false;
179 }
180
181 void PageClientImpl::executeUndoRedo(WebPageProxy::UndoOrRedo)
182 {
183     notImplemented();
184 }
185
186 void PageClientImpl::accessibilityWebProcessTokenReceived(const IPC::DataReference&)
187 {
188     notImplemented();
189 }
190
191 bool PageClientImpl::interpretKeyEvent(const NativeWebKeyboardEvent&, Vector<KeypressCommand>&)
192 {
193     notImplemented();
194     return false;
195 }
196
197 bool PageClientImpl::interpretKeyEvent(const NativeWebKeyboardEvent& event, bool isCharEvent)
198 {
199     return [m_view _interpretKeyEvent:event.nativeEvent() isCharEvent:isCharEvent];
200 }
201
202 void PageClientImpl::positionInformationDidChange(const InteractionInformationAtPosition& info)
203 {
204     [m_view _positionInformationDidChange:info];
205 }
206
207 void PageClientImpl::saveImageToLibrary(PassRefPtr<SharedBuffer> imageBuffer)
208 {
209     RetainPtr<NSData> imageData = imageBuffer->createNSData();
210     UIImageDataWriteToSavedPhotosAlbum(imageData.get(), nil, NULL, NULL);
211 }
212
213 bool PageClientImpl::executeSavedCommandBySelector(const String&)
214 {
215     notImplemented();
216     return false;
217 }
218
219 void PageClientImpl::setDragImage(const IntPoint&, PassRefPtr<ShareableBitmap>, bool)
220 {
221     notImplemented();
222 }
223
224 void PageClientImpl::selectionDidChange()
225 {
226     [m_view _selectionChanged];
227 }
228
229 void PageClientImpl::updateSecureInputState()
230 {
231     notImplemented();
232 }
233
234 void PageClientImpl::resetSecureInputState()
235 {
236     notImplemented();
237 }
238
239 void PageClientImpl::notifyInputContextAboutDiscardedComposition()
240 {
241     notImplemented();
242 }
243
244 void PageClientImpl::makeFirstResponder()
245 {
246     notImplemented();
247 }
248
249 FloatRect PageClientImpl::convertToDeviceSpace(const FloatRect& rect)
250 {
251     notImplemented();
252     return FloatRect();
253 }
254
255 FloatRect PageClientImpl::convertToUserSpace(const FloatRect& rect)
256 {
257     notImplemented();
258     return FloatRect();
259 }
260
261 IntPoint PageClientImpl::screenToWindow(const IntPoint& point)
262 {
263     notImplemented();
264     return IntPoint();
265 }
266
267 IntRect PageClientImpl::windowToScreen(const IntRect& rect)
268 {
269     notImplemented();
270     return IntRect();
271 }
272
273 void PageClientImpl::doneWithKeyEvent(const NativeWebKeyboardEvent&, bool)
274 {
275     notImplemented();
276 }
277
278 #if ENABLE(TOUCH_EVENTS)
279 void PageClientImpl::doneWithTouchEvent(const NativeWebTouchEvent& nativeWebtouchEvent, bool eventHandled)
280 {
281     [nativeWebtouchEvent.nativeEvent() setDefaultPrevented:eventHandled];
282 }
283 #endif
284
285 PassRefPtr<WebPopupMenuProxy> PageClientImpl::createPopupMenuProxy(WebPageProxy*)
286 {
287     notImplemented();
288     return 0;
289 }
290
291 PassRefPtr<WebContextMenuProxy> PageClientImpl::createContextMenuProxy(WebPageProxy*)
292 {
293     notImplemented();
294     return 0;
295 }
296
297 void PageClientImpl::setFindIndicator(PassRefPtr<FindIndicator>, bool, bool)
298 {
299     notImplemented();
300 }
301
302 void PageClientImpl::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext)
303 {
304 }
305
306 void PageClientImpl::exitAcceleratedCompositingMode()
307 {
308     notImplemented();
309 }
310
311 void PageClientImpl::updateAcceleratedCompositingMode(const LayerTreeContext&)
312 {
313 }
314
315 void PageClientImpl::setAcceleratedCompositingRootLayer(CALayer *rootLayer)
316 {
317     [m_view _setAcceleratedCompositingRootLayer:rootLayer];
318 }
319
320 CALayer *PageClientImpl::acceleratedCompositingRootLayer() const
321 {
322     notImplemented();
323     return nullptr;
324 }
325
326 RetainPtr<CGImageRef> PageClientImpl::takeViewSnapshot()
327 {
328     notImplemented();
329     return nullptr;
330 }
331
332 void PageClientImpl::wheelEventWasNotHandledByWebCore(const NativeWebWheelEvent& event)
333 {
334     notImplemented();
335 }
336
337 void PageClientImpl::clearCustomSwipeViews()
338 {
339     notImplemented();
340 }
341
342 void PageClientImpl::didGetTapHighlightGeometries(uint64_t requestID, const WebCore::Color& color, const Vector<WebCore::FloatQuad>& highlightedQuads, const WebCore::IntSize& topLeftRadius, const WebCore::IntSize& topRightRadius, const WebCore::IntSize& bottomLeftRadius, const WebCore::IntSize& bottomRightRadius)
343 {
344     [m_view _didGetTapHighlightForRequest:requestID color:color quads:highlightedQuads topLeftRadius:topLeftRadius topRightRadius:topRightRadius bottomLeftRadius:bottomLeftRadius bottomRightRadius:bottomRightRadius];
345 }
346
347 void PageClientImpl::didCommitLayerTree(const RemoteLayerTreeTransaction& layerTreeTransaction)
348 {
349     [m_view _didCommitLayerTree:layerTreeTransaction];
350 }
351
352 void PageClientImpl::startAssistingNode(const WebCore::IntRect&, bool, bool)
353 {
354     [m_view _startAssistingNode];
355 }
356
357 void PageClientImpl::stopAssistingNode()
358 {
359     [m_view _stopAssistingNode];
360 }
361
362 #if ENABLE(FULLSCREEN_API)
363
364 WebFullScreenManagerProxyClient& PageClientImpl::fullScreenManagerProxyClient()
365 {
366     return *this;
367 }
368
369 // WebFullScreenManagerProxyClient
370
371 void PageClientImpl::closeFullScreenManager()
372 {
373 }
374
375 bool PageClientImpl::isFullScreen()
376 {
377     return false;
378 }
379
380 void PageClientImpl::enterFullScreen()
381 {
382 }
383
384 void PageClientImpl::exitFullScreen()
385 {
386 }
387
388 void PageClientImpl::beganEnterFullScreen(const IntRect&, const IntRect&)
389 {
390 }
391
392 void PageClientImpl::beganExitFullScreen(const IntRect&, const IntRect&)
393 {
394 }
395
396 #endif // ENABLE(FULLSCREEN_API)
397
398 } // namespace WebKit