Title: [239480] trunk/Tools
Revision
239480
Author
[email protected]
Date
2018-12-20 17:25:17 -0800 (Thu, 20 Dec 2018)

Log Message

Add API test coverage for customUserAgent client setting and service workers
https://bugs.webkit.org/show_bug.cgi?id=192952

Reviewed by Alex Christensen.

* TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
(-[SWMessageHandler userContentController:didReceiveScriptMessage:]):
(-[SWSchemes webView:startURLSchemeTask:]):
(-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
(-[SWUserAgentMessageHandler userContentController:didReceiveScriptMessage:]):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (239479 => 239480)


--- trunk/Tools/ChangeLog	2018-12-21 01:15:46 UTC (rev 239479)
+++ trunk/Tools/ChangeLog	2018-12-21 01:25:17 UTC (rev 239480)
@@ -1,5 +1,18 @@
 2018-12-20  Chris Dumez  <[email protected]>
 
+        Add API test coverage for customUserAgent client setting and service workers
+        https://bugs.webkit.org/show_bug.cgi?id=192952
+
+        Reviewed by Alex Christensen.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
+        (-[SWMessageHandler userContentController:didReceiveScriptMessage:]):
+        (-[SWSchemes webView:startURLSchemeTask:]):
+        (-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
+        (-[SWUserAgentMessageHandler userContentController:didReceiveScriptMessage:]):
+
+2018-12-20  Chris Dumez  <[email protected]>
+
         Use Optional::hasValue() instead of Optional::has_value()
         https://bugs.webkit.org/show_bug.cgi?id=192948
 

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm (239479 => 239480)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm	2018-12-21 01:15:46 UTC (rev 239479)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm	2018-12-21 01:25:17 UTC (rev 239480)
@@ -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 @@
 @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 @@
 @interface SWSchemes : NSObject <WKURLSchemeHandler> {
 @public
     HashMap<String, ResourceInfo> resources;
+    NSString *expectedUserAgent;
 }
 
 -(size_t)handledRequests;
@@ -133,6 +135,9 @@
 
 - (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 @@
     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);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to