/* * Copyright (C) 2010 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 "WKPage.h" #include "WKPagePrivate.h" #include "PrintInfo.h" #include "WKAPICast.h" #include "WKPluginInformation.h" #include "WebBackForwardList.h" #include "WebData.h" #include "WebPageProxy.h" #include "WebProcessProxy.h" #include #ifdef __BLOCKS__ #include #endif #if ENABLE(CONTEXT_MENUS) #include "WebContextMenuItem.h" #endif using namespace WebCore; using namespace WebKit; WKTypeID WKPageGetTypeID() { return toAPI(WebPageProxy::APIType); } WKContextRef WKPageGetContext(WKPageRef pageRef) { return toAPI(toImpl(pageRef)->process()->context()); } WKPageGroupRef WKPageGetPageGroup(WKPageRef pageRef) { return toAPI(toImpl(pageRef)->pageGroup()); } void WKPageLoadURL(WKPageRef pageRef, WKURLRef URLRef) { toImpl(pageRef)->loadURL(toWTFString(URLRef)); } void WKPageLoadURLWithUserData(WKPageRef pageRef, WKURLRef URLRef, WKTypeRef userDataRef) { toImpl(pageRef)->loadURL(toWTFString(URLRef), toImpl(userDataRef)); } void WKPageLoadURLRequest(WKPageRef pageRef, WKURLRequestRef urlRequestRef) { toImpl(pageRef)->loadURLRequest(toImpl(urlRequestRef)); } void WKPageLoadURLRequestWithUserData(WKPageRef pageRef, WKURLRequestRef urlRequestRef, WKTypeRef userDataRef) { toImpl(pageRef)->loadURLRequest(toImpl(urlRequestRef), toImpl(userDataRef)); } void WKPageLoadFile(WKPageRef pageRef, WKURLRef fileURL, WKURLRef resourceDirectoryURL) { toImpl(pageRef)->loadFile(toWTFString(fileURL), toWTFString(resourceDirectoryURL)); } void WKPageLoadFileWithUserData(WKPageRef pageRef, WKURLRef fileURL, WKURLRef resourceDirectoryURL, WKTypeRef userDataRef) { toImpl(pageRef)->loadFile(toWTFString(fileURL), toWTFString(resourceDirectoryURL), toImpl(userDataRef)); } void WKPageLoadData(WKPageRef pageRef, WKDataRef dataRef, WKStringRef MIMETypeRef, WKStringRef encodingRef, WKURLRef baseURLRef) { toImpl(pageRef)->loadData(toImpl(dataRef), toWTFString(MIMETypeRef), toWTFString(encodingRef), toWTFString(baseURLRef)); } void WKPageLoadDataWithUserData(WKPageRef pageRef, WKDataRef dataRef, WKStringRef MIMETypeRef, WKStringRef encodingRef, WKURLRef baseURLRef, WKTypeRef userDataRef) { toImpl(pageRef)->loadData(toImpl(dataRef), toWTFString(MIMETypeRef), toWTFString(encodingRef), toWTFString(baseURLRef), toImpl(userDataRef)); } void WKPageLoadHTMLString(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef) { toImpl(pageRef)->loadHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef)); } void WKPageLoadHTMLStringWithUserData(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef, WKTypeRef userDataRef) { toImpl(pageRef)->loadHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef), toImpl(userDataRef)); } void WKPageLoadAlternateHTMLString(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef, WKURLRef unreachableURLRef) { toImpl(pageRef)->loadAlternateHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef), toWTFString(unreachableURLRef)); } void WKPageLoadAlternateHTMLStringWithUserData(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef, WKURLRef unreachableURLRef, WKTypeRef userDataRef) { toImpl(pageRef)->loadAlternateHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef), toWTFString(unreachableURLRef), toImpl(userDataRef)); } void WKPageLoadPlainTextString(WKPageRef pageRef, WKStringRef plainTextStringRef) { toImpl(pageRef)->loadPlainTextString(toWTFString(plainTextStringRef)); } void WKPageLoadPlainTextStringWithUserData(WKPageRef pageRef, WKStringRef plainTextStringRef, WKTypeRef userDataRef) { toImpl(pageRef)->loadPlainTextString(toWTFString(plainTextStringRef), toImpl(userDataRef)); } void WKPageLoadWebArchiveData(WKPageRef pageRef, WKDataRef webArchiveDataRef) { toImpl(pageRef)->loadWebArchiveData(toImpl(webArchiveDataRef)); } void WKPageLoadWebArchiveDataWithUserData(WKPageRef pageRef, WKDataRef webArchiveDataRef, WKTypeRef userDataRef) { toImpl(pageRef)->loadWebArchiveData(toImpl(webArchiveDataRef), toImpl(userDataRef)); } void WKPageStopLoading(WKPageRef pageRef) { toImpl(pageRef)->stopLoading(); } void WKPageReload(WKPageRef pageRef) { toImpl(pageRef)->reload(false); } void WKPageReloadFromOrigin(WKPageRef pageRef) { toImpl(pageRef)->reload(true); } bool WKPageTryClose(WKPageRef pageRef) { return toImpl(pageRef)->tryClose(); } void WKPageClose(WKPageRef pageRef) { toImpl(pageRef)->close(); } bool WKPageIsClosed(WKPageRef pageRef) { return toImpl(pageRef)->isClosed(); } void WKPageGoForward(WKPageRef pageRef) { toImpl(pageRef)->goForward(); } bool WKPageCanGoForward(WKPageRef pageRef) { return toImpl(pageRef)->canGoForward(); } void WKPageGoBack(WKPageRef pageRef) { toImpl(pageRef)->goBack(); } bool WKPageCanGoBack(WKPageRef pageRef) { return toImpl(pageRef)->canGoBack(); } void WKPageGoToBackForwardListItem(WKPageRef pageRef, WKBackForwardListItemRef itemRef) { toImpl(pageRef)->goToBackForwardItem(toImpl(itemRef)); } void WKPageTryRestoreScrollPosition(WKPageRef pageRef) { toImpl(pageRef)->tryRestoreScrollPosition(); } WKBackForwardListRef WKPageGetBackForwardList(WKPageRef pageRef) { return toAPI(toImpl(pageRef)->backForwardList()); } bool WKPageWillHandleHorizontalScrollEvents(WKPageRef pageRef) { return toImpl(pageRef)->willHandleHorizontalScrollEvents(); } WKStringRef WKPageCopyTitle(WKPageRef pageRef) { return toCopiedAPI(toImpl(pageRef)->pageTitle()); } WKFrameRef WKPageGetMainFrame(WKPageRef pageRef) { return toAPI(toImpl(pageRef)->mainFrame()); } WKFrameRef WKPageGetFocusedFrame(WKPageRef pageRef) { return toAPI(toImpl(pageRef)->focusedFrame()); } WKFrameRef WKPageGetFrameSetLargestFrame(WKPageRef pageRef) { return toAPI(toImpl(pageRef)->frameSetLargestFrame()); } uint64_t WKPageGetRenderTreeSize(WKPageRef page) { return toImpl(page)->renderTreeSize(); } WKInspectorRef WKPageGetInspector(WKPageRef pageRef) { #if defined(ENABLE_INSPECTOR) && ENABLE_INSPECTOR return toAPI(toImpl(pageRef)->inspector()); #else UNUSED_PARAM(pageRef); return 0; #endif } WKVibrationRef WKPageGetVibration(WKPageRef page) { #if ENABLE(VIBRATION) return toAPI(toImpl(page)->vibration()); #else UNUSED_PARAM(page); return 0; #endif } double WKPageGetEstimatedProgress(WKPageRef pageRef) { return toImpl(pageRef)->estimatedProgress(); } void WKPageSetMemoryCacheClientCallsEnabled(WKPageRef pageRef, bool memoryCacheClientCallsEnabled) { toImpl(pageRef)->setMemoryCacheClientCallsEnabled(memoryCacheClientCallsEnabled); } WKStringRef WKPageCopyUserAgent(WKPageRef pageRef) { return toCopiedAPI(toImpl(pageRef)->userAgent()); } WKStringRef WKPageCopyApplicationNameForUserAgent(WKPageRef pageRef) { return toCopiedAPI(toImpl(pageRef)->applicationNameForUserAgent()); } void WKPageSetApplicationNameForUserAgent(WKPageRef pageRef, WKStringRef applicationNameRef) { toImpl(pageRef)->setApplicationNameForUserAgent(toWTFString(applicationNameRef)); } WKStringRef WKPageCopyCustomUserAgent(WKPageRef pageRef) { return toCopiedAPI(toImpl(pageRef)->customUserAgent()); } void WKPageSetCustomUserAgent(WKPageRef pageRef, WKStringRef userAgentRef) { toImpl(pageRef)->setCustomUserAgent(toWTFString(userAgentRef)); } bool WKPageSupportsTextEncoding(WKPageRef pageRef) { return toImpl(pageRef)->supportsTextEncoding(); } WKStringRef WKPageCopyCustomTextEncodingName(WKPageRef pageRef) { return toCopiedAPI(toImpl(pageRef)->customTextEncodingName()); } void WKPageSetCustomTextEncodingName(WKPageRef pageRef, WKStringRef encodingNameRef) { toImpl(pageRef)->setCustomTextEncodingName(toWTFString(encodingNameRef)); } void WKPageTerminate(WKPageRef pageRef) { toImpl(pageRef)->terminateProcess(); } WKStringRef WKPageGetSessionHistoryURLValueType() { static WebString* sessionHistoryURLValueType = WebString::create("SessionHistoryURL").leakRef(); return toAPI(sessionHistoryURLValueType); } WKStringRef WKPageGetSessionBackForwardListItemValueType() { static WebString* sessionBackForwardListValueType = WebString::create("SessionBackForwardListItem").leakRef(); return toAPI(sessionBackForwardListValueType); } WKDataRef WKPageCopySessionState(WKPageRef pageRef, void *context, WKPageSessionStateFilterCallback filter) { return toAPI(toImpl(pageRef)->sessionStateData(filter, context).leakRef()); } void WKPageRestoreFromSessionState(WKPageRef pageRef, WKDataRef sessionStateData) { toImpl(pageRef)->restoreFromSessionStateData(toImpl(sessionStateData)); } double WKPageGetTextZoomFactor(WKPageRef pageRef) { return toImpl(pageRef)->textZoomFactor(); } double WKPageGetBackingScaleFactor(WKPageRef pageRef) { return toImpl(pageRef)->deviceScaleFactor(); } void WKPageSetCustomBackingScaleFactor(WKPageRef pageRef, double customScaleFactor) { toImpl(pageRef)->setCustomDeviceScaleFactor(customScaleFactor); } bool WKPageSupportsTextZoom(WKPageRef pageRef) { return toImpl(pageRef)->supportsTextZoom(); } void WKPageSetTextZoomFactor(WKPageRef pageRef, double zoomFactor) { toImpl(pageRef)->setTextZoomFactor(zoomFactor); } double WKPageGetPageZoomFactor(WKPageRef pageRef) { return toImpl(pageRef)->pageZoomFactor(); } void WKPageSetPageZoomFactor(WKPageRef pageRef, double zoomFactor) { toImpl(pageRef)->setPageZoomFactor(zoomFactor); } void WKPageSetPageAndTextZoomFactors(WKPageRef pageRef, double pageZoomFactor, double textZoomFactor) { toImpl(pageRef)->setPageAndTextZoomFactors(pageZoomFactor, textZoomFactor); } void WKPageSetScaleFactor(WKPageRef pageRef, double scale, WKPoint origin) { toImpl(pageRef)->scalePage(scale, toIntPoint(origin)); } double WKPageGetScaleFactor(WKPageRef pageRef) { return toImpl(pageRef)->pageScaleFactor(); } void WKPageSetUseFixedLayout(WKPageRef pageRef, bool fixed) { toImpl(pageRef)->setUseFixedLayout(fixed); } void WKPageSetFixedLayoutSize(WKPageRef pageRef, WKSize size) { toImpl(pageRef)->setFixedLayoutSize(toIntSize(size)); } bool WKPageUseFixedLayout(WKPageRef pageRef) { return toImpl(pageRef)->useFixedLayout(); } WKSize WKPageFixedLayoutSize(WKPageRef pageRef) { return toAPI(toImpl(pageRef)->fixedLayoutSize()); } void WKPageListenForLayoutMilestones(WKPageRef pageRef, WKLayoutMilestones milestones) { toImpl(pageRef)->listenForLayoutMilestones(toLayoutMilestones(milestones)); } void WKPageSetVisibilityState(WKPageRef pageRef, WKPageVisibilityState state, bool isInitialState) { toImpl(pageRef)->setVisibilityState(toPageVisibilityState(state), isInitialState); } bool WKPageHasHorizontalScrollbar(WKPageRef pageRef) { return toImpl(pageRef)->hasHorizontalScrollbar(); } bool WKPageHasVerticalScrollbar(WKPageRef pageRef) { return toImpl(pageRef)->hasVerticalScrollbar(); } void WKPageSetSuppressScrollbarAnimations(WKPageRef pageRef, bool suppressAnimations) { toImpl(pageRef)->setSuppressScrollbarAnimations(suppressAnimations); } bool WKPageAreScrollbarAnimationsSuppressed(WKPageRef pageRef) { return toImpl(pageRef)->areScrollbarAnimationsSuppressed(); } bool WKPageIsPinnedToLeftSide(WKPageRef pageRef) { return toImpl(pageRef)->isPinnedToLeftSide(); } bool WKPageIsPinnedToRightSide(WKPageRef pageRef) { return toImpl(pageRef)->isPinnedToRightSide(); } bool WKPageIsPinnedToTopSide(WKPageRef pageRef) { return toImpl(pageRef)->isPinnedToTopSide(); } bool WKPageIsPinnedToBottomSide(WKPageRef pageRef) { return toImpl(pageRef)->isPinnedToBottomSide(); } bool WKPageRubberBandsAtBottom(WKPageRef pageRef) { return toImpl(pageRef)->rubberBandsAtBottom(); } void WKPageSetRubberBandsAtBottom(WKPageRef pageRef, bool rubberBandsAtBottom) { toImpl(pageRef)->setRubberBandsAtBottom(rubberBandsAtBottom); } bool WKPageRubberBandsAtTop(WKPageRef pageRef) { return toImpl(pageRef)->rubberBandsAtTop(); } void WKPageSetRubberBandsAtTop(WKPageRef pageRef, bool rubberBandsAtTop) { toImpl(pageRef)->setRubberBandsAtTop(rubberBandsAtTop); } void WKPageSetPaginationMode(WKPageRef pageRef, WKPaginationMode paginationMode) { Pagination::Mode mode; switch (paginationMode) { case kWKPaginationModeUnpaginated: mode = Pagination::Unpaginated; break; case kWKPaginationModeLeftToRight: mode = Pagination::LeftToRightPaginated; break; case kWKPaginationModeRightToLeft: mode = Pagination::RightToLeftPaginated; break; case kWKPaginationModeTopToBottom: mode = Pagination::TopToBottomPaginated; break; case kWKPaginationModeBottomToTop: mode = Pagination::BottomToTopPaginated; break; default: return; } toImpl(pageRef)->setPaginationMode(mode); } WKPaginationMode WKPageGetPaginationMode(WKPageRef pageRef) { switch (toImpl(pageRef)->paginationMode()) { case Pagination::Unpaginated: return kWKPaginationModeUnpaginated; case Pagination::LeftToRightPaginated: return kWKPaginationModeLeftToRight; case Pagination::RightToLeftPaginated: return kWKPaginationModeRightToLeft; case Pagination::TopToBottomPaginated: return kWKPaginationModeTopToBottom; case Pagination::BottomToTopPaginated: return kWKPaginationModeBottomToTop; } ASSERT_NOT_REACHED(); return kWKPaginationModeUnpaginated; } void WKPageSetPaginationBehavesLikeColumns(WKPageRef pageRef, bool behavesLikeColumns) { toImpl(pageRef)->setPaginationBehavesLikeColumns(behavesLikeColumns); } bool WKPageGetPaginationBehavesLikeColumns(WKPageRef pageRef) { return toImpl(pageRef)->paginationBehavesLikeColumns(); } void WKPageSetPageLength(WKPageRef pageRef, double pageLength) { toImpl(pageRef)->setPageLength(pageLength); } double WKPageGetPageLength(WKPageRef pageRef) { return toImpl(pageRef)->pageLength(); } void WKPageSetGapBetweenPages(WKPageRef pageRef, double gap) { toImpl(pageRef)->setGapBetweenPages(gap); } double WKPageGetGapBetweenPages(WKPageRef pageRef) { return toImpl(pageRef)->gapBetweenPages(); } unsigned WKPageGetPageCount(WKPageRef pageRef) { return toImpl(pageRef)->pageCount(); } bool WKPageCanDelete(WKPageRef pageRef) { return toImpl(pageRef)->canDelete(); } bool WKPageHasSelectedRange(WKPageRef pageRef) { return toImpl(pageRef)->hasSelectedRange(); } bool WKPageIsContentEditable(WKPageRef pageRef) { return toImpl(pageRef)->isContentEditable(); } void WKPageSetMaintainsInactiveSelection(WKPageRef pageRef, bool newValue) { return toImpl(pageRef)->setMaintainsInactiveSelection(newValue); } void WKPageCenterSelectionInVisibleArea(WKPageRef pageRef) { return toImpl(pageRef)->centerSelectionInVisibleArea(); } void WKPageFindStringMatches(WKPageRef pageRef, WKStringRef string, WKFindOptions options, unsigned maxMatchCount) { toImpl(pageRef)->findStringMatches(toImpl(string)->string(), toFindOptions(options), maxMatchCount); } void WKPageGetImageForFindMatch(WKPageRef pageRef, int32_t matchIndex) { toImpl(pageRef)->getImageForFindMatch(matchIndex); } void WKPageSelectFindMatch(WKPageRef pageRef, int32_t matchIndex) { toImpl(pageRef)->selectFindMatch(matchIndex); } void WKPageFindString(WKPageRef pageRef, WKStringRef string, WKFindOptions options, unsigned maxMatchCount) { toImpl(pageRef)->findString(toImpl(string)->string(), toFindOptions(options), maxMatchCount); } void WKPageHideFindUI(WKPageRef pageRef) { toImpl(pageRef)->hideFindUI(); } void WKPageCountStringMatches(WKPageRef pageRef, WKStringRef string, WKFindOptions options, unsigned maxMatchCount) { toImpl(pageRef)->countStringMatches(toImpl(string)->string(), toFindOptions(options), maxMatchCount); } void WKPageSetPageContextMenuClient(WKPageRef pageRef, const WKPageContextMenuClient* wkClient) { #if ENABLE(CONTEXT_MENUS) toImpl(pageRef)->initializeContextMenuClient(wkClient); #endif } void WKPageSetPageFindClient(WKPageRef pageRef, const WKPageFindClient* wkClient) { toImpl(pageRef)->initializeFindClient(wkClient); } void WKPageSetPageFindMatchesClient(WKPageRef pageRef, const WKPageFindMatchesClient* wkClient) { toImpl(pageRef)->initializeFindMatchesClient(wkClient); } void WKPageSetPageFormClient(WKPageRef pageRef, const WKPageFormClient* wkClient) { toImpl(pageRef)->initializeFormClient(wkClient); } void WKPageSetPageLoaderClient(WKPageRef pageRef, const WKPageLoaderClient* wkClient) { toImpl(pageRef)->initializeLoaderClient(wkClient); } void WKPageSetPagePolicyClient(WKPageRef pageRef, const WKPagePolicyClient* wkClient) { toImpl(pageRef)->initializePolicyClient(wkClient); } void WKPageSetPageUIClient(WKPageRef pageRef, const WKPageUIClient* wkClient) { toImpl(pageRef)->initializeUIClient(wkClient); } void WKPageRunJavaScriptInMainFrame(WKPageRef pageRef, WKStringRef scriptRef, void* context, WKPageRunJavaScriptFunction callback) { toImpl(pageRef)->runJavaScriptInMainFrame(toImpl(scriptRef)->string(), ScriptValueCallback::create(context, callback)); } #ifdef __BLOCKS__ static void callRunJavaScriptBlockAndRelease(WKSerializedScriptValueRef resultValue, WKErrorRef error, void* context) { WKPageRunJavaScriptBlock block = (WKPageRunJavaScriptBlock)context; block(resultValue, error); Block_release(block); } void WKPageRunJavaScriptInMainFrame_b(WKPageRef pageRef, WKStringRef scriptRef, WKPageRunJavaScriptBlock block) { WKPageRunJavaScriptInMainFrame(pageRef, scriptRef, Block_copy(block), callRunJavaScriptBlockAndRelease); } #endif void WKPageRenderTreeExternalRepresentation(WKPageRef pageRef, void* context, WKPageRenderTreeExternalRepresentationFunction callback) { toImpl(pageRef)->getRenderTreeExternalRepresentation(StringCallback::create(context, callback)); } #ifdef __BLOCKS__ static void callRenderTreeExternalRepresentationBlockAndDispose(WKStringRef resultValue, WKErrorRef error, void* context) { WKPageRenderTreeExternalRepresentationBlock block = (WKPageRenderTreeExternalRepresentationBlock)context; block(resultValue, error); Block_release(block); } void WKPageRenderTreeExternalRepresentation_b(WKPageRef pageRef, WKPageRenderTreeExternalRepresentationBlock block) { WKPageRenderTreeExternalRepresentation(pageRef, Block_copy(block), callRenderTreeExternalRepresentationBlockAndDispose); } #endif void WKPageGetSourceForFrame(WKPageRef pageRef, WKFrameRef frameRef, void* context, WKPageGetSourceForFrameFunction callback) { toImpl(pageRef)->getSourceForFrame(toImpl(frameRef), StringCallback::create(context, callback)); } #ifdef __BLOCKS__ static void callGetSourceForFrameBlockBlockAndDispose(WKStringRef resultValue, WKErrorRef error, void* context) { WKPageGetSourceForFrameBlock block = (WKPageGetSourceForFrameBlock)context; block(resultValue, error); Block_release(block); } void WKPageGetSourceForFrame_b(WKPageRef pageRef, WKFrameRef frameRef, WKPageGetSourceForFrameBlock block) { WKPageGetSourceForFrame(pageRef, frameRef, Block_copy(block), callGetSourceForFrameBlockBlockAndDispose); } #endif void WKPageGetContentsAsString(WKPageRef pageRef, void* context, WKPageGetContentsAsStringFunction callback) { toImpl(pageRef)->getContentsAsString(StringCallback::create(context, callback)); } #ifdef __BLOCKS__ static void callContentsAsStringBlockBlockAndDispose(WKStringRef resultValue, WKErrorRef error, void* context) { WKPageGetContentsAsStringBlock block = (WKPageGetContentsAsStringBlock)context; block(resultValue, error); Block_release(block); } void WKPageGetContentsAsString_b(WKPageRef pageRef, WKPageGetSourceForFrameBlock block) { WKPageGetContentsAsString(pageRef, Block_copy(block), callContentsAsStringBlockBlockAndDispose); } #endif void WKPageGetSelectionAsWebArchiveData(WKPageRef pageRef, void* context, WKPageGetSelectionAsWebArchiveDataFunction callback) { toImpl(pageRef)->getSelectionAsWebArchiveData(DataCallback::create(context, callback)); } void WKPageGetContentsAsMHTMLData(WKPageRef pageRef, bool useBinaryEncoding, void* context, WKPageGetContentsAsMHTMLDataFunction callback) { #if ENABLE(MHTML) toImpl(pageRef)->getContentsAsMHTMLData(DataCallback::create(context, callback), useBinaryEncoding); #else UNUSED_PARAM(pageRef); UNUSED_PARAM(useBinaryEncoding); UNUSED_PARAM(context); UNUSED_PARAM(callback); #endif } void WKPageForceRepaint(WKPageRef pageRef, void* context, WKPageForceRepaintFunction callback) { toImpl(pageRef)->forceRepaint(VoidCallback::create(context, callback)); } WK_EXPORT WKURLRef WKPageCopyPendingAPIRequestURL(WKPageRef pageRef) { if (toImpl(pageRef)->pendingAPIRequestURL().isNull()) return 0; return toCopiedURLAPI(toImpl(pageRef)->pendingAPIRequestURL()); } WKURLRef WKPageCopyActiveURL(WKPageRef pageRef) { return toCopiedURLAPI(toImpl(pageRef)->activeURL()); } WKURLRef WKPageCopyProvisionalURL(WKPageRef pageRef) { return toCopiedURLAPI(toImpl(pageRef)->provisionalURL()); } WKURLRef WKPageCopyCommittedURL(WKPageRef pageRef) { return toCopiedURLAPI(toImpl(pageRef)->committedURL()); } void WKPageSetDebugPaintFlags(WKPageDebugPaintFlags flags) { WebPageProxy::setDebugPaintFlags(flags); } WKPageDebugPaintFlags WKPageGetDebugPaintFlags() { return WebPageProxy::debugPaintFlags(); } WKStringRef WKPageCopyStandardUserAgentWithApplicationName(WKStringRef applicationName) { return toCopiedAPI(WebPageProxy::standardUserAgent(toImpl(applicationName)->string())); } void WKPageValidateCommand(WKPageRef pageRef, WKStringRef command, void* context, WKPageValidateCommandCallback callback) { toImpl(pageRef)->validateCommand(toImpl(command)->string(), ValidateCommandCallback::create(context, callback)); } void WKPageExecuteCommand(WKPageRef pageRef, WKStringRef command) { toImpl(pageRef)->executeEditCommand(toImpl(command)->string()); } #if PLATFORM(MAC) struct ComputedPagesContext { ComputedPagesContext(WKPageComputePagesForPrintingFunction callback, void* context) : callback(callback) , context(context) { } WKPageComputePagesForPrintingFunction callback; void* context; }; static void computedPagesCallback(const Vector& rects, double scaleFactor, WKErrorRef error, void* untypedContext) { OwnPtr context = adoptPtr(static_cast(untypedContext)); Vector wkRects(rects.size()); for (size_t i = 0; i < rects.size(); ++i) wkRects[i] = toAPI(rects[i]); context->callback(wkRects.data(), wkRects.size(), scaleFactor, error, context->context); } static PrintInfo printInfoFromWKPrintInfo(const WKPrintInfo& printInfo) { PrintInfo result; result.pageSetupScaleFactor = printInfo.pageSetupScaleFactor; result.availablePaperWidth = printInfo.availablePaperWidth; result.availablePaperHeight = printInfo.availablePaperHeight; return result; } void WKPageComputePagesForPrinting(WKPageRef page, WKFrameRef frame, WKPrintInfo printInfo, WKPageComputePagesForPrintingFunction callback, void* context) { toImpl(page)->computePagesForPrinting(toImpl(frame), printInfoFromWKPrintInfo(printInfo), ComputedPagesCallback::create(new ComputedPagesContext(callback, context), computedPagesCallback)); } void WKPageBeginPrinting(WKPageRef page, WKFrameRef frame, WKPrintInfo printInfo) { toImpl(page)->beginPrinting(toImpl(frame), printInfoFromWKPrintInfo(printInfo)); } void WKPageDrawPagesToPDF(WKPageRef page, WKFrameRef frame, WKPrintInfo printInfo, uint32_t first, uint32_t count, WKPageDrawToPDFFunction callback, void* context) { toImpl(page)->drawPagesToPDF(toImpl(frame), printInfoFromWKPrintInfo(printInfo), first, count, DataCallback::create(context, callback)); } void WKPageEndPrinting(WKPageRef page) { toImpl(page)->endPrinting(); } #endif WKImageRef WKPageCreateSnapshotOfVisibleContent(WKPageRef) { return 0; } void WKPageSetShouldSendEventsSynchronously(WKPageRef page, bool sync) { toImpl(page)->setShouldSendEventsSynchronously(sync); } void WKPageSetMediaVolume(WKPageRef page, float volume) { toImpl(page)->setMediaVolume(volume); } void WKPagePostMessageToInjectedBundle(WKPageRef pageRef, WKStringRef messageNameRef, WKTypeRef messageBodyRef) { toImpl(pageRef)->postMessageToInjectedBundle(toImpl(messageNameRef)->string(), toImpl(messageBodyRef)); } WKArrayRef WKPageCopyRelatedPages(WKPageRef pageRef) { return toAPI(toImpl(pageRef)->relatedPages().leakRef()); } void WKPageSetMayStartMediaWhenInWindow(WKPageRef pageRef, bool mayStartMedia) { toImpl(pageRef)->setMayStartMediaWhenInWindow(mayStartMedia); } void WKPageSelectContextMenuItem(WKPageRef page, WKContextMenuItemRef item) { #if ENABLE(CONTEXT_MENUS) toImpl(page)->contextMenuItemSelected(*(toImpl(item)->data())); #endif } WKScrollPinningBehavior WKPageGetScrollPinningBehavior(WKPageRef page) { ScrollPinningBehavior pinning = toImpl(page)->scrollPinningBehavior(); switch (pinning) { case DoNotPin: return kWKScrollPinningBehaviorDoNotPin; case PinToTop: return kWKScrollPinningBehaviorPinToTop; case PinToBottom: return kWKScrollPinningBehaviorPinToBottom; } ASSERT_NOT_REACHED(); return kWKScrollPinningBehaviorDoNotPin; } void WKPageSetScrollPinningBehavior(WKPageRef page, WKScrollPinningBehavior pinning) { ScrollPinningBehavior corePinning = DoNotPin; switch (pinning) { case kWKScrollPinningBehaviorDoNotPin: corePinning = DoNotPin; break; case kWKScrollPinningBehaviorPinToTop: corePinning = PinToTop; break; case kWKScrollPinningBehaviorPinToBottom: corePinning = PinToBottom; break; default: ASSERT_NOT_REACHED(); } toImpl(page)->setScrollPinningBehavior(corePinning); } // -- DEPRECATED -- void WKPageSetInvalidMessageFunction(WKPageInvalidMessageFunction) { // FIXME: Remove this function when doing so won't break WebKit nightlies. } WKStringRef WKPageGetPluginInformationBundleIdentifierKey() { return WKPluginInformationBundleIdentifierKey(); } WKStringRef WKPageGetPluginInformationBundleVersionKey() { return WKPluginInformationBundleVersionKey(); } WKStringRef WKPageGetPluginInformationDisplayNameKey() { return WKPluginInformationDisplayNameKey(); } WKStringRef WKPageGetPluginInformationFrameURLKey() { return WKPluginInformationFrameURLKey(); } WKStringRef WKPageGetPluginInformationMIMETypeKey() { return WKPluginInformationMIMETypeKey(); } WKStringRef WKPageGetPluginInformationPageURLKey() { return WKPluginInformationPageURLKey(); } WKStringRef WKPageGetPluginInformationPluginspageAttributeURLKey() { return WKPluginInformationPluginspageAttributeURLKey(); } WKStringRef WKPageGetPluginInformationPluginURLKey() { return WKPluginInformationPluginURLKey(); } // -- DEPRECATED --