Title: [256867] trunk
Revision
256867
Author
achristen...@apple.com
Date
2020-02-18 15:48:18 -0800 (Tue, 18 Feb 2020)

Log Message

Expand WKRemoteObjectCoder supported POD types to encode NSURLResponse types
https://bugs.webkit.org/show_bug.cgi?id=207912
<rdar://problem/59556922>

Reviewed by Brian Weinstein.

Source/WebKit:

This expands on r158806.  There's no reason not to support all NSNumber types, so I did.
Covered by API tests.

* Shared/API/Cocoa/WKRemoteObjectCoder.mm:
(encodeInvocationArguments):
(-[WKRemoteObjectEncoder encodeValueOfObjCType:at:]):
(-[WKRemoteObjectDecoder decodeValueOfObjCType:at:]):
(decodeInvocationArguments):

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h:
* TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:
(TEST):
* TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm:
(-[RemoteObjectRegistryPlugIn sendRequest:response:challenge:error:completionHandler:]):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (256866 => 256867)


--- trunk/Source/WebKit/ChangeLog	2020-02-18 23:31:25 UTC (rev 256866)
+++ trunk/Source/WebKit/ChangeLog	2020-02-18 23:48:18 UTC (rev 256867)
@@ -1,3 +1,20 @@
+2020-02-18  Alex Christensen  <achristen...@webkit.org>
+
+        Expand WKRemoteObjectCoder supported POD types to encode NSURLResponse types
+        https://bugs.webkit.org/show_bug.cgi?id=207912
+        <rdar://problem/59556922>
+
+        Reviewed by Brian Weinstein.
+
+        This expands on r158806.  There's no reason not to support all NSNumber types, so I did.
+        Covered by API tests.
+
+        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
+        (encodeInvocationArguments):
+        (-[WKRemoteObjectEncoder encodeValueOfObjCType:at:]):
+        (-[WKRemoteObjectDecoder decodeValueOfObjCType:at:]):
+        (decodeInvocationArguments):
+
 2020-02-18  Daniel Bates  <daba...@apple.com>
 
         Ask the EditorClient whether to reveal the current selection after insertion

Modified: trunk/Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm (256866 => 256867)


--- trunk/Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm	2020-02-18 23:31:25 UTC (rev 256866)
+++ trunk/Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm	2020-02-18 23:48:18 UTC (rev 256867)
@@ -140,6 +140,24 @@
             break;
         }
 
+        // short
+        case 's': {
+            short value;
+            [invocation getArgument:&value atIndex:i];
+
+            encodeToObjectStream(encoder, @(value));
+            break;
+        }
+
+        // unsigned short
+        case 'S': {
+            unsigned short value;
+            [invocation getArgument:&value atIndex:i];
+
+            encodeToObjectStream(encoder, @(value));
+            break;
+        }
+
         // int
         case 'i': {
             int value;
@@ -167,6 +185,15 @@
             break;
         }
 
+        // unsigned char
+        case 'C': {
+            unsigned char value;
+            [invocation getArgument:&value atIndex:i];
+
+            encodeToObjectStream(encoder, @(value));
+            break;
+        }
+
         // bool
         case 'B': {
             BOOL value;
@@ -310,11 +337,71 @@
 - (void)encodeValueOfObjCType:(const char *)type at:(const void *)address
 {
     switch (*type) {
+    // double
+    case 'd':
+        encodeToObjectStream(self, @(*static_cast<const double*>(address)));
+        break;
+
+    // float
+    case 'f':
+        encodeToObjectStream(self, @(*static_cast<const float*>(address)));
+        break;
+
+    // short
+    case 's':
+        encodeToObjectStream(self, @(*static_cast<const short*>(address)));
+        break;
+
+    // unsigned short
+    case 'S':
+        encodeToObjectStream(self, @(*static_cast<const unsigned short*>(address)));
+        break;
+
     // int
     case 'i':
         encodeToObjectStream(self, @(*static_cast<const int*>(address)));
         break;
 
+    // unsigned
+    case 'I':
+        encodeToObjectStream(self, @(*static_cast<const unsigned*>(address)));
+        break;
+
+    // char
+    case 'c':
+        encodeToObjectStream(self, @(*static_cast<const char*>(address)));
+        break;
+
+    // unsigned char
+    case 'C':
+        encodeToObjectStream(self, @(*static_cast<const unsigned char*>(address)));
+        break;
+
+    // bool
+    case 'B':
+        encodeToObjectStream(self, @(*static_cast<const bool*>(address)));
+        break;
+
+    // long
+    case 'l':
+        encodeToObjectStream(self, @(*static_cast<const long*>(address)));
+        break;
+
+    // unsigned long
+    case 'L':
+        encodeToObjectStream(self, @(*static_cast<const unsigned long*>(address)));
+        break;
+
+    // long long
+    case 'q':
+        encodeToObjectStream(self, @(*static_cast<const long long*>(address)));
+        break;
+
+    // unsigned long long
+    case 'Q':
+        encodeToObjectStream(self, @(*static_cast<const unsigned long long*>(address)));
+        break;
+
     // Objective-C object.
     case '@':
         encodeToObjectStream(self, *static_cast<const id*>(address));
@@ -424,11 +511,71 @@
 - (void)decodeValueOfObjCType:(const char *)type at:(void *)data
 {
     switch (*type) {
+    // double
+    case 'd':
+        *static_cast<double*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) doubleValue];
+        break;
+
+    // float
+    case 'f':
+        *static_cast<float*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) floatValue];
+        break;
+
+    // short
+    case 's':
+        *static_cast<short*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) shortValue];
+        break;
+
+    // unsigned short
+    case 'S':
+        *static_cast<unsigned short*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) unsignedShortValue];
+        break;
+
     // int
     case 'i':
         *static_cast<int*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) intValue];
         break;
 
