Changeset 163108 in webkit
- Timestamp:
- Jan 30, 2014 1:28:13 PM (10 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r163103 r163108 1 2014-01-30 Anders Carlsson <andersca@apple.com> 2 3 Begin fleshing out the navigation delegate 4 https://bugs.webkit.org/show_bug.cgi?id=127939 5 6 Reviewed by Dan Bernstein. 7 8 * UIProcess/API/APIPolicyClient.h: 9 (API::PolicyClient::decidePolicyForNavigationAction): 10 Pass the listener as a RefPtr. 11 12 * UIProcess/API/C/WKPage.cpp: 13 (WKPageSetPagePolicyClient): 14 Update for API::PolicyClient changes. 15 16 * UIProcess/API/Cocoa/WKNavigationDelegate.h: 17 Add new delegate. 18 19 * UIProcess/API/Cocoa/WKWebView.mm: 20 (-[WKWebView initWithFrame:configuration:]): 21 Set a policy client on the page. 22 23 * UIProcess/Cocoa/NavigationState.h: 24 Add a new PolicyClient class. 25 26 * UIProcess/Cocoa/NavigationState.mm: 27 (WebKit::NavigationState::NavigationState): 28 Initialize m_navigationDelegateMethods. 29 30 (WebKit::NavigationState::navigationDelegate): 31 m_delegate was renamed to m_navigationDelegate. 32 33 (WebKit::NavigationState::setNavigationDelegate): 34 Update m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler. 35 36 (WebKit::NavigationState::createPolicyClient): 37 New helper function for creating a new policy client. 38 39 (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction): 40 Call the navigation delegate method. 41 42 * UIProcess/WebPageProxy.cpp: 43 (WebKit::WebPageProxy::decidePolicyForNavigationAction): 44 Use std::move to hand off the listener to the client. 45 1 46 2014-01-30 Jeremy Jones <jeremyj@apple.com> 2 47 -
trunk/Source/WebKit2/UIProcess/API/APIPolicyClient.h
r162964 r163108 52 52 virtual ~PolicyClient() { } 53 53 54 virtual void decidePolicyForNavigationAction(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebKit::NavigationActionData&, WebKit::WebFrameProxy* originatingFrame, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, WebKit::WebFramePolicyListenerProxy*listener, API::Object* userData) { listener->use(); }54 virtual void decidePolicyForNavigationAction(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebKit::NavigationActionData&, WebKit::WebFrameProxy* originatingFrame, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, RefPtr<WebKit::WebFramePolicyListenerProxy> listener, API::Object* userData) { listener->use(); } 55 55 virtual void decidePolicyForNewWindowAction(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, WebCore::NavigationType, WebKit::WebEvent::Modifiers, WebKit::WebMouseEvent::Button, const WebCore::ResourceRequest&, const WTF::String& frameName, WebKit::WebFramePolicyListenerProxy* listener, API::Object* userData) { listener->use(); } 56 56 virtual void decidePolicyForResponse(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, WebKit::WebFramePolicyListenerProxy* listener, API::Object* userData) { listener->use(); } -
trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp
r163049 r163108 994 994 995 995 private: 996 virtual void decidePolicyForNavigationAction(WebPageProxy* page, WebFrameProxy* frame, const NavigationActionData& navigationActionData, WebFrameProxy* originatingFrame, const WebCore::ResourceRequest& originalResourceRequest, const WebCore::ResourceRequest& resourceRequest, WebFramePolicyListenerProxy*listener, API::Object* userData) override996 virtual void decidePolicyForNavigationAction(WebPageProxy* page, WebFrameProxy* frame, const NavigationActionData& navigationActionData, WebFrameProxy* originatingFrame, const WebCore::ResourceRequest& originalResourceRequest, const WebCore::ResourceRequest& resourceRequest, RefPtr<WebFramePolicyListenerProxy> listener, API::Object* userData) override 997 997 { 998 998 if (!m_client.decidePolicyForNavigationAction_deprecatedForUseWithV0 && !m_client.decidePolicyForNavigationAction_deprecatedForUseWithV1 && !m_client.decidePolicyForNavigationAction) { … … 1005 1005 1006 1006 if (m_client.decidePolicyForNavigationAction_deprecatedForUseWithV0) 1007 m_client.decidePolicyForNavigationAction_deprecatedForUseWithV0(toAPI(page), toAPI(frame), toAPI(navigationActionData.navigationType), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), toAPI(request.get()), toAPI(listener ), toAPI(userData), m_client.base.clientInfo);1007 m_client.decidePolicyForNavigationAction_deprecatedForUseWithV0(toAPI(page), toAPI(frame), toAPI(navigationActionData.navigationType), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), toAPI(request.get()), toAPI(listener.get()), toAPI(userData), m_client.base.clientInfo); 1008 1008 else if (m_client.decidePolicyForNavigationAction_deprecatedForUseWithV1) 1009 m_client.decidePolicyForNavigationAction_deprecatedForUseWithV1(toAPI(page), toAPI(frame), toAPI(navigationActionData.navigationType), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), toAPI(originatingFrame), toAPI(request.get()), toAPI(listener ), toAPI(userData), m_client.base.clientInfo);1009 m_client.decidePolicyForNavigationAction_deprecatedForUseWithV1(toAPI(page), toAPI(frame), toAPI(navigationActionData.navigationType), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), toAPI(originatingFrame), toAPI(request.get()), toAPI(listener.get()), toAPI(userData), m_client.base.clientInfo); 1010 1010 else 1011 m_client.decidePolicyForNavigationAction(toAPI(page), toAPI(frame), toAPI(navigationActionData.navigationType), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), toAPI(originatingFrame), toAPI(originalRequest.get()), toAPI(request.get()), toAPI(listener ), toAPI(userData), m_client.base.clientInfo);1011 m_client.decidePolicyForNavigationAction(toAPI(page), toAPI(frame), toAPI(navigationActionData.navigationType), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), toAPI(originatingFrame), toAPI(originalRequest.get()), toAPI(request.get()), toAPI(listener.get()), toAPI(userData), m_client.base.clientInfo); 1012 1012 } 1013 1013 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegate.h
r163098 r163108 29 29 #if WK_API_ENABLED 30 30 31 @class WKNavigationAction; 32 @class WKWebView; 33 34 typedef NS_ENUM(NSInteger, WKNavigationPolicyDecision) { 35 WKNavigationPolicyDecisionCancel, 36 WKNavigationPolicyDecisionAllow, 37 WKNavigationPolicyDecisionDownload 38 }; 39 31 40 @protocol WKNavigationDelegate <NSObject> 41 42 @optional 43 44 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationPolicyDecision))decisionHandler; 32 45 33 46 @end -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm
r163098 r163108 120 120 #endif 121 121 122 _page->setPolicyClient(_navigationState->createPolicyClient()); 123 122 124 return self; 123 125 } -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h
r163098 r163108 33 33 #import <wtf/HashMap.h> 34 34 #import <wtf/RetainPtr.h> 35 #import "APIPolicyClient.h" 35 36 #import "WeakObjCPtr.h" 36 37 … … 46 47 ~NavigationState(); 47 48 49 std::unique_ptr<API::PolicyClient> createPolicyClient(); 50 48 51 RetainPtr<id <WKNavigationDelegate> > navigationDelegate(); 49 52 void setNavigationDelegate(id <WKNavigationDelegate>); … … 52 55 53 56 private: 57 class PolicyClient : public API::PolicyClient { 58 public: 59 explicit PolicyClient(NavigationState&); 60 ~PolicyClient(); 61 62 private: 63 // API::PolicyClient 64 virtual void decidePolicyForNavigationAction(WebPageProxy*, WebFrameProxy*, const NavigationActionData&, WebFrameProxy* originatingFrame, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, RefPtr<WebFramePolicyListenerProxy>, API::Object* userData) override; 65 66 NavigationState& m_navigationState; 67 }; 68 69 struct { 70 bool webViewDecidePolicyForNavigationActionDecisionHandler : 1; 71 } m_navigationDelegateMethods; 72 73 WKWebView *m_webView; 74 WeakObjCPtr<id <WKNavigationDelegate> > m_navigationDelegate; 75 54 76 HashMap<uint64_t, RetainPtr<WKNavigation>> m_navigations; 55 56 WeakObjCPtr<id <WKNavigationDelegate> > m_delegate;57 77 }; 58 78 -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm
r163098 r163108 29 29 #if WK_API_ENABLED 30 30 31 #import "WKNavigationDelegate.h" 31 32 #import "WKNavigationInternal.h" 32 33 … … 34 35 35 36 NavigationState::NavigationState(WKWebView *webView) 37 : m_navigationDelegateMethods() 36 38 { 37 39 } … … 43 45 RetainPtr<id <WKNavigationDelegate> > NavigationState::navigationDelegate() 44 46 { 45 return m_ delegate.get();47 return m_navigationDelegate.get(); 46 48 } 47 49 48 50 void NavigationState::setNavigationDelegate(id <WKNavigationDelegate> delegate) 49 51 { 50 m_delegate = delegate; 52 m_navigationDelegate = delegate; 53 54 m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]; 51 55 } 52 56 … … 64 68 } 65 69 70 std::unique_ptr<API::PolicyClient> NavigationState::createPolicyClient() 71 { 72 return std::make_unique<PolicyClient>(*this); 73 } 74 75 NavigationState::PolicyClient::PolicyClient(NavigationState& navigationState) 76 : m_navigationState(navigationState) 77 { 78 } 79 80 NavigationState::PolicyClient::~PolicyClient() 81 { 82 } 83 84 void NavigationState::PolicyClient::decidePolicyForNavigationAction(WebPageProxy*, WebFrameProxy*, const NavigationActionData&, WebFrameProxy* originatingFrame, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, RefPtr<WebFramePolicyListenerProxy> listener, API::Object* userData) 85 { 86 if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler) { 87 // FIXME: <rdar://problem/15949822> Figure out what the "default delegate behavior" should be here. 88 listener->use(); 89 return; 90 } 91 92 auto navigationDelegate = m_navigationState.m_navigationDelegate.get(); 93 if (!navigationDelegate) 94 return; 95 96 // FIXME: Set up the navigation action object. 97 WKNavigationAction *navigationAction = nil; 98 99 [navigationDelegate.get() webView:m_navigationState.m_webView decidePolicyForNavigationAction:navigationAction decisionHandler:[listener](WKNavigationPolicyDecision policyDecision) { 100 switch (policyDecision) { 101 case WKNavigationPolicyDecisionAllow: 102 listener->use(); 103 break; 104 105 case WKNavigationPolicyDecisionCancel: 106 listener->ignore(); 107 break; 108 109 case WKNavigationPolicyDecisionDownload: 110 listener->download(); 111 break; 112 } 113 }]; 114 } 115 66 116 } // namespace WebKit 67 117 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r163093 r163108 2453 2453 m_syncNavigationActionPolicyActionIsValid = false; 2454 2454 2455 m_policyClient->decidePolicyForNavigationAction(this, frame, navigationActionData, originatingFrame, originalRequest, request, listener.get(), userData.get());2455 m_policyClient->decidePolicyForNavigationAction(this, frame, navigationActionData, originatingFrame, originalRequest, request, std::move(listener), userData.get()); 2456 2456 2457 2457 m_inDecidePolicyForNavigationAction = false;
Note: See TracChangeset
for help on using the changeset viewer.