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