/* * Copyright (C) 2010, 2011 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ #include "config.h" #include "WKBundlePage.h" #include "WKBundlePagePrivate.h" #include "InjectedBundleBackForwardList.h" #include "InjectedBundleNodeHandle.h" #include "WKAPICast.h" #include "WKBundleAPICast.h" #include "WebFullScreenManager.h" #include "WebImage.h" #include "WebPage.h" #include "WebURL.h" #include "WebURLRequest.h" #include <WebCore/KURL.h> using namespace WebKit; WKTypeID WKBundlePageGetTypeID() { return toAPI(WebPage::APIType); } void WKBundlePageSetContextMenuClient(WKBundlePageRef pageRef, WKBundlePageContextMenuClient* wkClient) { if (wkClient && wkClient->version) return; toImpl(pageRef)->initializeInjectedBundleContextMenuClient(wkClient); } void WKBundlePageSetEditorClient(WKBundlePageRef pageRef, WKBundlePageEditorClient* wkClient) { if (wkClient && wkClient->version) return; toImpl(pageRef)->initializeInjectedBundleEditorClient(wkClient); } void WKBundlePageSetFormClient(WKBundlePageRef pageRef, WKBundlePageFormClient* wkClient) { if (wkClient && wkClient->version) return; toImpl(pageRef)->initializeInjectedBundleFormClient(wkClient); } void WKBundlePageSetPageLoaderClient(WKBundlePageRef pageRef, WKBundlePageLoaderClient* wkClient) { if (wkClient && wkClient->version) return; toImpl(pageRef)->initializeInjectedBundleLoaderClient(wkClient); } void WKBundlePageSetResourceLoadClient(WKBundlePageRef pageRef, WKBundlePageResourceLoadClient* wkClient) { if (wkClient && wkClient->version) return; toImpl(pageRef)->initializeInjectedBundleResourceLoadClient(wkClient); } void WKBundlePageSetPolicyClient(WKBundlePageRef pageRef, WKBundlePagePolicyClient* wkClient) { if (wkClient && wkClient->version) return; toImpl(pageRef)->initializeInjectedBundlePolicyClient(wkClient); } void WKBundlePageSetUIClient(WKBundlePageRef pageRef, WKBundlePageUIClient* wkClient) { if (wkClient && wkClient->version) return; toImpl(pageRef)->initializeInjectedBundleUIClient(wkClient); } void WKBundlePageSetFullScreenClient(WKBundlePageRef pageRef, WKBundlePageFullScreenClient* wkClient) { #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API if (wkClient && wkClient->version) return; toImpl(pageRef)->initializeInjectedBundleFullScreenClient(wkClient); #endif } void WKBundlePageWillEnterFullScreen(WKBundlePageRef pageRef) { #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API toImpl(pageRef)->fullScreenManager()->willEnterFullScreen(); #endif } void WKBundlePageDidEnterFullScreen(WKBundlePageRef pageRef) { #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API toImpl(pageRef)->fullScreenManager()->didEnterFullScreen(); #endif } void WKBundlePageWillExitFullScreen(WKBundlePageRef pageRef) { #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API toImpl(pageRef)->fullScreenManager()->willExitFullScreen(); #endif } void WKBundlePageDidExitFullScreen(WKBundlePageRef pageRef) { #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API toImpl(pageRef)->fullScreenManager()->didExitFullScreen(); #endif } WKBundlePageGroupRef WKBundlePageGetPageGroup(WKBundlePageRef pageRef) { return toAPI(toImpl(pageRef)->pageGroup()); } WKBundleFrameRef WKBundlePageGetMainFrame(WKBundlePageRef pageRef) { return toAPI(toImpl(pageRef)->mainFrame()); } void WKBundlePageStopLoading(WKBundlePageRef pageRef) { toImpl(pageRef)->stopLoading(); } void WKBundlePageSetDefersLoading(WKBundlePageRef pageRef, bool defersLoading) { toImpl(pageRef)->setDefersLoading(defersLoading); } WKStringRef WKBundlePageCopyRenderTreeExternalRepresentation(WKBundlePageRef pageRef) { return toCopiedAPI(toImpl(pageRef)->renderTreeExternalRepresentation()); } void WKBundlePageExecuteEditingCommand(WKBundlePageRef pageRef, WKStringRef name, WKStringRef argument) { toImpl(pageRef)->executeEditingCommand(toImpl(name)->string(), toImpl(argument)->string()); } bool WKBundlePageIsEditingCommandEnabled(WKBundlePageRef pageRef, WKStringRef name) { return toImpl(pageRef)->isEditingCommandEnabled(toImpl(name)->string()); } void WKBundlePageClearMainFrameName(WKBundlePageRef pageRef) { toImpl(pageRef)->clearMainFrameName(); } void WKBundlePageClose(WKBundlePageRef pageRef) { toImpl(pageRef)->sendClose(); } double WKBundlePageGetTextZoomFactor(WKBundlePageRef pageRef) { return toImpl(pageRef)->textZoomFactor(); } void WKBundlePageSetTextZoomFactor(WKBundlePageRef pageRef, double zoomFactor) { toImpl(pageRef)->setTextZoomFactor(zoomFactor); } double WKBundlePageGetPageZoomFactor(WKBundlePageRef pageRef) { return toImpl(pageRef)->pageZoomFactor(); } void WKBundlePageSetPageZoomFactor(WKBundlePageRef pageRef, double zoomFactor) { toImpl(pageRef)->setPageZoomFactor(zoomFactor); } void WKBundlePageSetScaleAtOrigin(WKBundlePageRef pageRef, double scale, WKPoint origin) { toImpl(pageRef)->scaleWebView(scale, toIntPoint(origin)); } WKBundleBackForwardListRef WKBundlePageGetBackForwardList(WKBundlePageRef pageRef) { return toAPI(toImpl(pageRef)->backForwardList()); } void WKBundlePageInstallPageOverlay(WKBundlePageRef pageRef, WKBundlePageOverlayRef pageOverlayRef) { toImpl(pageRef)->installPageOverlay(toImpl(pageOverlayRef)); } void WKBundlePageUninstallPageOverlay(WKBundlePageRef pageRef, WKBundlePageOverlayRef pageOverlayRef) { toImpl(pageRef)->uninstallPageOverlay(toImpl(pageOverlayRef), false); } bool WKBundlePageHasLocalDataForURL(WKBundlePageRef pageRef, WKURLRef urlRef) { return toImpl(pageRef)->hasLocalDataForURL(WebCore::KURL(WebCore::KURL(), toImpl(urlRef)->string())); } bool WKBundlePageCanHandleRequest(WKURLRequestRef requestRef) { return WebPage::canHandleRequest(toImpl(requestRef)->resourceRequest()); } bool WKBundlePageFindString(WKBundlePageRef pageRef, WKStringRef target, WKFindOptions findOptions) { return toImpl(pageRef)->findStringFromInjectedBundle(toImpl(target)->string(), toFindOptions(findOptions)); } WKImageRef WKBundlePageCreateSnapshotInViewCoordinates(WKBundlePageRef pageRef, WKRect rect, WKImageOptions options) { RefPtr<WebImage> webImage = toImpl(pageRef)->snapshotInViewCoordinates(toIntRect(rect), toImageOptions(options)); return toAPI(webImage.release().leakRef()); } WKImageRef WKBundlePageCreateSnapshotInDocumentCoordinates(WKBundlePageRef pageRef, WKRect rect, WKImageOptions options) { RefPtr<WebImage> webImage = toImpl(pageRef)->snapshotInDocumentCoordinates(toIntRect(rect), toImageOptions(options)); return toAPI(webImage.release().leakRef()); } WKImageRef WKBundlePageCreateScaledSnapshotInDocumentCoordinates(WKBundlePageRef pageRef, WKRect rect, double scaleFactor, WKImageOptions options) { RefPtr<WebImage> webImage = toImpl(pageRef)->scaledSnapshotInDocumentCoordinates(toIntRect(rect), scaleFactor, toImageOptions(options)); return toAPI(webImage.release().leakRef()); } #if defined(ENABLE_INSPECTOR) && ENABLE_INSPECTOR WKBundleInspectorRef WKBundlePageGetInspector(WKBundlePageRef pageRef) { return toAPI(toImpl(pageRef)->inspector()); } #endif void WKBundlePageForceRepaint(WKBundlePageRef page) { toImpl(page)->forceRepaintWithoutCallback(); } void WKBundlePageSimulateMouseDown(WKBundlePageRef page, int button, WKPoint position, int clickCount, WKEventModifiers modifiers, double time) { toImpl(page)->simulateMouseDown(button, toIntPoint(position), clickCount, modifiers, time); } void WKBundlePageSimulateMouseUp(WKBundlePageRef page, int button, WKPoint position, int clickCount, WKEventModifiers modifiers, double time) { toImpl(page)->simulateMouseUp(button, toIntPoint(position), clickCount, modifiers, time); } void WKBundlePageSimulateMouseMotion(WKBundlePageRef page, WKPoint position, double time) { toImpl(page)->simulateMouseMotion(toIntPoint(position), time); }