1 /*
2 * Copyright (C) 2010, 2011 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 #include "config.h"
27 #include "WKBundlePage.h"
28 #include "WKBundlePagePrivate.h"
29
30 #include "InjectedBundleBackForwardList.h"
31 #include "InjectedBundleNodeHandle.h"
32 #include "WKAPICast.h"
33 #include "WKBundleAPICast.h"
34 #include "WebFullScreenManager.h"
35 #include "WebImage.h"
36 #include "WebPage.h"
37 #include "WebURL.h"
38 #include "WebURLRequest.h"
39
40 #include <WebCore/KURL.h>
41
42 using namespace WebKit;
43
WKBundlePageGetTypeID()44 WKTypeID WKBundlePageGetTypeID()
45 {
46 return toAPI(WebPage::APIType);
47 }
48
WKBundlePageSetContextMenuClient(WKBundlePageRef pageRef,WKBundlePageContextMenuClient * wkClient)49 void WKBundlePageSetContextMenuClient(WKBundlePageRef pageRef, WKBundlePageContextMenuClient* wkClient)
50 {
51 if (wkClient && wkClient->version)
52 return;
53 toImpl(pageRef)->initializeInjectedBundleContextMenuClient(wkClient);
54 }
55
WKBundlePageSetEditorClient(WKBundlePageRef pageRef,WKBundlePageEditorClient * wkClient)56 void WKBundlePageSetEditorClient(WKBundlePageRef pageRef, WKBundlePageEditorClient* wkClient)
57 {
58 if (wkClient && wkClient->version)
59 return;
60 toImpl(pageRef)->initializeInjectedBundleEditorClient(wkClient);
61 }
62
WKBundlePageSetFormClient(WKBundlePageRef pageRef,WKBundlePageFormClient * wkClient)63 void WKBundlePageSetFormClient(WKBundlePageRef pageRef, WKBundlePageFormClient* wkClient)
64 {
65 if (wkClient && wkClient->version)
66 return;
67 toImpl(pageRef)->initializeInjectedBundleFormClient(wkClient);
68 }
69
WKBundlePageSetPageLoaderClient(WKBundlePageRef pageRef,WKBundlePageLoaderClient * wkClient)70 void WKBundlePageSetPageLoaderClient(WKBundlePageRef pageRef, WKBundlePageLoaderClient* wkClient)
71 {
72 if (wkClient && wkClient->version)
73 return;
74 toImpl(pageRef)->initializeInjectedBundleLoaderClient(wkClient);
75 }
76
WKBundlePageSetResourceLoadClient(WKBundlePageRef pageRef,WKBundlePageResourceLoadClient * wkClient)77 void WKBundlePageSetResourceLoadClient(WKBundlePageRef pageRef, WKBundlePageResourceLoadClient* wkClient)
78 {
79 if (wkClient && wkClient->version)
80 return;
81 toImpl(pageRef)->initializeInjectedBundleResourceLoadClient(wkClient);
82 }
83
WKBundlePageSetPolicyClient(WKBundlePageRef pageRef,WKBundlePagePolicyClient * wkClient)84 void WKBundlePageSetPolicyClient(WKBundlePageRef pageRef, WKBundlePagePolicyClient* wkClient)
85 {
86 if (wkClient && wkClient->version)
87 return;
88 toImpl(pageRef)->initializeInjectedBundlePolicyClient(wkClient);
89 }
90
WKBundlePageSetUIClient(WKBundlePageRef pageRef,WKBundlePageUIClient * wkClient)91 void WKBundlePageSetUIClient(WKBundlePageRef pageRef, WKBundlePageUIClient* wkClient)
92 {
93 if (wkClient && wkClient->version)
94 return;
95 toImpl(pageRef)->initializeInjectedBundleUIClient(wkClient);
96 }
97
WKBundlePageSetFullScreenClient(WKBundlePageRef pageRef,WKBundlePageFullScreenClient * wkClient)98 void WKBundlePageSetFullScreenClient(WKBundlePageRef pageRef, WKBundlePageFullScreenClient* wkClient)
99 {
100 #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
101 if (wkClient && wkClient->version)
102 return;
103 toImpl(pageRef)->initializeInjectedBundleFullScreenClient(wkClient);
104 #endif
105 }
106
WKBundlePageWillEnterFullScreen(WKBundlePageRef pageRef)107 void WKBundlePageWillEnterFullScreen(WKBundlePageRef pageRef)
108 {
109 #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
110 toImpl(pageRef)->fullScreenManager()->willEnterFullScreen();
111 #endif
112 }
113
WKBundlePageDidEnterFullScreen(WKBundlePageRef pageRef)114 void WKBundlePageDidEnterFullScreen(WKBundlePageRef pageRef)
115 {
116 #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
117 toImpl(pageRef)->fullScreenManager()->didEnterFullScreen();
118 #endif
119 }
120
WKBundlePageWillExitFullScreen(WKBundlePageRef pageRef)121 void WKBundlePageWillExitFullScreen(WKBundlePageRef pageRef)
122 {
123 #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
124 toImpl(pageRef)->fullScreenManager()->willExitFullScreen();
125 #endif
126 }
127
WKBundlePageDidExitFullScreen(WKBundlePageRef pageRef)128 void WKBundlePageDidExitFullScreen(WKBundlePageRef pageRef)
129 {
130 #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
131 toImpl(pageRef)->fullScreenManager()->didExitFullScreen();
132 #endif
133 }
134
WKBundlePageGetPageGroup(WKBundlePageRef pageRef)135 WKBundlePageGroupRef WKBundlePageGetPageGroup(WKBundlePageRef pageRef)
136 {
137 return toAPI(toImpl(pageRef)->pageGroup());
138 }
139
WKBundlePageGetMainFrame(WKBundlePageRef pageRef)140 WKBundleFrameRef WKBundlePageGetMainFrame(WKBundlePageRef pageRef)
141 {
142 return toAPI(toImpl(pageRef)->mainFrame());
143 }
144
WKBundlePageStopLoading(WKBundlePageRef pageRef)145 void WKBundlePageStopLoading(WKBundlePageRef pageRef)
146 {
147 toImpl(pageRef)->stopLoading();
148 }
149
WKBundlePageSetDefersLoading(WKBundlePageRef pageRef,bool defersLoading)150 void WKBundlePageSetDefersLoading(WKBundlePageRef pageRef, bool defersLoading)
151 {
152 toImpl(pageRef)->setDefersLoading(defersLoading);
153 }
154
WKBundlePageCopyRenderTreeExternalRepresentation(WKBundlePageRef pageRef)155 WKStringRef WKBundlePageCopyRenderTreeExternalRepresentation(WKBundlePageRef pageRef)
156 {
157 return toCopiedAPI(toImpl(pageRef)->renderTreeExternalRepresentation());
158 }
159
WKBundlePageExecuteEditingCommand(WKBundlePageRef pageRef,WKStringRef name,WKStringRef argument)160 void WKBundlePageExecuteEditingCommand(WKBundlePageRef pageRef, WKStringRef name, WKStringRef argument)
161 {
162 toImpl(pageRef)->executeEditingCommand(toImpl(name)->string(), toImpl(argument)->string());
163 }
164
WKBundlePageIsEditingCommandEnabled(WKBundlePageRef pageRef,WKStringRef name)165 bool WKBundlePageIsEditingCommandEnabled(WKBundlePageRef pageRef, WKStringRef name)
166 {
167 return toImpl(pageRef)->isEditingCommandEnabled(toImpl(name)->string());
168 }
169
WKBundlePageClearMainFrameName(WKBundlePageRef pageRef)170 void WKBundlePageClearMainFrameName(WKBundlePageRef pageRef)
171 {
172 toImpl(pageRef)->clearMainFrameName();
173 }
174
WKBundlePageClose(WKBundlePageRef pageRef)175 void WKBundlePageClose(WKBundlePageRef pageRef)
176 {
177 toImpl(pageRef)->sendClose();
178 }
179
WKBundlePageGetTextZoomFactor(WKBundlePageRef pageRef)180 double WKBundlePageGetTextZoomFactor(WKBundlePageRef pageRef)
181 {
182 return toImpl(pageRef)->textZoomFactor();
183 }
184
WKBundlePageSetTextZoomFactor(WKBundlePageRef pageRef,double zoomFactor)185 void WKBundlePageSetTextZoomFactor(WKBundlePageRef pageRef, double zoomFactor)
186 {
187 toImpl(pageRef)->setTextZoomFactor(zoomFactor);
188 }
189
WKBundlePageGetPageZoomFactor(WKBundlePageRef pageRef)190 double WKBundlePageGetPageZoomFactor(WKBundlePageRef pageRef)
191 {
192 return toImpl(pageRef)->pageZoomFactor();
193 }
194
WKBundlePageSetPageZoomFactor(WKBundlePageRef pageRef,double zoomFactor)195 void WKBundlePageSetPageZoomFactor(WKBundlePageRef pageRef, double zoomFactor)
196 {
197 toImpl(pageRef)->setPageZoomFactor(zoomFactor);
198 }
199
WKBundlePageSetScaleAtOrigin(WKBundlePageRef pageRef,double scale,WKPoint origin)200 void WKBundlePageSetScaleAtOrigin(WKBundlePageRef pageRef, double scale, WKPoint origin)
201 {
202 toImpl(pageRef)->scaleWebView(scale, toIntPoint(origin));
203 }
204
WKBundlePageGetBackForwardList(WKBundlePageRef pageRef)205 WKBundleBackForwardListRef WKBundlePageGetBackForwardList(WKBundlePageRef pageRef)
206 {
207 return toAPI(toImpl(pageRef)->backForwardList());
208 }
209
WKBundlePageInstallPageOverlay(WKBundlePageRef pageRef,WKBundlePageOverlayRef pageOverlayRef)210 void WKBundlePageInstallPageOverlay(WKBundlePageRef pageRef, WKBundlePageOverlayRef pageOverlayRef)
211 {
212 toImpl(pageRef)->installPageOverlay(toImpl(pageOverlayRef));
213 }
214
WKBundlePageUninstallPageOverlay(WKBundlePageRef pageRef,WKBundlePageOverlayRef pageOverlayRef)215 void WKBundlePageUninstallPageOverlay(WKBundlePageRef pageRef, WKBundlePageOverlayRef pageOverlayRef)
216 {
217 toImpl(pageRef)->uninstallPageOverlay(toImpl(pageOverlayRef), false);
218 }
219
WKBundlePageHasLocalDataForURL(WKBundlePageRef pageRef,WKURLRef urlRef)220 bool WKBundlePageHasLocalDataForURL(WKBundlePageRef pageRef, WKURLRef urlRef)
221 {
222 return toImpl(pageRef)->hasLocalDataForURL(WebCore::KURL(WebCore::KURL(), toImpl(urlRef)->string()));
223 }
224
WKBundlePageCanHandleRequest(WKURLRequestRef requestRef)225 bool WKBundlePageCanHandleRequest(WKURLRequestRef requestRef)
226 {
227 return WebPage::canHandleRequest(toImpl(requestRef)->resourceRequest());
228 }
229
WKBundlePageFindString(WKBundlePageRef pageRef,WKStringRef target,WKFindOptions findOptions)230 bool WKBundlePageFindString(WKBundlePageRef pageRef, WKStringRef target, WKFindOptions findOptions)
231 {
232 return toImpl(pageRef)->findStringFromInjectedBundle(toImpl(target)->string(), toFindOptions(findOptions));
233 }
234
WKBundlePageCreateSnapshotInViewCoordinates(WKBundlePageRef pageRef,WKRect rect,WKImageOptions options)235 WKImageRef WKBundlePageCreateSnapshotInViewCoordinates(WKBundlePageRef pageRef, WKRect rect, WKImageOptions options)
236 {
237 RefPtr<WebImage> webImage = toImpl(pageRef)->snapshotInViewCoordinates(toIntRect(rect), toImageOptions(options));
238 return toAPI(webImage.release().leakRef());
239 }
240
WKBundlePageCreateSnapshotInDocumentCoordinates(WKBundlePageRef pageRef,WKRect rect,WKImageOptions options)241 WKImageRef WKBundlePageCreateSnapshotInDocumentCoordinates(WKBundlePageRef pageRef, WKRect rect, WKImageOptions options)
242 {
243 RefPtr<WebImage> webImage = toImpl(pageRef)->snapshotInDocumentCoordinates(toIntRect(rect), toImageOptions(options));
244 return toAPI(webImage.release().leakRef());
245 }
246
WKBundlePageCreateScaledSnapshotInDocumentCoordinates(WKBundlePageRef pageRef,WKRect rect,double scaleFactor,WKImageOptions options)247 WKImageRef WKBundlePageCreateScaledSnapshotInDocumentCoordinates(WKBundlePageRef pageRef, WKRect rect, double scaleFactor, WKImageOptions options)
248 {
249 RefPtr<WebImage> webImage = toImpl(pageRef)->scaledSnapshotInDocumentCoordinates(toIntRect(rect), scaleFactor, toImageOptions(options));
250 return toAPI(webImage.release().leakRef());
251 }
252
253 #if defined(ENABLE_INSPECTOR) && ENABLE_INSPECTOR
WKBundlePageGetInspector(WKBundlePageRef pageRef)254 WKBundleInspectorRef WKBundlePageGetInspector(WKBundlePageRef pageRef)
255 {
256 return toAPI(toImpl(pageRef)->inspector());
257 }
258 #endif
259
WKBundlePageForceRepaint(WKBundlePageRef page)260 void WKBundlePageForceRepaint(WKBundlePageRef page)
261 {
262 toImpl(page)->forceRepaintWithoutCallback();
263 }
264
WKBundlePageSimulateMouseDown(WKBundlePageRef page,int button,WKPoint position,int clickCount,WKEventModifiers modifiers,double time)265 void WKBundlePageSimulateMouseDown(WKBundlePageRef page, int button, WKPoint position, int clickCount, WKEventModifiers modifiers, double time)
266 {
267 toImpl(page)->simulateMouseDown(button, toIntPoint(position), clickCount, modifiers, time);
268 }
269
WKBundlePageSimulateMouseUp(WKBundlePageRef page,int button,WKPoint position,int clickCount,WKEventModifiers modifiers,double time)270 void WKBundlePageSimulateMouseUp(WKBundlePageRef page, int button, WKPoint position, int clickCount, WKEventModifiers modifiers, double time)
271 {
272 toImpl(page)->simulateMouseUp(button, toIntPoint(position), clickCount, modifiers, time);
273 }
274
WKBundlePageSimulateMouseMotion(WKBundlePageRef page,WKPoint position,double time)275 void WKBundlePageSimulateMouseMotion(WKBundlePageRef page, WKPoint position, double time)
276 {
277 toImpl(page)->simulateMouseMotion(toIntPoint(position), time);
278 }
279