Title: [211918] branches/safari-604.1.5-branch/Source/WebCore
Revision
211918
Author
matthew_han...@apple.com
Date
2017-02-08 18:05:42 -0800 (Wed, 08 Feb 2017)

Log Message

Merge r211453. rdar://problem/30294240

Modified Paths

Diff

Modified: branches/safari-604.1.5-branch/Source/WebCore/ChangeLog (211917 => 211918)


--- branches/safari-604.1.5-branch/Source/WebCore/ChangeLog	2017-02-09 02:05:40 UTC (rev 211917)
+++ branches/safari-604.1.5-branch/Source/WebCore/ChangeLog	2017-02-09 02:05:42 UTC (rev 211918)
@@ -1,5 +1,23 @@
 2017-02-08  Matthew Hanson  <matt_han...@apple.com>
 
+        Merge r211453. rdar://problem/30294240
+
+    2017-01-31  Wenson Hsieh  <wenson_hs...@apple.com>
+
+            WebItemProviderPasteboard should be robust when UIItemProvider fails to initialize an object
+            https://bugs.webkit.org/show_bug.cgi?id=167663
+            <rdar://problem/30294240>
+
+            Reviewed by Tim Horton.
+
+            Adds a nil check for the result of -createObjectOfClass:error:.
+
+            * platform/ios/WebItemProviderPasteboard.mm:
+            (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):
+            (-[WebItemProviderPasteboard _tryToCreateAndAppendObjectOfClass:toArray:usingProvider:]):
+
+2017-02-08  Matthew Hanson  <matt_han...@apple.com>
+
         Merge r211377. rdar://problem/30267849
 
     2017-01-30  Wenson Hsieh  <wenson_hs...@apple.com>

Modified: branches/safari-604.1.5-branch/Source/WebCore/platform/ios/WebItemProviderPasteboard.mm (211917 => 211918)


--- branches/safari-604.1.5-branch/Source/WebCore/platform/ios/WebItemProviderPasteboard.mm	2017-02-09 02:05:40 UTC (rev 211917)
+++ branches/safari-604.1.5-branch/Source/WebCore/platform/ios/WebItemProviderPasteboard.mm	2017-02-09 02:05:42 UTC (rev 211918)
@@ -169,30 +169,20 @@
             return;
 
         // FIXME: These should be refactored to use asynchronous calls.
-        if (isColorType(pasteboardType) && [provider canCreateObjectOfClass:[getUIColorClass() class]]) {
-            [values addObject:[provider createObjectOfClass:[getUIColorClass() class] error:nil]];
+        if (isColorType(pasteboardType) && [self _tryToCreateAndAppendObjectOfClass:[getUIColorClass() class] toArray:values usingProvider:provider])
             return;
-        }
 
-        if (isImageType(pasteboardType) && [provider canCreateObjectOfClass:[getUIImageClass() class]]) {
-            [values addObject:[provider createObjectOfClass:[getUIImageClass() class] error:nil]];
+        if (isImageType(pasteboardType) && [self _tryToCreateAndAppendObjectOfClass:[NSString class] toArray:values usingProvider:provider])
             return;
-        }
 
-        if (isURLType(pasteboardType) && [provider canCreateObjectOfClass:[NSURL class]]) {
-            [values addObject:[provider createObjectOfClass:[NSURL class] error:nil]];
+        if (isURLType(pasteboardType) && [self _tryToCreateAndAppendObjectOfClass:[NSURL class] toArray:values usingProvider:provider])
             return;
-        }
 
-        if (isRichTextType(pasteboardType) && [provider canCreateObjectOfClass:[NSAttributedString class]]) {
-            [values addObject:[provider createObjectOfClass:[NSAttributedString class] error:nil]];
+        if (isRichTextType(pasteboardType) && [self _tryToCreateAndAppendObjectOfClass:[NSAttributedString class] toArray:values usingProvider:provider])
             return;
-        }
 
-        if (isStringType(pasteboardType) && [provider canCreateObjectOfClass:[NSString class]]) {
-            [values addObject:[provider createObjectOfClass:[NSString class] error:nil]];
+        if (isStringType(pasteboardType) && [self _tryToCreateAndAppendObjectOfClass:[NSString class] toArray:values usingProvider:provider])
             return;
-        }
 
         WTFLogAlways("Failed to instantiate object for type: '%s' at index: %tu", pasteboardType.UTF8String, index);
     }];
@@ -199,6 +189,18 @@
     return values;
 }
 
+- (BOOL)_tryToCreateAndAppendObjectOfClass:(Class)objectClass toArray:(NSMutableArray *)array usingProvider:(UIItemProvider *)provider
+{
+    if (![provider canCreateObjectOfClass:objectClass])
+        return NO;
+
+    id object = [provider createObjectOfClass:objectClass error:nil];
+    if (object)
+        [array addObject:object];
+
+    return !!object;
+}
+
 - (NSInteger)changeCount
 {
     return _changeCount;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to