7775ef6aa9013354c5d279ea461861e2ca7355ae
[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::didChangeContentSize(const IntSize& contentsSize)
151 {
152     [m_view _didChangeContentSize:contentsSize];
153 }
154
155 void PageClientImpl::setCursor(const Cursor&)
156 {
157     notImplemented();
158 }
159
160 void PageClientImpl::setCursorHiddenUntilMouseMoves(bool)
161 {
162     notImplemented();
163 }
164
165 void PageClientImpl::didChangeViewportProperties(const ViewportAttributes&)
166 {
167     notImplemented();
168 }
169
170 void PageClientImpl::registerEditCommand(PassRefPtr<WebEditCommandProxy>, WebPageProxy::UndoOrRedo)
171 {
172     notImplemented();
173 }
174
175 void PageClientImpl::clearAllEditCommands()
176 {
177     notImplemented();
178 }
179
180 bool PageClientImpl::canUndoRedo(WebPageProxy::UndoOrRedo)
181 {
182     notImplemented();
183     return false;
184 }
185
186 void PageClientImpl::executeUndoRedo(WebPageProxy::UndoOrRedo)
187 {
188     notImplemented();
189 }
190
191 void PageClientImpl::accessibilityWebProcessTokenReceived(const IPC::DataReference&)
192 {
193     notImplemented();
194 }
195
196 bool PageClientImpl::interpretKeyEvent(const NativeWebKeyboardEvent&, Vector<KeypressCommand>&)
197 {
198     notImplemented();
199     return false;
200 }
201
202 bool PageClientImpl::interpretKeyEvent(const NativeWebKeyboardEvent& event, bool isCharEvent)
203 {
204     return [m_view _interpretKeyEvent:event.nativeEvent() isCharEvent:isCharEvent];
205 }
206
207 void PageClientImpl::positionInformationDidChange(const InteractionInformationAtPosition& info)
208 {
209     [m_view _positionInformationDidChange:info];
210 }
211
212 void PageClientImpl::saveImageToLibrary(PassRefPtr<SharedBuffer> imageBuffer)
213 {
214     RetainPtr<NSData> imageData = imageBuffer->createNSData();
215     UIImageDataWriteToSavedPhotosAlbum(imageData.get(), nil, NULL, NULL);
216 }
217
218 bool PageClientImpl::executeSavedCommandBySelector(const String&)
219 {
220     notImplemented();
221     return false;
222 }
223
224 void PageClientImpl::setDragImage(const IntPoint&, PassRefPtr<ShareableBitmap>, bool)
225 {
226     notImplemented();
227 }
228
229 void PageClientImpl::selectionDidChange()
230 {
231     [m_view _selectionChanged];
232 }
233
234 void PageClientImpl::updateSecureInputState()
235 {
236     notImplemented();
237 }
238
239 void PageClientImpl::resetSecureInputState()
240 {
241     notImplemented();
242 }
243
244 void PageClientImpl::notifyInputContextAboutDiscardedComposition()
245 {
246     notImplemented();
247 }
248
249 void PageClientImpl::makeFirstResponder()
250 {
251     notImplemented();
252 }
253
254 FloatRect PageClientImpl::convertToDeviceSpace(const FloatRect& rect)
255 {
256     notImplemented();
257     return FloatRect();
258 }
259
260 FloatRect PageClientImpl::convertToUserSpace(const FloatRect& rect)
261 {
262     notImplemented();
263     return FloatRect();
264 }
265
266 IntPoint PageClientImpl::screenToWindow(const IntPoint& point)
267 {
268     notImplemented();
269     return IntPoint();
270 }
271
272 IntRect PageClientImpl::windowToScreen(const IntRect& rect)
273 {
274     notImplemented();
275     return IntRect();
276 }
277
278 void PageClientImpl::doneWithKeyEvent(const NativeWebKeyboardEvent&, bool)
279 {
280     notImplemented();
281 }
282
283 #if ENABLE(TOUCH_EVENTS)
284 void PageClientImpl::doneWithTouchEvent(const NativeWebTouchEvent& nativeWebtouchEvent, bool eventHandled)
285 {
286     [nativeWebtouchEvent.nativeEvent() setDefaultPrevented:eventHandled];
287 }
288 #endif
289
290 PassRefPtr<WebPopupMenuProxy> PageClientImpl::createPopupMenuProxy(WebPageProxy*)
291 {
292     notImplemented();
293     return 0;
294 }
295
296 PassRefPtr<WebContextMenuProxy> PageClientImpl::createContextMenuProxy(WebPageProxy*)
297 {
298     notImplemented();
299     return 0;
300 }
301
302 void PageClientImpl::setFindIndicator(PassRefPtr<FindIndicator>, bool, bool)
303 {
304     notImplemented();
305 }
306
307 void PageClientImpl::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext)
308 {
309 }
310
311 void PageClientImpl::exitAcceleratedCompositingMode()
312 {
313     notImplemented();
314 }
315
316 void PageClientImpl::updateAcceleratedCompositingMode(const LayerTreeContext&)
317 {
318 }
319
320 void PageClientImpl::setAcceleratedCompositingRootLayer(CALayer *rootLayer)
321 {
322     [m_view _setAcceleratedCompositingRootLayer:rootLayer];
323 }
324
325 CALayer *PageClientImpl::acceleratedCompositingRootLayer() const
326 {
327     notImplemented();
328     return nullptr;
329 }
330
331 RetainPtr<CGImageRef> PageClientImpl::takeViewSnapshot()
332 {
333     notImplemented();
334     return nullptr;
335 }
336
337 void PageClientImpl::wheelEventWasNotHandledByWebCore(const NativeWebWheelEvent& event)
338 {
339     notImplemented();
340 }
341
342 void PageClientImpl::clearCustomSwipeViews()
343 {
344     notImplemented();
345 }
346
347 void PageClientImpl::mainDocumentDidReceiveMobileDocType()
348 {
349     [m_view _didReceiveMobileDocTypeForMainFrame];
350 }
351
352 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)
353 {
354     [m_view _didGetTapHighlightForRequest:requestID color:color quads:highlightedQuads topLeftRadius:topLeftRadius topRightRadius:topRightRadius bottomLeftRadius:bottomLeftRadius bottomRightRadius:bottomRightRadius];
355 }
356
357 void PageClientImpl::didChangeViewportArguments(const WebCore::ViewportArguments& viewportArguments)
358 {
359     [m_view _didChangeViewportArguments:viewportArguments];
360 }
361
362 void PageClientImpl::startAssistingNode(const WebCore::IntRect&, bool, bool)
363 {
364     [m_view _startAssistingNode];
365 }
366
367 void PageClientImpl::stopAssistingNode()
368 {
369     [m_view _stopAssistingNode];
370 }
371
372 #if ENABLE(FULLSCREEN_API)
373
374 WebFullScreenManagerProxyClient& PageClientImpl::fullScreenManagerProxyClient()
375 {
376     return *this;
377 }
378
379 // WebFullScreenManagerProxyClient
380
381 void PageClientImpl::closeFullScreenManager()
382 {
383 }
384
385 bool PageClientImpl::isFullScreen()
386 {
387     return false;
388 }
389
390 void PageClientImpl::enterFullScreen()
391 {
392 }
393
394 void PageClientImpl::exitFullScreen()
395 {
396 }
397
398 void PageClientImpl::beganEnterFullScreen(const IntRect&, const IntRect&)
399 {
400 }
401
402 void PageClientImpl::beganExitFullScreen(const IntRect&, const IntRect&)
403 {
404 }
405
406 #endif // ENABLE(FULLSCREEN_API)
407
408 } // namespace WebKit