| /* |
| * 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 <WebCore/Page.h> |
| |
| #ifdef __BLOCKS__ |
| #include <Block.h> |
| #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 WKPageLoadURLRequest(WKPageRef pageRef, WKURLRequestRef urlRequestRef) |
| { |
| toImpl(pageRef)->loadURLRequest(toImpl(urlRequestRef)); |
| } |
| |
| void WKPageLoadHTMLString(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef) |
| { |
| toImpl(pageRef)->loadHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef)); |
| } |
| |
| void WKPageLoadAlternateHTMLString(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef, WKURLRef unreachableURLRef) |
| { |
| toImpl(pageRef)->loadAlternateHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef), toWTFString(unreachableURLRef)); |
| } |
| |
| void WKPageLoadPlainTextString(WKPageRef pageRef, WKStringRef plainTextStringRef) |
| { |
| toImpl(pageRef)->loadPlainTextString(toWTFString(plainTextStringRef)); |
| } |
| |
| void WKPageLoadWebArchiveData(WKPageRef pageRef, WKDataRef webArchiveDataRef) |
| { |
| toImpl(pageRef)->loadWebArchiveData(toImpl(webArchiveDataRef)); |
| } |
| |
| void WKPageLoadFile(WKPageRef pageRef, WKURLRef fileURL, WKURLRef resourceDirectoryURL) |
| { |
| toImpl(pageRef)->loadFile(toWTFString(fileURL), toWTFString(resourceDirectoryURL)); |
| } |
| |
| 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<WebCore::IntRect>& rects, double scaleFactor, WKErrorRef error, void* untypedContext) |
| { |
| OwnPtr<ComputedPagesContext> context = adoptPtr(static_cast<ComputedPagesContext*>(untypedContext)); |
| Vector<WKRect> 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 WKPageSetOverridePrivateBrowsingEnabled(WKPageRef pageRef, bool enabled) |
| { |
| toImpl(pageRef)->setOverridePrivateBrowsingEnabled(enabled); |
| } |
| |
| bool WKPageGetOverridePrivateBrowsingEnabled(WKPageRef pageRef) |
| { |
| return toImpl(pageRef)->overridePrivateBrowsingEnabled(); |
| } |
| |
| void WKPageSelectContextMenuItem(WKPageRef page, WKContextMenuItemRef item) |
| { |
| #if ENABLE(CONTEXT_MENUS) |
| toImpl(page)->contextMenuItemSelected(*(toImpl(item)->data())); |
| #endif |
| } |
| |
| |
| |
| // -- 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 -- |
| |