Changeset 256867 in webkit


Ignore:
Timestamp:
Feb 18, 2020 3:48:18 PM (4 years ago)
Author:
achristensen@apple.com
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:]):

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r256864 r256867  
     12020-02-18  Alex Christensen  <achristensen@webkit.org>
     2
     3        Expand WKRemoteObjectCoder supported POD types to encode NSURLResponse types
     4        https://bugs.webkit.org/show_bug.cgi?id=207912
     5        <rdar://problem/59556922>
     6
     7        Reviewed by Brian Weinstein.
     8
     9        This expands on r158806.  There's no reason not to support all NSNumber types, so I did.
     10        Covered by API tests.
     11
     12        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
     13        (encodeInvocationArguments):
     14        (-[WKRemoteObjectEncoder encodeValueOfObjCType:at:]):
     15        (-[WKRemoteObjectDecoder decodeValueOfObjCType:at:]):
     16        (decodeInvocationArguments):
     17
    1182020-02-18  Daniel Bates  <dabates@apple.com>
    219
  • trunk/Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm

    r254087 r256867  
    141141        }
    142142
     143        // short
     144        case 's': {
     145            short value;
     146            [invocation getArgument:&value atIndex:i];
     147
     148            encodeToObjectStream(encoder, @(value));
     149            break;
     150        }
     151
     152        // unsigned short
     153        case 'S': {
     154            unsigned short value;
     155            [invocation getArgument:&value atIndex:i];
     156
     157            encodeToObjectStream(encoder, @(value));
     158            break;
     159        }
     160
    143161        // int
    144162        case 'i': {
     
    162180        case 'c': {
    163181            char value;
     182            [invocation getArgument:&value atIndex:i];
     183
     184            encodeToObjectStream(encoder, @(value));
     185            break;
     186        }
     187
     188        // unsigned char
     189        case 'C': {
     190            unsigned char value;
    164191            [invocation getArgument:&value atIndex:i];
    165192
     
    311338{
    312339    switch (*type) {
     340    // double
     341    case 'd':
     342        encodeToObjectStream(self, @(*static_cast<const double*>(address)));
     343        break;
     344
     345    // float
     346    case 'f':
     347        encodeToObjectStream(self, @(*static_cast<const float*>(address)));
     348        break;
     349
     350    // short
     351    case 's':
     352        encodeToObjectStream(self, @(*static_cast<const short*>(address)));
     353        break;
     354
     355    // unsigned short
     356    case 'S':
     357        encodeToObjectStream(self, @(*static_cast<const unsigned short*>(address)));
     358        break;
     359
    313360    // int
    314361    case 'i':
     
    316363        break;
    317364
     365    // unsigned
     366    case 'I':
     367        encodeToObjectStream(self, @(*static_cast<const unsigned*>(address)));
     368        break;
     369
     370    // char
     371    case 'c':
     372        encodeToObjectStream(self, @(*static_cast<const char*>(address)));
     373        break;
     374
     375    // unsigned char
     376    case 'C':
     377        encodeToObjectStream(self, @(*static_cast<const unsigned char*>(address)));
     378        break;
     379
     380    // bool
     381    case 'B':
     382        encodeToObjectStream(self, @(*static_cast<const bool*>(address)));
     383        break;
     384
     385    // long
     386    case 'l':
     387        encodeToObjectStream(self, @(*static_cast<const long*>(address)));
     388        break;
     389
     390    // unsigned long
     391    case 'L':
     392        encodeToObjectStream(self, @(*static_cast<const unsigned long*>(address)));
     393        break;
     394
     395    // long long
     396    case 'q':
     397        encodeToObjectStream(self, @(*static_cast<const long long*>(address)));
     398        break;
     399
     400    // unsigned long long
     401    case 'Q':
     402        encodeToObjectStream(self, @(*static_cast<const unsigned long long*>(address)));
     403        break;
     404
    318405    // Objective-C object.
    319406    case '@':
     
    425512{
    426513    switch (*type) {
     514    // double
     515    case 'd':
     516        *static_cast<double*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) doubleValue];
     517        break;
     518
     519    // float
     520    case 'f':
     521        *static_cast<float*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) floatValue];
     522        break;
     523
     524    // short
     525    case 's':
     526        *static_cast<short*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) shortValue];
     527        break;
     528
     529    // unsigned short
     530    case 'S':
     531        *static_cast<unsigned short*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) unsignedShortValue];
     532        break;
     533
    427534    // int
    428535    case 'i':
    429536        *static_cast<int*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) intValue];
     537        break;
     538
     539    // unsigned
     540    case 'I':
     541        *static_cast<unsigned*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) unsignedIntValue];
     542        break;
     543
     544    // char
     545    case 'c':
     546        *static_cast<char*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) charValue];
     547        break;
     548
     549    // unsigned char
     550    case 'C':
     551        *static_cast<unsigned char*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) unsignedCharValue];
     552        break;
     553
     554    // bool
     555    case 'B':
     556        *static_cast<bool*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) boolValue];
     557        break;
     558
     559    // long
     560    case 'l':
     561        *static_cast<long*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) longValue];
     562        break;
     563
     564    // unsigned long
     565    case 'L':
     566        *static_cast<unsigned long*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) unsignedLongValue];
     567        break;
     568
     569    // long long
     570    case 'q':
     571        *static_cast<long long*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) longLongValue];
     572        break;
     573
     574    // unsigned long long
     575    case 'Q':
     576        *static_cast<unsigned long long*>(data) = [decodeObjectFromObjectStream(self, { (__bridge CFTypeRef)[NSNumber class] }) unsignedLongLongValue];
    430577        break;
    431578
     
    520667        }
    521668
     669        // short
     670        case 's': {
     671            short value = [decodeObjectFromObjectStream(decoder, { (__bridge CFTypeRef)[NSNumber class] }) shortValue];
     672            [invocation setArgument:&value atIndex:i];
     673            break;
     674        }
     675
     676        // unsigned short
     677        case 'S': {
     678            unsigned short value = [decodeObjectFromObjectStream(decoder, { (__bridge CFTypeRef)[NSNumber class] }) unsignedShortValue];
     679            [invocation setArgument:&value atIndex:i];
     680            break;
     681        }
     682
    522683        // int
    523684        case 'i': {
     
    537698        case 'c': {
    538699            char value = [decodeObjectFromObjectStream(decoder, { (__bridge CFTypeRef)[NSNumber class] }) charValue];
     700            [invocation setArgument:&value atIndex:i];
     701            break;
     702        }
     703
     704        // unsigned char
     705        case 'C': {
     706            unsigned char value = [decodeObjectFromObjectStream(decoder, { (__bridge CFTypeRef)[NSNumber class] }) unsignedCharValue];
    539707            [invocation setArgument:&value atIndex:i];
    540708            break;
  • trunk/Tools/ChangeLog

    r256859 r256867  
     12020-02-18  Alex Christensen  <achristensen@webkit.org>
     2
     3        Expand WKRemoteObjectCoder supported POD types to encode NSURLResponse types
     4        https://bugs.webkit.org/show_bug.cgi?id=207912
     5        <rdar://problem/59556922>
     6
     7        Reviewed by Brian Weinstein.
     8
     9        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h:
     10        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:
     11        (TEST):
     12        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm:
     13        (-[RemoteObjectRegistryPlugIn sendRequest:response:challenge:error:completionHandler:]):
     14
    1152020-02-18  Wenson Hsieh  <wenson_hsieh@apple.com>
    216
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h

    r247288 r256867  
    5050- (void)takeLong:(long)value completionHandler:(void (^)(long value))completionHandler;
    5151- (void)doNotCallCompletionHandler:(void (^)())completionHandler;
     52- (void)sendRequest:(NSURLRequest *)request response:(NSURLResponse *)response challenge:(NSURLAuthenticationChallenge *)challenge error:(NSError *)error completionHandler:(void (^)(NSURLRequest *, NSURLResponse *, NSURLAuthenticationChallenge *, NSError *))completionHandler;
    5253
    5354@end
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm

    r247288 r256867  
    3737#import <wtf/RetainPtr.h>
    3838
    39 static bool isDone;
    40 
    4139TEST(WebKit, RemoteObjectRegistry)
    4240{
     41    __block bool isDone = false;
     42
    4343    @autoreleasepool {
    4444        NSString * const testPlugInClassName = @"RemoteObjectRegistryPlugIn";
     
    127127        class DoneWhenDestroyed : public RefCounted<DoneWhenDestroyed> {
    128128        public:
     129            DoneWhenDestroyed(bool& isDone)
     130                : isDone(isDone) { }
    129131            ~DoneWhenDestroyed() { isDone = true; }
     132        private:
     133            bool& isDone;
    130134        };
    131135
    132136        {
    133             RefPtr<DoneWhenDestroyed> doneWhenDestroyed = adoptRef(*new DoneWhenDestroyed);
     137            RefPtr<DoneWhenDestroyed> doneWhenDestroyed = adoptRef(*new DoneWhenDestroyed(isDone));
    134138            [object doNotCallCompletionHandler:[doneWhenDestroyed]() {
    135139            }];
     
    137141
    138142        TestWebKitAPI::Util::run(&isDone);
     143
     144        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://webkit.org/"]];
     145        NSHTTPURLResponse *response = [[[NSHTTPURLResponse alloc] initWithURL:[NSURL URLWithString:@"https://webkit.org/"] statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:@{ @"testFieldName" : @"testFieldValue" }] autorelease];
     146        NSError *error = [NSError errorWithDomain:@"testDomain" code:123 userInfo:@{@"a":@"b"}];
     147        NSURLProtectionSpace *protectionSpace = [[[NSURLProtectionSpace alloc] initWithHost:@"testHost" port:80 protocol:@"testProtocol" realm:@"testRealm" authenticationMethod:NSURLAuthenticationMethodHTTPDigest] autorelease];
     148        NSURLCredential *credential = [NSURLCredential credentialWithUser:@"testUser" password:@"testPassword" persistence:NSURLCredentialPersistenceForSession];
     149        id<NSURLAuthenticationChallengeSender> sender = nil;
     150        NSURLAuthenticationChallenge *challenge = [[[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:protectionSpace proposedCredential:credential previousFailureCount:42 failureResponse:response error:error sender:sender] autorelease];
     151        [object sendRequest:request response:response challenge:challenge error:error completionHandler:^(NSURLRequest *deserializedRequest, NSURLResponse *deserializedResponse, NSURLAuthenticationChallenge *deserializedChallenge, NSError *deserializedError) {
     152            EXPECT_WK_STREQ(deserializedRequest.URL.absoluteString, "https://webkit.org/");
     153            EXPECT_WK_STREQ([(NSHTTPURLResponse *)deserializedResponse allHeaderFields][@"testFieldName"], "testFieldValue");
     154            EXPECT_WK_STREQ(deserializedChallenge.protectionSpace.realm, "testRealm");
     155            EXPECT_WK_STREQ(deserializedError.domain, "testDomain");
     156            isDone = true;
     157        }];
     158        TestWebKitAPI::Util::run(&isDone);
    139159    }
    140160}
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm

    r247288 r256867  
    109109}
    110110
     111- (void)sendRequest:(NSURLRequest *)request response:(NSURLResponse *)response challenge:(NSURLAuthenticationChallenge *)challenge error:(NSError *)error completionHandler:(void (^)(NSURLRequest *, NSURLResponse *, NSURLAuthenticationChallenge *, NSError *))completionHandler
     112{
     113    completionHandler(request, response, challenge, error);
     114}
     115
    111116@end
Note: See TracChangeset for help on using the changeset viewer.