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 42using namespace WebKit; 43 44WKTypeID WKBundlePageGetTypeID() 45{ 46 return toAPI(WebPage::APIType); 47} 48 49void WKBundlePageSetContextMenuClient(WKBundlePageRef pageRef, WKBundlePageContextMenuClient* wkClient) 50{ 51 if (wkClient && wkClient->version) 52 return; 53 toImpl(pageRef)->initializeInjectedBundleContextMenuClient(wkClient); 54} 55 56void WKBundlePageSetEditorClient(WKBundlePageRef pageRef, WKBundlePageEditorClient* wkClient) 57{ 58 if (wkClient && wkClient->version) 59 return; 60 toImpl(pageRef)->initializeInjectedBundleEditorClient(wkClient); 61} 62 63void WKBundlePageSetFormClient(WKBundlePageRef pageRef, WKBundlePageFormClient* wkClient) 64{ 65 if (wkClient && wkClient->version) 66 return; 67 toImpl(pageRef)->initializeInjectedBundleFormClient(wkClient); 68} 69 70void WKBundlePageSetPageLoaderClient(WKBundlePageRef pageRef, WKBundlePageLoaderClient* wkClient) 71{ 72 if (wkClient && wkClient->version) 73 return; 74 toImpl(pageRef)->initializeInjectedBundleLoaderClient(wkClient); 75} 76 77void WKBundlePageSetResourceLoadClient(WKBundlePageRef pageRef, WKBundlePageResourceLoadClient* wkClient) 78{ 79 if (wkClient && wkClient->version) 80 return; 81 toImpl(pageRef)->initializeInjectedBundleResourceLoadClient(wkClient); 82} 83 84void WKBundlePageSetPolicyClient(WKBundlePageRef pageRef, WKBundlePagePolicyClient* wkClient) 85{ 86 if (wkClient && wkClient->version) 87 return; 88 toImpl(pageRef)->initializeInjectedBundlePolicyClient(wkClient); 89} 90 91void WKBundlePageSetUIClient(WKBundlePageRef pageRef, WKBundlePageUIClient* wkClient) 92{ 93 if (wkClient && wkClient->version) 94 return; 95 toImpl(pageRef)->initializeInjectedBundleUIClient(wkClient); 96} 97 98void 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 107void WKBundlePageWillEnterFullScreen(WKBundlePageRef pageRef) 108{ 109#if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API 110 toImpl(pageRef)->fullScreenManager()->willEnterFullScreen(); 111#endif 112} 113 114void WKBundlePageDidEnterFullScreen(WKBundlePageRef pageRef) 115{ 116#if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API 117 toImpl(pageRef)->fullScreenManager()->didEnterFullScreen(); 118#endif 119} 120 121void WKBundlePageWillExitFullScreen(WKBundlePageRef pageRef) 122{ 123#if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API 124 toImpl(pageRef)->fullScreenManager()->willExitFullScreen(); 125#endif 126} 127 128void WKBundlePageDidExitFullScreen(WKBundlePageRef pageRef) 129{ 130#if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API 131 toImpl(pageRef)->fullScreenManager()->didExitFullScreen(); 132#endif 133} 134 135WKBundlePageGroupRef WKBundlePageGetPageGroup(WKBundlePageRef pageRef) 136{ 137 return toAPI(toImpl(pageRef)->pageGroup()); 138} 139 140WKBundleFrameRef WKBundlePageGetMainFrame(WKBundlePageRef pageRef) 141{ 142 return toAPI(toImpl(pageRef)->mainFrame()); 143} 144 145void WKBundlePageStopLoading(WKBundlePageRef pageRef) 146{ 147 toImpl(pageRef)->stopLoading(); 148} 149 150void WKBundlePageSetDefersLoading(WKBundlePageRef pageRef, bool defersLoading) 151{ 152 toImpl(pageRef)->setDefersLoading(defersLoading); 153} 154 155WKStringRef WKBundlePageCopyRenderTreeExternalRepresentation(WKBundlePageRef pageRef) 156{ 157 return toCopiedAPI(toImpl(pageRef)->renderTreeExternalRepresentation()); 158} 159 160void WKBundlePageExecuteEditingCommand(WKBundlePageRef pageRef, WKStringRef name, WKStringRef argument) 161{ 162 toImpl(pageRef)->executeEditingCommand(toImpl(name)->string(), toImpl(argument)->string()); 163} 164 165bool WKBundlePageIsEditingCommandEnabled(WKBundlePageRef pageRef, WKStringRef name) 166{ 167 return toImpl(pageRef)->isEditingCommandEnabled(toImpl(name)->string()); 168} 169 170void WKBundlePageClearMainFrameName(WKBundlePageRef pageRef) 171{ 172 toImpl(pageRef)->clearMainFrameName(); 173} 174 175void WKBundlePageClose(WKBundlePageRef pageRef) 176{ 177 toImpl(pageRef)->sendClose(); 178} 179 180double WKBundlePageGetTextZoomFactor(WKBundlePageRef pageRef) 181{ 182 return toImpl(pageRef)->textZoomFactor(); 183} 184 185void WKBundlePageSetTextZoomFactor(WKBundlePageRef pageRef, double zoomFactor) 186{ 187 toImpl(pageRef)->setTextZoomFactor(zoomFactor); 188} 189 190double WKBundlePageGetPageZoomFactor(WKBundlePageRef pageRef) 191{ 192 return toImpl(pageRef)->pageZoomFactor(); 193} 194 195void WKBundlePageSetPageZoomFactor(WKBundlePageRef pageRef, double zoomFactor) 196{ 197 toImpl(pageRef)->setPageZoomFactor(zoomFactor); 198} 199 200void WKBundlePageSetScaleAtOrigin(WKBundlePageRef pageRef, double scale, WKPoint origin) 201{ 202 toImpl(pageRef)->scaleWebView(scale, toIntPoint(origin)); 203} 204 205WKBundleBackForwardListRef WKBundlePageGetBackForwardList(WKBundlePageRef pageRef) 206{ 207 return toAPI(toImpl(pageRef)->backForwardList()); 208} 209 210void WKBundlePageInstallPageOverlay(WKBundlePageRef pageRef, WKBundlePageOverlayRef pageOverlayRef) 211{ 212 toImpl(pageRef)->installPageOverlay(toImpl(pageOverlayRef)); 213} 214 215void WKBundlePageUninstallPageOverlay(WKBundlePageRef pageRef, WKBundlePageOverlayRef pageOverlayRef) 216{ 217 toImpl(pageRef)->uninstallPageOverlay(toImpl(pageOverlayRef), false); 218} 219 220bool WKBundlePageHasLocalDataForURL(WKBundlePageRef pageRef, WKURLRef urlRef) 221{ 222 return toImpl(pageRef)->hasLocalDataForURL(WebCore::KURL(WebCore::KURL(), toImpl(urlRef)->string())); 223} 224 225bool WKBundlePageCanHandleRequest(WKURLRequestRef requestRef) 226{ 227 return WebPage::canHandleRequest(toImpl(requestRef)->resourceRequest()); 228} 229 230bool WKBundlePageFindString(WKBundlePageRef pageRef, WKStringRef target, WKFindOptions findOptions) 231{ 232 return toImpl(pageRef)->findStringFromInjectedBundle(toImpl(target)->string(), toFindOptions(findOptions)); 233} 234 235WKImageRef 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 241WKImageRef 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 247WKImageRef 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 254WKBundleInspectorRef WKBundlePageGetInspector(WKBundlePageRef pageRef) 255{ 256 return toAPI(toImpl(pageRef)->inspector()); 257} 258#endif 259 260void WKBundlePageForceRepaint(WKBundlePageRef page) 261{ 262 toImpl(page)->forceRepaintWithoutCallback(); 263} 264 265void 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 270void 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 275void WKBundlePageSimulateMouseMotion(WKBundlePageRef page, WKPoint position, double time) 276{ 277 toImpl(page)->simulateMouseMotion(toIntPoint(position), time); 278} 279