diff options
Diffstat (limited to 'Source/WebKit2/WebProcess/InjectedBundle')
15 files changed, 83 insertions, 22 deletions
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp index 82f616a..dd44e93 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp +++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp @@ -164,6 +164,13 @@ WKBundlePageRef WKBundleFrameGetPage(WKBundleFrameRef frameRef) return toAPI(toImpl(frameRef)->page()); } +void WKBundleFrameClearOpener(WKBundleFrameRef frameRef) +{ + Frame* coreFrame = toImpl(frameRef)->coreFrame(); + if (coreFrame) + coreFrame->loader()->setOpener(0); +} + WKStringRef WKBundleFrameCopyLayerTreeAsText(WKBundleFrameRef frameRef) { return toCopiedAPI(toImpl(frameRef)->layerTreeAsText()); diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h index 3f83a61..a31e4ae 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h +++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h @@ -47,6 +47,7 @@ WK_EXPORT void WKBundleFrameSuspendAnimations(WKBundleFrameRef frame); WK_EXPORT void WKBundleFrameResumeAnimations(WKBundleFrameRef frame); WK_EXPORT unsigned WKBundleFrameGetPendingUnloadCount(WKBundleFrameRef frame); WK_EXPORT WKStringRef WKBundleFrameCopyLayerTreeAsText(WKBundleFrameRef frame); +WK_EXPORT void WKBundleFrameClearOpener(WKBundleFrameRef frame); #ifdef __cplusplus } diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp index b764ee9..4e941c3 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp +++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp @@ -38,10 +38,10 @@ WKTypeID WKBundleHitTestResultGetTypeID() return toAPI(InjectedBundleHitTestResult::APIType); } -WKBundleNodeHandleRef WKBundleHitTestResultGetNodeHandle(WKBundleHitTestResultRef hitTestResultRef) +WKBundleNodeHandleRef WKBundleHitTestResultCopyNodeHandle(WKBundleHitTestResultRef hitTestResultRef) { RefPtr<InjectedBundleNodeHandle> nodeHandle = toImpl(hitTestResultRef)->nodeHandle(); - return toAPI(nodeHandle.get()); + return toAPI(nodeHandle.release().leakRef()); } WKBundleFrameRef WKBundleHitTestResultGetFrame(WKBundleHitTestResultRef hitTestResultRef) diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h index 19a6582..b288e0b 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h +++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h @@ -35,7 +35,7 @@ extern "C" { WK_EXPORT WKTypeID WKBundleHitTestResultGetTypeID(); -WK_EXPORT WKBundleNodeHandleRef WKBundleHitTestResultGetNodeHandle(WKBundleHitTestResultRef hitTestResult); +WK_EXPORT WKBundleNodeHandleRef WKBundleHitTestResultCopyNodeHandle(WKBundleHitTestResultRef hitTestResult); WK_EXPORT WKBundleFrameRef WKBundleHitTestResultGetFrame(WKBundleHitTestResultRef hitTestResult); WK_EXPORT WKBundleFrameRef WKBundleHitTestResultGetTargetFrame(WKBundleHitTestResultRef hitTestResult); diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp index 9b0eaf1..0e91d8e 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp +++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp @@ -45,6 +45,12 @@ WKBundleNodeHandleRef WKBundleNodeHandleCreate(JSContextRef contextRef, JSObject return toAPI(nodeHandle.release().releaseRef()); } +WKBundleNodeHandleRef WKBundleNodeHandleCopyDocument(WKBundleNodeHandleRef nodeHandleRef) +{ + RefPtr<InjectedBundleNodeHandle> nodeHandle = toImpl(nodeHandleRef)->document(); + return toAPI(nodeHandle.release().releaseRef()); +} + WKRect WKBundleNodeHandleGetElementBounds(WKBundleNodeHandleRef nodeHandleRef) { return toAPI(toImpl(nodeHandleRef)->elementBounds()); diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h index 8953ff8..aaa95e6 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h +++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h @@ -36,6 +36,9 @@ extern "C" { WK_EXPORT WKBundleNodeHandleRef WKBundleNodeHandleCreate(JSContextRef context, JSObjectRef object); +/* Convenience Operations */ +WK_EXPORT WKBundleNodeHandleRef WKBundleNodeHandleCopyDocument(WKBundleNodeHandleRef nodeHandle); + /* Additional DOM Operations */ diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp index a1a4da3..58052c5 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp +++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp @@ -212,3 +212,8 @@ WKBundleInspectorRef WKBundlePageGetInspector(WKBundlePageRef pageRef) return toAPI(toImpl(pageRef)->inspector()); } #endif + +void WKBundlePageForceRepaint(WKBundlePageRef page) +{ + toImpl(page)->forceRepaintWithoutCallback(); +} diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.h index 944a5b6..4be67d5 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.h +++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.h @@ -114,17 +114,25 @@ struct WKBundlePageLoaderClient { }; typedef struct WKBundlePageLoaderClient WKBundlePageLoaderClient; +enum { + WKBundlePagePolicyActionPassThrough, + WKBundlePagePolicyActionUse +}; +typedef uint32_t WKBundlePagePolicyAction; + // Policy Client -typedef void (*WKBundlePageDecidePolicyForNavigationActionCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleNavigationActionRef navigationAction, WKURLRequestRef request, WKTypeRef* userData, const void* clientInfo); -typedef void (*WKBundlePageDecidePolicyForNewWindowActionCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleNavigationActionRef navigationAction, WKURLRequestRef request, WKStringRef frameName, WKTypeRef* userData, const void* clientInfo); -typedef void (*WKBundlePageDecidePolicyForMIMETypeCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKStringRef MIMEType, WKURLRequestRef request, WKTypeRef* userData, const void* clientInfo); +typedef WKBundlePagePolicyAction (*WKBundlePageDecidePolicyForNavigationActionCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleNavigationActionRef navigationAction, WKURLRequestRef request, WKTypeRef* userData, const void* clientInfo); +typedef WKBundlePagePolicyAction (*WKBundlePageDecidePolicyForNewWindowActionCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleNavigationActionRef navigationAction, WKURLRequestRef request, WKStringRef frameName, WKTypeRef* userData, const void* clientInfo); +typedef WKBundlePagePolicyAction (*WKBundlePageDecidePolicyForResponseCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKURLResponseRef response, WKURLRequestRef request, WKTypeRef* userData, const void* clientInfo); +typedef void (*WKBundlePageUnableToImplementPolicyCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKErrorRef error, WKTypeRef* userData, const void* clientInfo); struct WKBundlePagePolicyClient { int version; const void * clientInfo; WKBundlePageDecidePolicyForNavigationActionCallback decidePolicyForNavigationAction; WKBundlePageDecidePolicyForNewWindowActionCallback decidePolicyForNewWindowAction; - WKBundlePageDecidePolicyForMIMETypeCallback decidePolicyForMIMEType; + WKBundlePageDecidePolicyForResponseCallback decidePolicyForResponse; + WKBundlePageUnableToImplementPolicyCallback unableToImplementPolicy; }; typedef struct WKBundlePagePolicyClient WKBundlePagePolicyClient; @@ -140,7 +148,10 @@ struct WKBundlePageResourceLoadClient { int version; const void * clientInfo; WKBundlePageDidInitiateLoadForResourceCallback didInitiateLoadForResource; + + // willSendRequestForFrame is supposed to return a retained reference to the URL request. WKBundlePageWillSendRequestForFrameCallback willSendRequestForFrame; + WKBundlePageDidReceiveResponseForResourceCallback didReceiveResponseForResource; WKBundlePageDidReceiveContentLengthForResourceCallback didReceiveContentLengthForResource; WKBundlePageDidFinishLoadForResourceCallback didFinishLoadForResource; diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h index 4bc8fed..b9dce68 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h +++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h @@ -45,6 +45,8 @@ WK_EXPORT void WKBundlePageSetTextZoomFactor(WKBundlePageRef page, double zoomFa WK_EXPORT double WKBundlePageGetPageZoomFactor(WKBundlePageRef page); WK_EXPORT void WKBundlePageSetPageZoomFactor(WKBundlePageRef page, double zoomFactor); +WK_EXPORT void WKBundlePageForceRepaint(WKBundlePageRef page); + #ifdef __cplusplus } #endif diff --git a/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp b/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp index 43cf1ef..858941e 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp +++ b/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp @@ -95,6 +95,11 @@ Node* InjectedBundleNodeHandle::coreNode() const return m_node.get(); } +PassRefPtr<InjectedBundleNodeHandle> InjectedBundleNodeHandle::document() +{ + return getOrCreate(m_node->document()); +} + // Additional DOM Operations // Note: These should only be operations that are not exposed to JavaScript. diff --git a/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h b/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h index a02f7f2..0dcebf6 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h +++ b/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h @@ -53,6 +53,9 @@ public: WebCore::Node* coreNode() const; + // Convenience DOM Operations + PassRefPtr<InjectedBundleNodeHandle> document(); + // Additional DOM Operations // Note: These should only be operations that are not exposed to JavaScript. WebCore::IntRect elementBounds() const; diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp index c55e729..b90cf1f 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp +++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp @@ -27,45 +27,60 @@ #include "InjectedBundlePagePolicyClient.h" #include "WKBundleAPICast.h" +#include "WebError.h" #include "WebURLRequest.h" using namespace WebCore; namespace WebKit { -void InjectedBundlePagePolicyClient::decidePolicyForNavigationAction(WebPage* page, WebFrame* frame, InjectedBundleNavigationAction* action, const ResourceRequest& resourceRequest, RefPtr<APIObject>& userData) +WKBundlePagePolicyAction InjectedBundlePagePolicyClient::decidePolicyForNavigationAction(WebPage* page, WebFrame* frame, InjectedBundleNavigationAction* action, const ResourceRequest& resourceRequest, RefPtr<APIObject>& userData) { if (!m_client.decidePolicyForNavigationAction) - return; + return WKBundlePagePolicyActionPassThrough; RefPtr<WebURLRequest> request = WebURLRequest::create(resourceRequest); WKTypeRef userDataToPass = 0; - m_client.decidePolicyForNavigationAction(toAPI(page), toAPI(frame), toAPI(action), toAPI(request.get()), &userDataToPass, m_client.clientInfo); + WKBundlePagePolicyAction policy = m_client.decidePolicyForNavigationAction(toAPI(page), toAPI(frame), toAPI(action), toAPI(request.get()), &userDataToPass, m_client.clientInfo); userData = adoptRef(toImpl(userDataToPass)); + return policy; } -void InjectedBundlePagePolicyClient::decidePolicyForNewWindowAction(WebPage* page, WebFrame* frame, InjectedBundleNavigationAction* action, const ResourceRequest& resourceRequest, const String& frameName, RefPtr<APIObject>& userData) +WKBundlePagePolicyAction InjectedBundlePagePolicyClient::decidePolicyForNewWindowAction(WebPage* page, WebFrame* frame, InjectedBundleNavigationAction* action, const ResourceRequest& resourceRequest, const String& frameName, RefPtr<APIObject>& userData) { if (!m_client.decidePolicyForNewWindowAction) - return; + return WKBundlePagePolicyActionPassThrough; RefPtr<WebURLRequest> request = WebURLRequest::create(resourceRequest); WKTypeRef userDataToPass = 0; - m_client.decidePolicyForNewWindowAction(toAPI(page), toAPI(frame), toAPI(action), toAPI(request.get()), toAPI(frameName.impl()), &userDataToPass, m_client.clientInfo); + WKBundlePagePolicyAction policy = m_client.decidePolicyForNewWindowAction(toAPI(page), toAPI(frame), toAPI(action), toAPI(request.get()), toAPI(frameName.impl()), &userDataToPass, m_client.clientInfo); userData = adoptRef(toImpl(userDataToPass)); + return policy; } -void InjectedBundlePagePolicyClient::decidePolicyForMIMEType(WebPage* page, WebFrame* frame, const String& MIMEType, const ResourceRequest& resourceRequest, RefPtr<APIObject>& userData) +WKBundlePagePolicyAction InjectedBundlePagePolicyClient::decidePolicyForResponse(WebPage* page, WebFrame* frame, const ResourceResponse& resourceResponse, const ResourceRequest& resourceRequest, RefPtr<APIObject>& userData) { - if (!m_client.decidePolicyForMIMEType) - return; + if (!m_client.decidePolicyForResponse) + return WKBundlePagePolicyActionPassThrough; + RefPtr<WebURLResponse> response = WebURLResponse::create(resourceResponse); RefPtr<WebURLRequest> request = WebURLRequest::create(resourceRequest); WKTypeRef userDataToPass = 0; - m_client.decidePolicyForMIMEType(toAPI(page), toAPI(frame), toAPI(MIMEType.impl()), toAPI(request.get()), &userDataToPass, m_client.clientInfo); + WKBundlePagePolicyAction policy = m_client.decidePolicyForResponse(toAPI(page), toAPI(frame), toAPI(response.get()), toAPI(request.get()), &userDataToPass, m_client.clientInfo); + userData = adoptRef(toImpl(userDataToPass)); + return policy; +} + +void InjectedBundlePagePolicyClient::unableToImplementPolicy(WebPage* page, WebFrame* frame, const WebCore::ResourceError& error, RefPtr<APIObject>& userData) +{ + if (!m_client.unableToImplementPolicy) + return; + + WKTypeRef userDataToPass = 0; + m_client.unableToImplementPolicy(toAPI(page), toAPI(frame), toAPI(error), &userDataToPass, m_client.clientInfo); userData = adoptRef(toImpl(userDataToPass)); } diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h index 2145ac4..fd02196 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h +++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h @@ -32,7 +32,9 @@ #include <wtf/Forward.h> namespace WebCore { + class ResourceError; class ResourceRequest; + class ResourceResponse; } namespace WebKit { @@ -43,9 +45,10 @@ class WebPage; class InjectedBundlePagePolicyClient : public APIClient<WKBundlePagePolicyClient> { public: - void decidePolicyForNavigationAction(WebPage*, WebFrame*, InjectedBundleNavigationAction*, const WebCore::ResourceRequest&, RefPtr<APIObject>& userData); - void decidePolicyForNewWindowAction(WebPage*, WebFrame*, InjectedBundleNavigationAction*, const WebCore::ResourceRequest&, const String& frameName, RefPtr<APIObject>& userData); - void decidePolicyForMIMEType(WebPage*, WebFrame*, const String& MIMEType, const WebCore::ResourceRequest&, RefPtr<APIObject>& userData); + WKBundlePagePolicyAction decidePolicyForNavigationAction(WebPage*, WebFrame*, InjectedBundleNavigationAction*, const WebCore::ResourceRequest&, RefPtr<APIObject>& userData); + WKBundlePagePolicyAction decidePolicyForNewWindowAction(WebPage*, WebFrame*, InjectedBundleNavigationAction*, const WebCore::ResourceRequest&, const String& frameName, RefPtr<APIObject>& userData); + WKBundlePagePolicyAction decidePolicyForResponse(WebPage*, WebFrame*, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, RefPtr<APIObject>& userData); + void unableToImplementPolicy(WebPage*, WebFrame*, const WebCore::ResourceError&, RefPtr<APIObject>& userData); }; } // namespace WebKit diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp index c2866a8..49dcac6 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp +++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp @@ -46,7 +46,7 @@ void InjectedBundlePageResourceLoadClient::willSendRequestForFrame(WebPage* page if (!m_client.willSendRequestForFrame) return; - RefPtr<WebURLRequest> returnedRequest = toImpl(m_client.willSendRequestForFrame(toAPI(page), toAPI(frame), identifier, toAPI(request), toAPI(redirectResponse), m_client.clientInfo)); + RefPtr<WebURLRequest> returnedRequest = adoptRef(toImpl(m_client.willSendRequestForFrame(toAPI(page), toAPI(frame), identifier, toAPI(request), toAPI(redirectResponse), m_client.clientInfo))); if (returnedRequest) request = returnedRequest->resourceRequest(); else diff --git a/Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp b/Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp index c75e433..bbf24e4 100644 --- a/Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp +++ b/Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp @@ -27,9 +27,9 @@ #include "config.h" #include "InjectedBundle.h" -#include "NotImplemented.h" #include "WKBundleAPICast.h" #include "WKBundleInitialize.h" +#include <WebCore/NotImplemented.h> using namespace WebCore; |