Changeset 215910 in webkit


Ignore:
Timestamp:
Apr 27, 2017 5:54:38 PM (7 years ago)
Author:
Wenson Hsieh
Message:

WKUIDelegatePrivate needs a hook to vend data used to initialize item providers for data interaction
https://bugs.webkit.org/show_bug.cgi?id=171386
<rdar://problem/31557237>

Reviewed by Beth Dakin.

Source/WebCore:

Teach WebItemProviderPasteboard to remember what WebItemProviderRegistrationInfoList it was initialized with
when beginning a drag. This information is cleared out the next time the list of item providers is set to
something different, which happens when the data interaction session concludes.

  • platform/ios/WebItemProviderPasteboard.h:
  • platform/ios/WebItemProviderPasteboard.mm:

(-[WebItemProviderPasteboard init]):
(-[WebItemProviderPasteboard setItemProviders:]):
(-[WebItemProviderPasteboard setItemsUsingRegistrationInfoLists:]):
(-[WebItemProviderPasteboard registrationInfoAtIndex:]):
(-[WebItemProviderPasteboard itemProviderAtIndex:]):

Source/WebKit2:

Add a new WKUIDelegate hook, _webView:adjustedDataInteractionItemProvidersForItemProvider:representingObjects:additionalData:.

  • UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
Location:
trunk/Source
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r215907 r215910  
     12017-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        WKUIDelegatePrivate needs a hook to vend data used to initialize item providers for data interaction
     4        https://bugs.webkit.org/show_bug.cgi?id=171386
     5        <rdar://problem/31557237>
     6
     7        Reviewed by Beth Dakin.
     8
     9        Teach WebItemProviderPasteboard to remember what WebItemProviderRegistrationInfoList it was initialized with
     10        when beginning a drag. This information is cleared out the next time the list of item providers is set to
     11        something different, which happens when the data interaction session concludes.
     12
     13        * platform/ios/WebItemProviderPasteboard.h:
     14        * platform/ios/WebItemProviderPasteboard.mm:
     15        (-[WebItemProviderPasteboard init]):
     16        (-[WebItemProviderPasteboard setItemProviders:]):
     17        (-[WebItemProviderPasteboard setItemsUsingRegistrationInfoLists:]):
     18        (-[WebItemProviderPasteboard registrationInfoAtIndex:]):
     19        (-[WebItemProviderPasteboard itemProviderAtIndex:]):
     20
    1212017-04-27  Brady Eidson  <beidson@apple.com>
    222
  • trunk/Source/WebCore/platform/ios/WebItemProviderPasteboard.h

    r215835 r215910  
    7070+ (instancetype)sharedInstance;
    7171
    72 - (UIItemProvider *)itemProviderAtIndex:(NSInteger)index;
     72// Registration info lists are only available upon starting data interaction.
     73- (WebItemProviderRegistrationInfoList *)registrationInfoAtIndex:(NSUInteger)index;
     74- (UIItemProvider *)itemProviderAtIndex:(NSUInteger)index;
    7375
    7476@property (copy, nonatomic, nullable) NSArray<UIItemProvider *> *itemProviders;
  • trunk/Source/WebCore/platform/ios/WebItemProviderPasteboard.mm

    r215840 r215910  
    179179
    180180@implementation WebItemProviderPasteboard {
     181    // FIXME: These ivars should be refactored to be Vector<RetainPtr<Type>> instead of generic NSArrays.
    181182    RetainPtr<NSArray> _itemProviders;
    182183    RetainPtr<NSArray> _cachedTypeIdentifiers;
    183184    RetainPtr<NSArray> _typeToFileURLMaps;
    184185    RetainPtr<NSArray> _preferredTypeIdentifiers;
     186    RetainPtr<NSArray> _registrationInfoLists;
    185187}
    186188
     
    203205        _typeToFileURLMaps = adoptNS([[NSArray alloc] init]);
    204206        _preferredTypeIdentifiers = nil;
     207        _registrationInfoLists = nil;
    205208    }
    206209    return self;
     
    255258    _changeCount++;
    256259    _cachedTypeIdentifiers = nil;
     260    _registrationInfoLists = nil;
    257261
    258262    NSMutableArray *typeToFileURLMaps = [NSMutableArray arrayWithCapacity:itemProviders.count];
     
    294298
    295299    self.itemProviders = providers;
     300    _registrationInfoLists = itemLists;
    296301}
    297302
     
    490495}
    491496
    492 - (UIItemProvider *)itemProviderAtIndex:(NSInteger)index
    493 {
    494     return 0 <= index && index < (NSInteger)[_itemProviders count] ? [_itemProviders objectAtIndex:index] : nil;
     497- (WebItemProviderRegistrationInfoList *)registrationInfoAtIndex:(NSUInteger)index
     498{
     499    return index < [_registrationInfoLists count] ? [_registrationInfoLists objectAtIndex:index] : nil;
     500}
     501
     502- (UIItemProvider *)itemProviderAtIndex:(NSUInteger)index
     503{
     504    return index < [_itemProviders count] ? [_itemProviders objectAtIndex:index] : nil;
    495505}
    496506
  • trunk/Source/WebKit2/ChangeLog

    r215907 r215910  
     12017-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        WKUIDelegatePrivate needs a hook to vend data used to initialize item providers for data interaction
     4        https://bugs.webkit.org/show_bug.cgi?id=171386
     5        <rdar://problem/31557237>
     6
     7        Reviewed by Beth Dakin.
     8
     9        Add a new WKUIDelegate hook, _webView:adjustedDataInteractionItemProvidersForItemProvider:representingObjects:additionalData:.
     10
     11        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
     12
    1132017-04-27  Brady Eidson  <beidson@apple.com>
    214
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegatePrivate.h

    r215786 r215910  
    9595- (UIViewController *)_webView:(WKWebView *)webView previewViewControllerForImage:(UIImage *)image alternateURL:(NSURL *)url defaultActions:(NSArray<_WKElementAction *> *)actions elementInfo:(_WKActivatedElementInfo *)elementInfo WK_API_AVAILABLE(ios(WK_IOS_TBA));
    9696- (NSArray *)_webView:(WKWebView *)webView adjustedDataInteractionItemProviders:(NSArray *)originalItemProviders WK_API_AVAILABLE(ios(WK_IOS_TBA));
     97- (NSArray *)_webView:(WKWebView *)webView adjustedDataInteractionItemProvidersForItemProvider:(id)itemProvider representingObjects:(NSArray *)representingObjects additionalData:(NSDictionary *)additionalData WK_API_AVAILABLE(ios(WK_IOS_TBA));
    9798- (BOOL)_webView:(WKWebView *)webView performDataInteractionOperationWithItemProviders:(NSArray *)itemProviders WK_API_AVAILABLE(ios(WK_IOS_TBA));
    9899- (void)_webView:(WKWebView *)webView dataInteraction:(id)interaction sessionWillBegin:(id)session WK_API_AVAILABLE(ios(WK_IOS_TBA));
Note: See TracChangeset for help on using the changeset viewer.