+    // unsigned
+    case 'I':
+        *static_cast<unsigned*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) unsignedIntValue];
+        break;
+
+    // char
+    case 'c':
+        *static_cast<char*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) charValue];
+        break;
+
+    // unsigned char
+    case 'C':
+        *static_cast<unsigned char*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) unsignedCharValue];
+        break;
+
+    // bool
+    case 'B':
+        *static_cast<bool*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) boolValue];
+        break;
+
+    // long
+    case 'l':
+        *static_cast<long*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) longValue];
+        break;
+
+    // unsigned long
+    case 'L':
+        *static_cast<unsigned long*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) unsignedLongValue];
+        break;
+
+    // long long
+    case 'q':
+        *static_cast<long long*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) longLongValue];
+        break;
+
+    // unsigned long long
+    case 'Q':
+        *static_cast<unsigned long long*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) unsignedLongLongValue];
+        break;
+
     default:
         [NSException raise:NSInvalidUnarchiveOperationException format:@"Unsupported type '%s'", type];
     }
@@ -519,6 +666,20 @@
             break;
         }
 
+        // short
+        case 's': {
+            short value = [decodeObjectFromObjectStream(decoder, { (__bridge CFTypeRef)[NSNumber class] }) shortValue];
+            [invocation setArgument:&value atIndex:i];
+            break;
+        }
+
+        // unsigned short
+        case 'S': {
+            unsigned short value = [decodeObjectFromObjectStream(decoder, { (__bridge CFTypeRef)[NSNumber class] }) unsignedShortValue];
+            [invocation setArgument:&value atIndex:i];
+            break;
+        }
+
         // int
         case 'i': {
             int value = [decodeObjectFromObjectStream(decoder, { (__bridge CFTypeRef)[NSNumber class] }) intValue];
@@ -540,6 +701,13 @@
             break;
         }
 
