ba1322fbbcece71d245b96c725ecb97ea92591f5
[WebKit-https.git] / Source / WebKit / UIProcess / API / APIUIClient.h
1 /*
2  * Copyright (C) 2014 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 #pragma once
27
28 #include "WKPage.h"
29 #include "WebEvent.h"
30 #include "WebHitTestResultData.h"
31 #include "WebPageProxy.h"
32 #include <WebCore/FloatRect.h>
33
34 #if PLATFORM(IOS)
35 OBJC_CLASS NSArray;
36 OBJC_CLASS _WKActivatedElementInfo;
37 OBJC_CLASS UIViewController;
38 #endif
39
40 namespace WebCore {
41 class ResourceRequest;
42 struct SecurityOriginData;
43 struct WindowFeatures;
44 }
45
46 namespace WebKit {
47 class GeolocationPermissionRequestProxy;
48 class NativeWebKeyboardEvent;
49 class NativeWebWheelEvent;
50 class NotificationPermissionRequest;
51 class UserMediaPermissionRequestProxy;
52 class WebColorPickerResultListenerProxy;
53 class WebFrameProxy;
54 class WebOpenPanelResultListenerProxy;
55 class WebPageProxy;
56 struct NavigationActionData;
57
58 #if ENABLE(MEDIA_SESSION)
59 class WebMediaSessionMetadata;
60 #endif
61 }
62
63 namespace API {
64
65 class Data;
66 class Dictionary;
67 class Object;
68 class OpenPanelParameters;
69 class SecurityOrigin;
70
71 class UIClient {
72 public:
73     virtual ~UIClient() { }
74
75     virtual RefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, WebKit::NavigationActionData&&) { return nullptr; }
76     virtual void createNewPageAsync(WebKit::WebPageProxy*, FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, WebKit::NavigationActionData&&, WTF::Function<void(RefPtr<WebKit::WebPageProxy>&&)>&& completionHandler) { }
77     virtual bool canCreateNewPageAsync() { return false; }
78     virtual void showPage(WebKit::WebPageProxy*) { }
79     virtual void fullscreenMayReturnToInline(WebKit::WebPageProxy*) { }
80     virtual void didEnterFullscreen(WebKit::WebPageProxy*) { }
81     virtual void didExitFullscreen(WebKit::WebPageProxy*) { }
82     virtual void hasVideoInPictureInPictureDidChange(WebKit::WebPageProxy*, bool) { }
83     virtual void close(WebKit::WebPageProxy*) { }
84
85     virtual void takeFocus(WebKit::WebPageProxy*, WKFocusDirection) { }
86     virtual void focus(WebKit::WebPageProxy*) { }
87     virtual void unfocus(WebKit::WebPageProxy*) { }
88
89     virtual void runJavaScriptAlert(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, Function<void ()>&& completionHandler) { completionHandler(); }
90     virtual void runJavaScriptConfirm(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, Function<void (bool)>&& completionHandler) { completionHandler(false); }
91     virtual void runJavaScriptPrompt(WebKit::WebPageProxy*, const WTF::String&, const WTF::String&, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, Function<void (const WTF::String&)>&& completionHandler) { completionHandler(WTF::String()); }
92
93     virtual void setStatusText(WebKit::WebPageProxy*, const WTF::String&) { }
94     virtual void mouseDidMoveOverElement(WebKit::WebPageProxy*, const WebKit::WebHitTestResultData&, WebKit::WebEvent::Modifiers, Object*) { }
95 #if ENABLE(NETSCAPE_PLUGIN_API)
96     virtual void unavailablePluginButtonClicked(WebKit::WebPageProxy*, WKPluginUnavailabilityReason, Dictionary*) { }
97 #endif // ENABLE(NETSCAPE_PLUGIN_API)
98
99     virtual void didNotHandleKeyEvent(WebKit::WebPageProxy*, const WebKit::NativeWebKeyboardEvent&) { }
100     virtual void didNotHandleWheelEvent(WebKit::WebPageProxy*, const WebKit::NativeWebWheelEvent&) { }
101
102     virtual bool toolbarsAreVisible(WebKit::WebPageProxy*) { return true; }
103     virtual void setToolbarsAreVisible(WebKit::WebPageProxy*, bool) { }
104     virtual bool menuBarIsVisible(WebKit::WebPageProxy*) { return true; }
105     virtual void setMenuBarIsVisible(WebKit::WebPageProxy*, bool) { }
106     virtual bool statusBarIsVisible(WebKit::WebPageProxy*) { return true; }
107     virtual void setStatusBarIsVisible(WebKit::WebPageProxy*, bool) { }
108     virtual bool isResizable(WebKit::WebPageProxy*) { return true; }
109     virtual void setIsResizable(WebKit::WebPageProxy*, bool) { }
110
111     virtual void setWindowFrame(WebKit::WebPageProxy*, const WebCore::FloatRect&) { }
112     virtual WebCore::FloatRect windowFrame(WebKit::WebPageProxy*) { return WebCore::FloatRect(); }
113
114     virtual bool canRunBeforeUnloadConfirmPanel() const { return false; }
115     virtual void runBeforeUnloadConfirmPanel(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, Function<void (bool)>&& completionHandler) { completionHandler(true); }
116
117     virtual void pageDidScroll(WebKit::WebPageProxy*) { }
118
119     virtual void exceededDatabaseQuota(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, SecurityOrigin*, const WTF::String&, const WTF::String&, unsigned long long currentQuota, unsigned long long, unsigned long long, unsigned long long, Function<void (unsigned long long)>&& completionHandler)
120     {
121         completionHandler(currentQuota);
122     }
123
124     virtual void reachedApplicationCacheOriginQuota(WebKit::WebPageProxy*, const WebCore::SecurityOrigin&, uint64_t currentQuota, uint64_t, Function<void (unsigned long long)>&& completionHandler)
125     {
126         completionHandler(currentQuota);
127     }
128
129     virtual bool runOpenPanel(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, OpenPanelParameters*, WebKit::WebOpenPanelResultListenerProxy*) { return false; }
130     virtual bool decidePolicyForGeolocationPermissionRequest(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, SecurityOrigin*, WebKit::GeolocationPermissionRequestProxy*) { return false; }
131     virtual bool decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionRequestProxy&) { return false; }
132     virtual bool checkUserMediaPermissionForOrigin(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionCheckProxy&) { return false; }
133     virtual bool decidePolicyForNotificationPermissionRequest(WebKit::WebPageProxy*, SecurityOrigin*, WebKit::NotificationPermissionRequest*) { return false; }
134
135     // Printing.
136     virtual float headerHeight(WebKit::WebPageProxy*, WebKit::WebFrameProxy*) { return 0; }
137     virtual float footerHeight(WebKit::WebPageProxy*, WebKit::WebFrameProxy*) { return 0; }
138     virtual void drawHeader(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::FloatRect&) { }
139     virtual void drawFooter(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::FloatRect&) { }
140     virtual void printFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*) { }
141
142     virtual bool canRunModal() const { return false; }
143     virtual void runModal(WebKit::WebPageProxy*) { }
144
145     virtual void saveDataToFileInDownloadsFolder(WebKit::WebPageProxy*, const WTF::String&, const WTF::String&, const WebCore::URL&, Data&) { }
146
147     virtual void pinnedStateDidChange(WebKit::WebPageProxy&) { }
148
149     virtual void isPlayingMediaDidChange(WebKit::WebPageProxy&) { }
150     virtual void mediaCaptureStateDidChange(WebCore::MediaProducer::MediaStateFlags) { }
151     virtual void handleAutoplayEvent(WebKit::WebPageProxy&, WebCore::AutoplayEvent, OptionSet<WebCore::AutoplayEventFlags>) { }
152
153 #if ENABLE(MEDIA_SESSION)
154     virtual void mediaSessionMetadataDidChange(WebKit::WebPageProxy&, WebKit::WebMediaSessionMetadata*) { }
155 #endif
156
157 #if PLATFORM(IOS)
158 #if HAVE(APP_LINKS)
159     virtual bool shouldIncludeAppLinkActionsForElement(_WKActivatedElementInfo *) { return true; }
160 #endif
161     virtual RetainPtr<NSArray> actionsForElement(_WKActivatedElementInfo *, RetainPtr<NSArray> defaultActions) { return defaultActions; }
162     virtual void didNotHandleTapAsClick(const WebCore::IntPoint&) { }
163     virtual UIViewController *presentingViewController() { return nullptr; }
164 #endif
165 #if PLATFORM(COCOA)
166     virtual NSDictionary *dataDetectionContext() { return nullptr; }
167 #endif
168
169 #if ENABLE(POINTER_LOCK)
170     virtual void requestPointerLock(WebKit::WebPageProxy*) { }
171     virtual void didLosePointerLock(WebKit::WebPageProxy*) { }
172 #endif
173
174     virtual void didClickAutoFillButton(WebKit::WebPageProxy&, Object*) { }
175
176     virtual void imageOrMediaDocumentSizeChanged(const WebCore::IntSize&) { }
177
178     virtual void didExceedBackgroundResourceLimitWhileInForeground(WebKit::WebPageProxy&, WKResourceLimit) { }
179 };
180
181 } // namespace API