WebKit Bugzilla
Attachment 357892 Details for
Bug 192952
: Add API test coverage for customUserAgent client setting and service workers
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-192952-20181220161007.patch (text/plain), 5.73 KB, created by
Chris Dumez
on 2018-12-20 16:10:07 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Chris Dumez
Created:
2018-12-20 16:10:07 PST
Size:
5.73 KB
patch
obsolete
>Subversion Revision: 239472 >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index ea1ab3918ef4c7da740a34b124c7daf40614ef35..72f62b2b05fb344a2c34f61c61b7db99f3975119 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,16 @@ >+2018-12-20 Chris Dumez <cdumez@apple.com> >+ >+ Add API test coverage for customUserAgent client setting and service workers >+ https://bugs.webkit.org/show_bug.cgi?id=192952 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm: >+ (-[SWMessageHandler userContentController:didReceiveScriptMessage:]): >+ (-[SWSchemes webView:startURLSchemeTask:]): >+ (-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]): >+ (-[SWUserAgentMessageHandler userContentController:didReceiveScriptMessage:]): >+ > 2018-12-20 Jiewen Tan <jiewen_tan@apple.com> > > [WebAuthN] Add a runtime flag for local authenticator >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm >index 61ddbc3d63a9ea87c26eca0d1bfd667765730916..0ade2f8ae66eae6e3626839f9b2913c460b79a69 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm >@@ -37,6 +37,7 @@ > #import <WebKit/WebKit.h> > #import <WebKit/_WKExperimentalFeature.h> > #import <WebKit/_WKWebsiteDataStoreConfiguration.h> >+#import <WebKit/_WKWebsitePolicies.h> > #import <wtf/Deque.h> > #import <wtf/HashMap.h> > #import <wtf/RetainPtr.h> >@@ -62,7 +63,7 @@ @end > @implementation SWMessageHandler > - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message > { >- EXPECT_TRUE([[message body] isEqualToString:@"Message from worker: ServiceWorker received: Hello from the web page"]); >+ EXPECT_WK_STREQ(@"Message from worker: ServiceWorker received: Hello from the web page", [message body]); > done = true; > } > @end >@@ -117,6 +118,7 @@ @end > @interface SWSchemes : NSObject <WKURLSchemeHandler> { > @public > HashMap<String, ResourceInfo> resources; >+ NSString *expectedUserAgent; > } > > -(size_t)handledRequests; >@@ -133,6 +135,9 @@ -(size_t)handledRequests > > - (void)webView:(WKWebView *)webView startURLSchemeTask:(id <WKURLSchemeTask>)task > { >+ if (expectedUserAgent) >+ EXPECT_WK_STREQ(expectedUserAgent, [[task.request valueForHTTPHeaderField:@"User-Agent"] UTF8String]); >+ > auto entry = resources.find([task.request.URL absoluteString]); > if (entry == resources.end()) { > NSLog(@"Did not find resource entry for URL %@", task.request.URL); >@@ -508,6 +513,78 @@ TEST(ServiceWorkers, Basic) > done = false; > } > >+@interface SWCustomUserAgentDelegate : NSObject <WKNavigationDelegate> { >+} >+@end >+ >+@implementation SWCustomUserAgentDelegate >+ >+- (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction userInfo:(id <NSSecureCoding>)userInfo decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler >+{ >+ _WKWebsitePolicies *websitePolicies = [[[_WKWebsitePolicies alloc] init] autorelease]; >+ if (navigationAction.targetFrame.mainFrame) >+ [websitePolicies setCustomUserAgent:@"Foo Custom UserAgent"]; >+ >+ decisionHandler(WKNavigationActionPolicyAllow, websitePolicies); >+} >+ >+@end >+ >+@interface SWUserAgentMessageHandler : NSObject <WKScriptMessageHandler> >+@end >+ >+@implementation SWUserAgentMessageHandler >+- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message >+{ >+ // FIXME: navigator.userAgent currently does not reflect the custom user agent set by the client (https://bugs.webkit.org/show_bug.cgi?id=192951). >+ // EXPECT_WK_STREQ(@"Message from worker: Foo Custom UserAgent", [message body]); >+ done = true; >+} >+@end >+ >+static const char* userAgentSWBytes = R"SWRESOURCE( >+ >+self.addEventListener("message", (event) => { >+ event.source.postMessage(navigator.userAgent); >+}); >+ >+)SWRESOURCE"; >+ >+TEST(ServiceWorkers, UserAgentOverride) >+{ >+ [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; >+ >+ // Start with a clean slate data store >+ [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { >+ done = true; >+ }]; >+ TestWebKitAPI::Util::run(&done); >+ done = false; >+ >+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); >+ >+ auto messageHandler = adoptNS([[SWUserAgentMessageHandler alloc] init]); >+ [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"]; >+ >+ auto handler = adoptNS([[SWSchemes alloc] init]); >+ handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes }); >+ handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", userAgentSWBytes }); >+ handler->expectedUserAgent = @"Foo Custom UserAgent"; >+ [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"]; >+ >+ RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); >+ [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"]; >+ >+ auto delegate = adoptNS([[SWCustomUserAgentDelegate alloc] init]); >+ [webView setNavigationDelegate:delegate.get()]; >+ >+ NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]; >+ [webView loadRequest:request]; >+ >+ TestWebKitAPI::Util::run(&done); >+ done = false; >+} >+ > TEST(ServiceWorkers, RestoreFromDisk) > { > ASSERT(mainRegisteringWorkerBytes);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192952
:
357861
| 357892