+        // unsigned char
+        case 'C': {
+            unsigned char value = [decodeObjectFromObjectStream(decoder, { (__bridge CFTypeRef)[NSNumber class] }) unsignedCharValue];
+            [invocation setArgument:&value atIndex:i];
+            break;
+        }
+
         // bool
         case 'B': {
             bool value = [decodeObjectFromObjectStream(decoder, { (__bridge CFTypeRef)[NSNumber class] }) boolValue];

Modified: trunk/Tools/ChangeLog (256866 => 256867)


--- trunk/Tools/ChangeLog	2020-02-18 23:31:25 UTC (rev 256866)
+++ trunk/Tools/ChangeLog	2020-02-18 23:48:18 UTC (rev 256867)
@@ -1,3 +1,17 @@
+2020-02-18  Alex Christensen  <achristen...@webkit.org>
+
+        Expand WKRemoteObjectCoder supported POD types to encode NSURLResponse types
+        https://bugs.webkit.org/show_bug.cgi?id=207912
+        <rdar://problem/59556922>
+
+        Reviewed by Brian Weinstein.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h:
+        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:
+        (TEST):
+        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm:
+        (-[RemoteObjectRegistryPlugIn sendRequest:response:challenge:error:completionHandler:]):
+
 2020-02-18  Wenson Hsieh  <wenson_hs...@apple.com>
 
         [macOS] Web process may crash under ServicesOverlayController::buildPotentialHighlightsIfNeeded

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h (256866 => 256867)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h	2020-02-18 23:31:25 UTC (rev 256866)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h	2020-02-18 23:48:18 UTC (rev 256867)
@@ -49,6 +49,7 @@
 - (void)takeUnsignedLong:(unsigned long)value completionHandler:(void (^)(unsigned long value))completionHandler;
 - (void)takeLong:(long)value completionHandler:(void (^)(long value))completionHandler;
 - (void)doNotCallCompletionHandler:(void (^)())completionHandler;
+- (void)sendRequest:(NSURLRequest *)request response:(NSURLResponse *)response challenge:(NSURLAuthenticationChallenge *)challenge error:(NSError *)error completionHandler:(void (^)(NSURLRequest *, NSURLResponse *, NSURLAuthenticationChallenge *, NSError *))completionHandler;
 
 @end
 

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm (256866 => 256867)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm	2020-02-18 23:31:25 UTC (rev 256866)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm	2020-02-18 23:48:18 UTC (rev 256867)
@@ -36,10 +36,10 @@
 #import <wtf/RefCounted.h>
 #import <wtf/RetainPtr.h>
 
-static bool isDone;
-
 TEST(WebKit, RemoteObjectRegistry)
 {
+    __block bool isDone = false;
+
     @autoreleasepool {
         NSString * const testPlugInClassName = @"RemoteObjectRegistryPlugIn";
         auto configuration = retainPtr([WKWebViewConfiguration _test_configurationWithTestPlugInClassName:testPlugInClassName]);
@@ -126,15 +126,35 @@
 
         class DoneWhenDestroyed : public RefCounted<DoneWhenDestroyed> {
         public:
+            DoneWhenDestroyed(bool& isDone)
+                : isDone(isDone) { }
             ~DoneWhenDestroyed() { isDone = true; }
+        private:
+            bool& isDone;
         };
 
         {
-            RefPtr<DoneWhenDestroyed> doneWhenDestroyed = adoptRef(*new DoneWhenDestroyed);
+            RefPtr<DoneWhenDestroyed> doneWhenDestroyed = adoptRef(*new DoneWhenDestroyed(isDone));
             [object doNotCallCompletionHandler:[doneWhenDestroyed]() {
             }];
         }
 
         TestWebKitAPI::Util::run(&isDone);
+
+        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://webkit.org/"]];
+        NSHTTPURLResponse *response = [[[NSHTTPURLResponse alloc] initWithURL:[NSURL URLWithString:@"https://webkit.org/"] statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:@{ @"testFieldName" : @"testFieldValue" }] autorelease];
+        NSError *error = [NSError errorWithDomain:@"testDomain" code:123 userInfo:@{@"a":@"b"}];
+        NSURLProtectionSpace *protectionSpace = [[[NSURLProtectionSpace alloc] initWithHost:@"testHost" port:80 protocol:@"testProtocol" realm:@"testRealm" authenticationMethod:NSURLAuthenticationMethodHTTPDigest] autorelease];
+        NSURLCredential *credential = [NSURLCredential credentialWithUser:@"testUser" password:@"testPassword" persistence:NSURLCredentialPersistenceForSession];
+        id<NSURLAuthenticationChallengeSender> sender = nil;
+        NSURLAuthenticationChallenge *challenge = [[[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:protectionSpace proposedCredential:credential previousFailureCount:42 failureResponse:response error:error sender:sender] autorelease];
+        [object sendRequest:request response:response challenge:challenge error:error completionHandler:^(NSURLRequest *deserializedRequest, NSURLResponse *deserializedResponse, NSURLAuthenticationChallenge *deserializedChallenge, NSError *deserializedError) {
+            EXPECT_WK_STREQ(deserializedRequest.URL.absoluteString, "https://webkit.org/");
+            EXPECT_WK_STREQ([(NSHTTPURLResponse *)deserializedResponse allHeaderFields][@"testFieldName"], "testFieldValue");
+            EXPECT_WK_STREQ(deserializedChallenge.protectionSpace.realm, "testRealm");
+            EXPECT_WK_STREQ(deserializedError.domain, "testDomain");
+            isDone = true;
+        }];
+        TestWebKitAPI::Util::run(&isDone);
     }
 }

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm (256866 => 256867)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm	2020-02-18 23:31:25 UTC (rev 256866)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm	2020-02-18 23:48:18 UTC (rev 256867)
@@ -108,4 +108,9 @@
 {
 }
 
+- (void)sendRequest:(NSURLRequest *)request response:(NSURLResponse *)response challenge:(NSURLAuthenticationChallenge *)challenge error:(NSError *)error completionHandler:(void (^)(NSURLRequest *, NSURLResponse *, NSURLAuthenticationChallenge *, NSError *))completionHandler
+{
+    completionHandler(request, response, challenge, error);
+}
+
 @end
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to