From 25df5694ce1b952c6249849e6458ed632996a12c Mon Sep 17 00:00:00 2001 From: Wenson Hsieh Date: Mon, 22 May 2023 13:14:43 -0700 Subject: [PATCH] Lookalike character sanitization should only apply to main resource URLs https://bugs.webkit.org/show_bug.cgi?id=257134 Reviewed by Aditya Keerthi. Make a slight adjustment to lookalike character sanitization, so that it only applies when loading main resources. * Source/WebCore/loader/FrameLoader.cpp: (WebCore::FrameLoader::updateRequestAndAddExtraFields): * Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h: * Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm: (-[TestNavigationDelegate _webView:didChangeLookalikeCharactersFromURL:toURL:]): Also, add a new callback on `TestNavigationDelegate`, which we'll adopt in a new API test. Canonical link: https://commits.webkit.org/264357@main --- Source/WebCore/loader/FrameLoader.cpp | 2 +- Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h | 1 + Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm | 6 ++++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Source/WebCore/loader/FrameLoader.cpp b/Source/WebCore/loader/FrameLoader.cpp index 24732cce5f41..dabfc8188950 100644 --- a/Source/WebCore/loader/FrameLoader.cpp +++ b/Source/WebCore/loader/FrameLoader.cpp @@ -3140,7 +3140,7 @@ void FrameLoader::updateRequestAndAddExtraFields(ResourceRequest& request, IsMai if (shouldUpdate == ShouldUpdateAppInitiatedValue::Yes && localFrame->loader().documentLoader()) request.setIsAppInitiated(localFrame->loader().documentLoader()->lastNavigationWasAppInitiated()); - if (page) + if (page && isMainResource) request.setURL(page->chrome().client().sanitizeLookalikeCharacters(request.url(), LookalikeCharacterSanitizationTrigger::Navigation)); } diff --git a/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h b/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h index 7ce91663115a..d3643063ad40 100644 --- a/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h +++ b/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h @@ -42,6 +42,7 @@ @property (nonatomic, copy) void (^webContentProcessDidTerminate)(WKWebView *); @property (nonatomic, copy) void (^didReceiveAuthenticationChallenge)(WKWebView *, NSURLAuthenticationChallenge *, void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *)); @property (nonatomic, copy) void (^contentRuleListPerformedAction)(WKWebView *, NSString *, _WKContentRuleListAction *, NSURL *); +@property (nonatomic, copy) void (^didChangeLookalikeCharactersFromURL)(WKWebView *, NSURL *, NSURL *); - (void)allowAnyTLSCertificate; - (void)waitForDidStartProvisionalNavigation; diff --git a/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm b/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm index 410c5cb209ae..b67be08a0d4a 100644 --- a/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm +++ b/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm @@ -191,6 +191,12 @@ - (void)_webView:(WKWebView *)webView contentRuleListWithIdentifier:(NSString *) _contentRuleListPerformedAction(webView, identifier, action, url); } +- (void)_webView:(WKWebView *)webView didChangeLookalikeCharactersFromURL:(NSURL *)originalURL toURL:(NSURL *)adjustedURL +{ + if (_didChangeLookalikeCharactersFromURL) + _didChangeLookalikeCharactersFromURL(webView, originalURL, adjustedURL); +} + @end @implementation WKWebView (TestWebKitAPIExtras)