Changeset 234052 in webkit
- Timestamp:
- Jul 20, 2018 10:33:28 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r234038 r234052 1 2018-07-20 Brady Eidson <beidson@apple.com> 2 3 Add WKNavigation/WKNavigationAction related SPI. 4 https://bugs.webkit.org/show_bug.cgi?id=187826 5 6 Reviewed by Chris Dumez. 7 8 * UIProcess/API/APINavigationAction.h: 9 10 * UIProcess/API/C/mac/WKPagePrivateMac.h: 11 * UIProcess/API/C/mac/WKPagePrivateMac.mm: 12 (WKPageLoadURLRequestReturningNavigation): 13 14 * UIProcess/API/Cocoa/WKNavigationAction.mm: 15 (-[WKNavigationAction _mainFrameNavigation]): 16 * UIProcess/API/Cocoa/WKNavigationActionPrivate.h: 17 18 * UIProcess/API/glib/WebKitUIClient.cpp: 19 20 * UIProcess/WebPageProxy.cpp: 21 (WebKit::WebPageProxy::decidePolicyForNavigationAction): 22 (WebKit::WebPageProxy::decidePolicyForNewWindowAction): 23 1 24 2018-07-20 Philippe Normand <pnormand@igalia.com> 2 25 -
trunk/Source/WebKit/UIProcess/API/APINavigationAction.h
r224677 r234052 27 27 28 28 #include "APIFrameInfo.h" 29 #include "APINavigation.h" 29 30 #include "APIObject.h" 30 31 #include "APIUserInitiatedAction.h" … … 37 38 class NavigationAction final : public ObjectImpl<Object::Type::NavigationAction> { 38 39 public: 39 static Ref<NavigationAction> create(WebKit::NavigationActionData&& navigationActionData, API::FrameInfo* sourceFrame, API::FrameInfo* targetFrame, std::optional<WTF::String> targetFrameName, WebCore::ResourceRequest&& request, const WebCore::URL& originalURL, bool shouldOpenAppLinks, RefPtr<UserInitiatedAction>&& userInitiatedAction)40 template<typename... Args> static Ref<NavigationAction> create(Args&&... args) 40 41 { 41 return adoptRef(*new NavigationAction( WTFMove(navigationActionData), sourceFrame, targetFrame, targetFrameName, WTFMove(request), originalURL, shouldOpenAppLinks, WTFMove(userInitiatedAction)));42 return adoptRef(*new NavigationAction(std::forward<Args>(args)...)); 42 43 } 43 44 … … 63 64 UserInitiatedAction* userInitiatedAction() const { return m_userInitiatedAction.get(); } 64 65 66 Navigation* mainFrameNavigation() const { return m_mainFrameNavigation.get(); } 67 65 68 private: 66 NavigationAction(WebKit::NavigationActionData&& navigationActionData, API::FrameInfo* sourceFrame, API::FrameInfo* targetFrame, std::optional<WTF::String> targetFrameName, WebCore::ResourceRequest&& request, const WebCore::URL& originalURL, bool shouldOpenAppLinks, RefPtr<UserInitiatedAction>&& userInitiatedAction)69 NavigationAction(WebKit::NavigationActionData&& navigationActionData, API::FrameInfo* sourceFrame, API::FrameInfo* targetFrame, std::optional<WTF::String> targetFrameName, WebCore::ResourceRequest&& request, const WebCore::URL& originalURL, bool shouldOpenAppLinks, RefPtr<UserInitiatedAction>&& userInitiatedAction, API::Navigation* mainFrameNavigation) 67 70 : m_sourceFrame(sourceFrame) 68 71 , m_targetFrame(targetFrame) … … 73 76 , m_userInitiatedAction(WTFMove(userInitiatedAction)) 74 77 , m_navigationActionData(WTFMove(navigationActionData)) 78 , m_mainFrameNavigation(mainFrameNavigation) 79 { 80 } 81 82 NavigationAction(WebKit::NavigationActionData&& navigationActionData, API::FrameInfo* sourceFrame, API::FrameInfo* targetFrame, std::optional<WTF::String> targetFrameName, WebCore::ResourceRequest&& request, const WebCore::URL& originalURL, bool shouldOpenAppLinks, RefPtr<UserInitiatedAction>&& userInitiatedAction) 83 : NavigationAction(WTFMove(navigationActionData), sourceFrame, targetFrame, targetFrameName, WTFMove(request), originalURL, shouldOpenAppLinks, WTFMove(userInitiatedAction), nullptr) 75 84 { 76 85 } … … 88 97 89 98 WebKit::NavigationActionData m_navigationActionData; 99 RefPtr<Navigation> m_mainFrameNavigation; 90 100 }; 91 101 -
trunk/Source/WebKit/UIProcess/API/C/mac/WKPagePrivateMac.h
r213112 r234052 60 60 WK_EXPORT id <_WKFullscreenDelegate> WKPageGetFullscreenDelegate(WKPageRef page); 61 61 62 #if !TARGET_OS_IPHONE && (defined(__clang__) && defined(__APPLE__) && !defined(__i386__)) 63 @class WKNavigation; 64 WK_EXPORT WKNavigation *WKPageLoadURLRequestReturningNavigation(WKPageRef page, WKURLRequestRef request); 62 65 #endif 66 67 #endif // __OBJC__ 63 68 64 69 WK_EXPORT bool WKPageIsURLKnownHSTSHost(WKPageRef page, WKURLRef url); -
trunk/Source/WebKit/UIProcess/API/C/mac/WKPagePrivateMac.mm
r224558 r234052 31 31 #import "WKAPICast.h" 32 32 #import "WKNSURLExtras.h" 33 #import "WKNavigationInternal.h" 33 34 #import "WKViewInternal.h" 34 35 #import "WebPageGroup.h" … … 139 140 } 140 141 142 #if !TARGET_OS_IPHONE && (defined(__clang__) && defined(__APPLE__) && !defined(__i386__)) 143 WKNavigation *WKPageLoadURLRequestReturningNavigation(WKPageRef pageRef, WKURLRequestRef urlRequestRef) 144 { 145 auto resourceRequest = toImpl(urlRequestRef)->resourceRequest(); 146 auto navigation = toImpl(pageRef)->loadRequest(WTFMove(resourceRequest)); 147 148 if (!navigation) 149 return nil; 150 151 return [API::wrapper(*navigation.leakRef()) autorelease]; 152 } 153 #endif 154 141 155 #if PLATFORM(MAC) 142 156 bool WKPageIsPlayingVideoInEnhancedFullscreen(WKPageRef pageRef) -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationAction.mm
r233668 r234052 31 31 #import "NavigationActionData.h" 32 32 #import "WKFrameInfoInternal.h" 33 #import "WKNavigationInternal.h" 33 34 #import "_WKUserInitiatedActionInternal.h" 34 35 #import <WebCore/FloatPoint.h> … … 237 238 } 238 239 240 - (WKNavigation *)_mainFrameNavigation 241 { 242 if (auto* navigation = _navigationAction->mainFrameNavigation()) 243 return wrapper(*navigation); 244 245 return nil; 246 } 247 239 248 @end 240 249 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationActionPrivate.h
r221930 r234052 28 28 #if WK_API_ENABLED 29 29 30 @class WKNavigation; 30 31 @class _WKUserInitiatedAction; 31 32 … … 56 57 57 58 @property (nonatomic, readonly) BOOL _isRedirect WK_API_AVAILABLE(macosx(10.13), ios(11.0)); 59 @property (nonatomic, readonly) WKNavigation *_mainFrameNavigation WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 58 60 59 61 @end -
trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp
r227670 r234052 51 51 { 52 52 auto userInitiatedActivity = page.process().userInitiatedActivity(navigationActionData.userGestureTokenIdentifier); 53 WebKitNavigationAction navigationAction(API::NavigationAction::create(WTFMove(navigationActionData), frameInfo.ptr(), nullptr, std::nullopt, WTFMove(resourceRequest), { }, false, WTFMove(userInitiatedActivity)));53 WebKitNavigationAction navigationAction(API::NavigationAction::create(WTFMove(navigationActionData), frameInfo.ptr(), nullptr, std::nullopt, WTFMove(resourceRequest), WebCore::URL { }, false, WTFMove(userInitiatedActivity))); 54 54 completionHandler(webkitWebViewCreateNewPage(m_webView, windowFeatures, &navigationAction)); 55 55 } -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r233986 r234052 4023 4023 4024 4024 auto listener = makeRef(frame->setUpPolicyListenerProxy(listenerID, PolicyListenerType::NavigationAction)); 4025 4026 API::Navigation* mainFrameNavigation = frame->isMainFrame() ? navigation.get() : nullptr; 4025 4027 listener->setNavigation(navigation.releaseNonNull()); 4026 4028 … … 4048 4050 bool shouldOpenAppLinks = !m_shouldSuppressAppLinksInNextNavigationPolicyDecision && destinationFrameInfo->isMainFrame() && !hostsAreEqual(URL(ParsedURLString, m_mainFrame->url()), request.url()) && navigationActionData.navigationType != WebCore::NavigationType::BackForward; 4049 4051 4050 auto navigationAction = API::NavigationAction::create(WTFMove(navigationActionData), sourceFrameInfo.get(), destinationFrameInfo.ptr(), std::nullopt, WTFMove(request), originalRequest.url(), shouldOpenAppLinks, WTFMove(userInitiatedActivity) );4052 auto navigationAction = API::NavigationAction::create(WTFMove(navigationActionData), sourceFrameInfo.get(), destinationFrameInfo.ptr(), std::nullopt, WTFMove(request), originalRequest.url(), shouldOpenAppLinks, WTFMove(userInitiatedActivity), mainFrameNavigation); 4051 4053 4052 4054 m_navigationClient->decidePolicyForNavigationAction(*this, WTFMove(navigationAction), WTFMove(listener), m_process->transformHandlesToObjects(userData.object()).get()); … … 4086 4088 auto userInitiatedActivity = m_process->userInitiatedActivity(navigationActionData.userGestureTokenIdentifier); 4087 4089 bool shouldOpenAppLinks = !hostsAreEqual(URL(ParsedURLString, m_mainFrame->url()), request.url()); 4088 auto navigationAction = API::NavigationAction::create(WTFMove(navigationActionData), sourceFrameInfo.get(), nullptr, frameName, WTFMove(request), { }, shouldOpenAppLinks, WTFMove(userInitiatedActivity));4090 auto navigationAction = API::NavigationAction::create(WTFMove(navigationActionData), sourceFrameInfo.get(), nullptr, frameName, WTFMove(request), URL { }, shouldOpenAppLinks, WTFMove(userInitiatedActivity)); 4089 4091 4090 4092 m_navigationClient->decidePolicyForNavigationAction(*this, navigationAction.get(), WTFMove(listener), m_process->transformHandlesToObjects(userData.object()).get()); -
trunk/Tools/ChangeLog
r234040 r234052 1 2018-07-20 Brady Eidson <beidson@apple.com> 2 3 Add WKNavigation/WKNavigationAction related SPI. 4 https://bugs.webkit.org/show_bug.cgi?id=187826 5 6 Reviewed by Chris Dumez. 7 8 * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm: 9 (-[NavigationActionHasNavigationDelegate webView:didFinishNavigation:]): 10 (-[NavigationActionHasNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]): 11 (TEST): 12 1 13 2018-07-20 Commit Queue <commit-queue@webkit.org> 2 14 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm
r226610 r234052 27 27 28 28 #import <WebKit/WKBackForwardListPrivate.h> 29 #import <WebKit/WKNavigationActionPrivate.h> 29 30 #import <WebKit/WKNavigationDelegatePrivate.h> 30 31 #import <WebKit/WKNavigationPrivate.h> … … 216 217 217 218 ASSERT_TRUE([delegate decidedPolicyForBackForwardNavigation]); 219 } 220 221 @interface NavigationActionHasNavigationDelegate : NSObject <WKNavigationDelegate> { 222 @public 223 WKNavigation *navigation; 224 } 225 @end 226 227 @implementation NavigationActionHasNavigationDelegate 228 229 - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation 230 { 231 isDone = true; 232 } 233 234 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler 235 { 236 EXPECT_TRUE(!!navigationAction._mainFrameNavigation); 237 EXPECT_EQ(navigationAction._mainFrameNavigation, navigation); 238 decisionHandler(WKNavigationActionPolicyAllow); 239 } 240 241 @end 242 243 TEST(WKNavigation, NavigationActionHasNavigation) 244 { 245 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]); 246 247 RetainPtr<NavigationActionHasNavigationDelegate> delegate = adoptNS([[NavigationActionHasNavigationDelegate alloc] init]); 248 [webView setNavigationDelegate:delegate.get()]; 249 250 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"data:text/html,1"]]; 251 252 isDone = false; 253 delegate->navigation = [webView loadRequest:request]; 254 TestWebKitAPI::Util::run(&isDone); 218 255 } 219 256
Note: See TracChangeset
for help on using the changeset viewer.