[iOS] Remove all usages of UIItemProvider, UIItemProviderReading, and related classes
[WebKit-https.git] / Source / WebCore / platform / ios / WebItemProviderPasteboard.h
1 /*
2  * Copyright (C) 2017 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import <WebCore/AbstractPasteboard.h>
27
28 #if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000
29
30 struct CGSize;
31
32 typedef NS_ENUM(NSInteger, WebPreferredPresentationStyle) {
33     WebPreferredPresentationStyleUnspecified,
34     WebPreferredPresentationStyleInline,
35     WebPreferredPresentationStyleAttachment
36 };
37
38 NS_ASSUME_NONNULL_BEGIN
39
40 /*! A WebItemProviderRegistrar encapsulates a single call to register something to an item provider.
41  @discussion Classes that implement this protocol each represent a different way of writing data to
42  an item provider. Some examples include setting a chunk of data corresponding to a type identifier,
43  or registering a NSItemProviderWriting-conformant object, or registering a type to a promised file
44  where the data has been written.
45  */
46 @protocol WebItemProviderRegistrar <NSObject>
47 - (void)registerItemProvider:(NSItemProvider *)itemProvider;
48
49 @optional
50 @property (nonatomic, readonly) id <NSItemProviderWriting> representingObjectForClient;
51 @property (nonatomic, readonly) NSString *typeIdentifierForClient;
52 @property (nonatomic, readonly) NSData *dataForClient;
53 @end
54
55 typedef void(^WebItemProviderFileCallback)(NSURL * _Nullable, NSError * _Nullable);
56
57 /*! A WebItemProviderRegistrationInfoList represents a series of registration calls used to set up a
58  single item provider.
59  @discussion The order of items specified in the list (lowest indices first) is the order in which
60  objects or data are registered to the item provider, and therefore indicates the relative fidelity
61  of each item. Private UTI types, such as those vended through the injected editing bundle SPI, are
62  considered to be higher fidelity than the other default types.
63  */
64 WEBCORE_EXPORT @interface WebItemProviderRegistrationInfoList : NSObject
65
66 - (void)addRepresentingObject:(id <NSItemProviderWriting>)object;
67 - (void)addData:(NSData *)data forType:(NSString *)typeIdentifier;
68 - (void)addPromisedType:(NSString *)typeIdentifier fileCallback:(void(^)(WebItemProviderFileCallback))callback;
69
70 @property (nonatomic) CGSize preferredPresentationSize;
71 @property (nonatomic, copy) NSString *suggestedName;
72 @property (nonatomic, readonly, nullable) __kindof NSItemProvider *itemProvider;
73
74 @property (nonatomic) WebPreferredPresentationStyle preferredPresentationStyle;
75 @property (nonatomic, copy) NSData *teamData;
76
77 - (NSUInteger)numberOfItems;
78 - (nullable id <WebItemProviderRegistrar>)itemAtIndex:(NSUInteger)index;
79 - (void)enumerateItems:(void(^)(id <WebItemProviderRegistrar> item, NSUInteger index))block;
80
81 @end
82
83 typedef void (^WebItemProviderFileLoadBlock)(NSArray<NSURL *> *);
84
85 WEBCORE_EXPORT @interface WebItemProviderPasteboard : NSObject<AbstractPasteboard>
86
87 + (instancetype)sharedInstance;
88
89 @property (copy, nonatomic, nullable) NSArray<__kindof NSItemProvider *> *itemProviders;
90 @property (readonly, nonatomic) NSInteger numberOfItems;
91 @property (readonly, nonatomic) NSInteger changeCount;
92
93 // This will only be non-empty when an operation is being performed.
94 @property (readonly, nonatomic) NSArray<NSURL *> *allDroppedFileURLs;
95
96 // The preferred file URL corresponds to the highest fidelity non-private UTI that was loaded.
97 - (nullable NSURL *)preferredFileUploadURLAtIndex:(NSUInteger)index fileType:(NSString *_Nullable *_Nullable)outFileType;
98
99 @property (readonly, nonatomic) BOOL hasPendingOperation;
100 - (void)incrementPendingOperationCount;
101 - (void)decrementPendingOperationCount;
102
103 - (void)enumerateItemProvidersWithBlock:(void (^)(__kindof NSItemProvider *itemProvider, NSUInteger index, BOOL *stop))block;
104
105 // The given completion block is always dispatched on the main thread.
106 - (void)doAfterLoadingProvidedContentIntoFileURLs:(WebItemProviderFileLoadBlock)action;
107 - (void)doAfterLoadingProvidedContentIntoFileURLs:(WebItemProviderFileLoadBlock)action synchronousTimeout:(NSTimeInterval)synchronousTimeout;
108
109 @end
110
111 NS_ASSUME_NONNULL_END
112
113 #endif // TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000