Changeset 239339 in webkit
- Timestamp:
- Dec 18, 2018 10:26:33 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r239333 r239339 1 2018-12-18 Alex Christensen <achristensen@webkit.org> 2 3 WKWebView has old URL while displaying SafeBrowsing interstitial, for link-click navigations 4 https://bugs.webkit.org/show_bug.cgi?id=192675 5 6 Reviewed by Geoffrey Garen. 7 8 When a safe browsing warning is being shown, WKWebView.URL should be the unsafe website, not the safe website before it. 9 10 * UIProcess/API/Cocoa/WKWebView.mm: 11 (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]): 12 (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:details:completionHandler:]): 13 * UIProcess/API/Cocoa/WKWebViewPrivate.h: 14 * UIProcess/Cocoa/SafeBrowsingWarningCocoa.mm: 15 (WebKit::SafeBrowsingWarning::SafeBrowsingWarning): 16 * UIProcess/SafeBrowsingWarning.h: 17 (WebKit::SafeBrowsingWarning::create): 18 (WebKit::SafeBrowsingWarning::url const): 19 * UIProcess/WebPageProxy.cpp: 20 (WebKit::WebPageProxy::decidePolicyForNavigationAction): 21 1 22 2018-12-18 Chris Dumez <cdumez@apple.com> 2 23 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
r239314 r239339 4801 4801 - (void)_showSafeBrowsingWarningWithTitle:(NSString *)title warning:(NSString *)warning details:(NSAttributedString *)details completionHandler:(void(^)(BOOL))completionHandler 4802 4802 { 4803 auto safeBrowsingWarning = WebKit::SafeBrowsingWarning::create(title, warning, details); 4803 // FIXME: Adopt _showSafeBrowsingWarningWithURL and remove this function. 4804 [self _showSafeBrowsingWarningWithURL:nil title:title warning:warning details:details completionHandler:completionHandler]; 4805 } 4806 4807 - (void)_showSafeBrowsingWarningWithURL:(NSURL *)url title:(NSString *)title warning:(NSString *)warning details:(NSAttributedString *)details completionHandler:(void(^)(BOOL))completionHandler 4808 { 4809 auto safeBrowsingWarning = WebKit::SafeBrowsingWarning::create(url, title, warning, details); 4804 4810 auto wrapper = [completionHandler = makeBlockPtr(completionHandler)] (Variant<WebKit::ContinueUnsafeLoad, URL>&& variant) { 4805 4811 switchOn(variant, [&] (WebKit::ContinueUnsafeLoad continueUnsafeLoad) { -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h
r238623 r239339 195 195 + (NSURL *)_visitUnsafeWebsiteSentinel WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 196 196 - (void)_showSafeBrowsingWarningWithTitle:(NSString *)title warning:(NSString *)warning details:(NSAttributedString *)details completionHandler:(void(^)(BOOL))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 197 - (void)_showSafeBrowsingWarningWithURL:(NSURL *)url title:(NSString *)title warning:(NSString *)warning details:(NSAttributedString *)details completionHandler:(void(^)(BOOL))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 197 198 198 199 - (void)_isJITEnabled:(void(^)(BOOL))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); -
trunk/Source/WebKit/UIProcess/Cocoa/SafeBrowsingWarningCocoa.mm
r238771 r239339 151 151 152 152 SafeBrowsingWarning::SafeBrowsingWarning(const URL& url, SSBServiceLookupResult *result) 153 : m_title(safeBrowsingTitleText(result)) 153 : m_url(url) 154 , m_title(safeBrowsingTitleText(result)) 154 155 , m_warning(safeBrowsingWarningText(result)) 155 156 , m_details(safeBrowsingDetailsText(url, result)) … … 158 159 #endif 159 160 160 SafeBrowsingWarning::SafeBrowsingWarning(String&& title, String&& warning, RetainPtr<NSAttributedString>&& details) 161 : m_title(WTFMove(title)) 161 SafeBrowsingWarning::SafeBrowsingWarning(URL&& url, String&& title, String&& warning, RetainPtr<NSAttributedString>&& details) 162 : m_url(WTFMove(url)) 163 , m_title(WTFMove(title)) 162 164 , m_warning(WTFMove(warning)) 163 165 , m_details(WTFMove(details)) -
trunk/Source/WebKit/UIProcess/SafeBrowsingWarning.h
r238771 r239339 46 46 #endif 47 47 #if PLATFORM(COCOA) 48 static Ref<SafeBrowsingWarning> create( String&& title, String&& warning, RetainPtr<NSAttributedString>&& details)48 static Ref<SafeBrowsingWarning> create(URL&& url, String&& title, String&& warning, RetainPtr<NSAttributedString>&& details) 49 49 { 50 return adoptRef(*new SafeBrowsingWarning(WTFMove( title), WTFMove(warning), WTFMove(details)));50 return adoptRef(*new SafeBrowsingWarning(WTFMove(url), WTFMove(title), WTFMove(warning), WTFMove(details))); 51 51 } 52 52 #endif 53 53 54 const URL& url() const { return m_url; } 54 55 const String& title() const { return m_title; } 55 56 const String& warning() const { return m_warning; } … … 66 67 #endif 67 68 #if PLATFORM(COCOA) 68 SafeBrowsingWarning( String&&, String&&, RetainPtr<NSAttributedString>&&);69 SafeBrowsingWarning(URL&&, String&&, String&&, RetainPtr<NSAttributedString>&&); 69 70 #endif 70 71 72 URL m_url; 71 73 String m_title; 72 74 String m_warning; -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r239333 r239339 4340 4340 4341 4341 if (safeBrowsingWarning) { 4342 if (frame->isMainFrame() && safeBrowsingWarning->url().isValid()) { 4343 auto transaction = m_pageLoadState.transaction(); 4344 m_pageLoadState.setPendingAPIRequestURL(transaction, safeBrowsingWarning->url()); 4345 m_pageLoadState.commitChanges(); 4346 } 4347 4342 4348 m_pageClient->showSafeBrowsingWarning(*safeBrowsingWarning, [protectedThis = WTFMove(protectedThis), completionHandler = WTFMove(completionHandler), policyAction] (auto&& result) mutable { 4343 4349 switchOn(result, [&] (const URL& url) { -
trunk/Tools/ChangeLog
r239333 r239339 1 2018-12-18 Alex Christensen <achristensen@webkit.org> 2 3 WKWebView has old URL while displaying SafeBrowsing interstitial, for link-click navigations 4 https://bugs.webkit.org/show_bug.cgi?id=192675 5 6 Reviewed by Geoffrey Garen. 7 8 * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm: 9 (goBack): 10 (TEST): 11 (visitUnsafeSite): 12 (-[SafeBrowsingHelper observeValueForKeyPath:ofObject:change:context:]): 13 (-[SafeBrowsingHelper webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]): 14 1 15 2018-12-18 Chris Dumez <cdumez@apple.com> 2 16 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm
r239134 r239339 36 36 #import <WebKit/WKWebViewPrivate.h> 37 37 #import <wtf/RetainPtr.h> 38 #import <wtf/URL.h> 39 #import <wtf/Vector.h> 38 40 39 41 static bool committedNavigation; … … 209 211 #endif 210 212 211 TEST(SafeBrowsing, GoBack) 212 { 213 auto webView = safeBrowsingView(); 214 auto warning = [webView _safeBrowsingWarning]; 215 auto box = warning.subviews.firstObject; 213 template<typename ViewType> void goBack(ViewType *view) 214 { 215 WKWebView *webView = (WKWebView *)view.superview; 216 auto box = view.subviews.firstObject; 216 217 checkTitleAndClick(box.subviews[3], "Go Back"); 217 218 EXPECT_EQ([webView _safeBrowsingWarning], nil); 219 } 220 221 TEST(SafeBrowsing, GoBack) 222 { 223 auto webView = safeBrowsingView(); 224 goBack([webView _safeBrowsingWarning]); 225 } 226 227 template<typename ViewType> void visitUnsafeSite(ViewType *view) 228 { 229 [view performSelector:NSSelectorFromString(@"clickedOnLink:") withObject:[NSURL URLWithString:@"WKVisitUnsafeWebsiteSentinel"]]; 218 230 } 219 231 … … 229 241 EXPECT_EQ(warning.subviews.count, 2ull); 230 242 EXPECT_FALSE(committedNavigation); 231 [warning performSelector:NSSelectorFromString(@"clickedOnLink:") withObject:[NSURL URLWithString:@"WKVisitUnsafeWebsiteSentinel"]];243 visitUnsafeSite(warning); 232 244 TestWebKitAPI::Util::run(&committedNavigation); 233 245 } … … 249 261 auto showWarning = ^{ 250 262 completionHandlerCalled = false; 251 [webView _showSafeBrowsingWarningWith Title:@"test title" warning:@"test warning" details:[[[NSAttributedString alloc] initWithString:@"test details"] autorelease] completionHandler:^(BOOL shouldContinue) {263 [webView _showSafeBrowsingWarningWithURL:nil title:@"test title" warning:@"test warning" details:[[[NSAttributedString alloc] initWithString:@"test details"] autorelease] completionHandler:^(BOOL shouldContinue) { 252 264 shouldContinueValue = shouldContinue; 253 265 completionHandlerCalled = true; … … 269 281 } 270 282 283 static Vector<URL> urls; 284 static bool done; 285 286 @interface SafeBrowsingHelper : NSObject<WKNavigationDelegate, WKUIDelegate> 287 @end 288 289 @implementation SafeBrowsingHelper 290 291 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *, id> *)change context:(void *)context 292 { 293 urls.append((NSURL *)[change objectForKey:NSKeyValueChangeNewKey]); 294 } 295 296 - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler 297 { 298 done = true; 299 completionHandler(); 300 } 301 302 @end 303 304 TEST(SafeBrowsing, URLObservation) 305 { 306 ClassMethodSwizzler swizzler(objc_getClass("SSBLookupContext"), @selector(sharedLookupContext), [TestLookupContext methodForSelector:@selector(sharedLookupContext)]); 307 308 RetainPtr<NSURL> simpleURL = [[NSBundle mainBundle] URLForResource:@"simple" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]; 309 RetainPtr<NSURL> simple2URL = [[NSBundle mainBundle] URLForResource:@"simple2" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]; 310 auto helper = adoptNS([SafeBrowsingHelper new]); 311 312 auto webViewWithWarning = [&] () -> RetainPtr<WKWebView> { 313 auto webView = adoptNS([WKWebView new]); 314 [webView setUIDelegate:helper.get()]; 315 [webView setNavigationDelegate:helper.get()]; 316 [webView addObserver:helper.get() forKeyPath:@"URL" options:NSKeyValueObservingOptionNew context:nil]; 317 318 [webView loadHTMLString:@"<script>alert('loaded')</script>" baseURL:simpleURL.get()]; 319 while (![webView _safeBrowsingWarning]) 320 TestWebKitAPI::Util::spinRunLoop(); 321 visitUnsafeSite([webView _safeBrowsingWarning]); 322 TestWebKitAPI::Util::run(&done); 323 EXPECT_FALSE(!![webView _safeBrowsingWarning]); 324 325 done = false; 326 [webView evaluateJavaScript:[NSString stringWithFormat:@"window.location='%@'", simple2URL.get()] completionHandler:nil]; 327 while (![webView _safeBrowsingWarning]) 328 TestWebKitAPI::Util::spinRunLoop(); 329 return webView; 330 }; 331 332 auto checkURLs = [&] (Vector<RetainPtr<NSURL>>&& expected) { 333 EXPECT_EQ(urls.size(), expected.size()); 334 if (urls.size() != expected.size()) 335 return; 336 for (size_t i = 0; i < expected.size(); ++i) 337 EXPECT_STREQ(urls[i].string().utf8().data(), [expected[i] absoluteString].UTF8String); 338 }; 339 340 { 341 auto webView = webViewWithWarning(); 342 checkURLs({ simpleURL, simple2URL }); 343 goBack([webView _safeBrowsingWarning]); 344 checkURLs({ simpleURL, simple2URL, simpleURL }); 345 [webView removeObserver:helper.get() forKeyPath:@"URL"]; 346 } 347 348 urls.clear(); 349 350 { 351 auto webView = webViewWithWarning(); 352 checkURLs({ simpleURL, simple2URL }); 353 visitUnsafeSite([webView _safeBrowsingWarning]); 354 TestWebKitAPI::Util::spinRunLoop(5); 355 checkURLs({ simpleURL, simple2URL }); 356 [webView removeObserver:helper.get() forKeyPath:@"URL"]; 357 } 358 } 359 271 360 @interface NullLookupContext : NSObject 272 361 @end
Note: See TracChangeset
for help on using the changeset viewer.