Changeset 168145 in webkit
- Timestamp:
- May 1, 2014 8:31:43 PM (10 years ago)
- Location:
- trunk/Source/WebKit/mac
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/mac/ChangeLog
r168138 r168145 1 2014-05-01 Brady Eidson <beidson@apple.com> 2 3 Update service picker API usage. 4 <rdar://problem/16772674> and https://bugs.webkit.org/show_bug.cgi?id=132452 5 6 Reviewed by Tim Horton. 7 8 * Misc/WebSharingServicePickerController.h: 9 * Misc/WebSharingServicePickerController.mm: 10 (-[WebSharingServicePickerController didShareImageData:confirmDataIsValidTIFFData:]): 11 Factor out a common "didShare" handler that optionally validates whether the data represents an image. 12 (-[WebSharingServicePickerController sharingService:didShareItems:]): Update API usage, including marshalling 13 on off-main thread call back to the main thread. 14 15 * WebCoreSupport/WebContextMenuClient.mm: 16 (WebContextMenuClient::contextMenuForEvent): Update API usage. 17 1 18 2014-05-01 Anders Carlsson <andersca@apple.com> 2 19 -
trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.h
r167786 r168145 40 40 } 41 41 42 - (instancetype)initWith Image:(NSImage *)imageincludeEditorServices:(BOOL)includeEditorServices menuClient:(WebContextMenuClient*)menuClient;42 - (instancetype)initWithData:(NSData *)data includeEditorServices:(BOOL)includeEditorServices menuClient:(WebContextMenuClient*)menuClient; 43 43 - (NSMenu *)menu; 44 - (void)didShareImageData:(NSData *)data confirmDataIsValidTIFFData:(BOOL)confirmData; 44 45 45 46 @end -
trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.mm
r167956 r168145 50 50 - (NSMenu *)menu; 51 51 @end 52 53 52 #endif 54 53 54 #if __has_include(<AppKit/NSItemProvider.h>) 55 #import <AppKit/NSItemProvider.h> 56 #else 57 @interface NSItemProvider : NSObject 58 @property (copy, readonly) NSArray *registeredTypeIdentifiers; 59 - (instancetype)initWithItem:(id <NSSecureCoding>)item typeIdentifier:(NSString *)typeIdentifier; 60 - (void)loadItemForTypeIdentifier:(NSString *)typeIdentifier options:(NSDictionary *)options completionHandler:(void (^)(id <NSSecureCoding> item, NSError *error))completionHandler; 61 @end 62 #endif 63 55 64 static NSString *serviceControlsPasteboardName = @"WebKitServiceControlsPasteboard"; 56 65 … … 59 68 @implementation WebSharingServicePickerController 60 69 61 - (instancetype)initWith Image:(NSImage *)imageincludeEditorServices:(BOOL)includeEditorServices menuClient:(WebContextMenuClient*)menuClient70 - (instancetype)initWithData:(NSData *)data includeEditorServices:(BOOL)includeEditorServices menuClient:(WebContextMenuClient*)menuClient 62 71 { 63 72 if (!(self = [super init])) 64 73 return nil; 65 74 66 _picker = adoptNS([[NSSharingServicePicker alloc] initWithItems:@[ image ]]); 75 RetainPtr<NSItemProvider> itemProvider = adoptNS([[NSItemProvider alloc] initWithItem:data typeIdentifier:@"public.data"]); 76 77 _picker = adoptNS([[NSSharingServicePicker alloc] initWithItems:@[ itemProvider.get() ]]); 67 78 [_picker setStyle:NSSharingServicePickerStyleRollover]; 68 79 [_picker setDelegate:self]; … … 87 98 } 88 99 100 - (void)didShareImageData:(NSData *)data confirmDataIsValidTIFFData:(BOOL)confirmData 101 { 102 Page* page = [_menuClient->webView() page]; 103 if (!page) 104 return; 105 106 if (confirmData) { 107 RetainPtr<NSImage> nsImage = adoptNS([[NSImage alloc] initWithData:data]); 108 if (!nsImage) { 109 LOG_ERROR("Shared image data cannot create a valid NSImage"); 110 return; 111 } 112 113 data = [nsImage TIFFRepresentation]; 114 } 115 116 NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName:serviceControlsPasteboardName]; 117 [pasteboard declareTypes:@[ NSPasteboardTypeTIFF ] owner:nil]; 118 [pasteboard setData:data forType:NSPasteboardTypeTIFF]; 119 120 Frame& frame = page->focusController().focusedOrMainFrame(); 121 if (!frame.selection().isNone()) 122 frame.editor().readSelectionFromPasteboard(serviceControlsPasteboardName); 123 124 [self clear]; 125 } 126 89 127 #pragma mark NSSharingServicePickerDelegate methods 90 91 128 92 129 - (NSArray *)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker sharingServicesForItems:(NSArray *)items mask:(NSSharingServiceMask)mask proposedSharingServices:(NSArray *)proposedServices … … 124 161 return; 125 162 126 RetainPtr<CGImageSourceRef> source = adoptCF(CGImageSourceCreateWithData((CFDataRef)[items objectAtIndex:0], NULL)); 127 RetainPtr<CGImageRef> cgImage = adoptCF(CGImageSourceCreateImageAtIndex(source.get(), 0, NULL)); 128 129 if (!cgImage) 130 return; 131 132 Page* page = [_menuClient->webView() page]; 133 if (!page) 134 return; 135 136 NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName:serviceControlsPasteboardName]; 137 [pasteboard declareTypes:@[ NSPasteboardTypeTIFF ] owner:nil]; 138 [pasteboard setData:[items objectAtIndex:0] forType:NSPasteboardTypeTIFF]; 139 140 Frame& frame = page->focusController().focusedOrMainFrame(); 141 if (!frame.selection().isNone()) 142 frame.editor().readSelectionFromPasteboard(serviceControlsPasteboardName); 143 163 id item = [items objectAtIndex:0]; 164 165 if ([item isKindOfClass:[NSImage class]]) 166 [self didShareImageData:[item TIFFRepresentation] confirmDataIsValidTIFFData:NO]; 167 else if ([item isKindOfClass:[NSItemProvider class]]) { 168 NSItemProvider *itemProvider = (NSItemProvider *)item; 169 NSString *itemUTI = itemProvider.registeredTypeIdentifiers.firstObject; 170 171 [itemProvider loadItemForTypeIdentifier:itemUTI options:nil completionHandler:^(id receivedData, NSError *dataError) { 172 if (!receivedData) { 173 LOG_ERROR("Did not receive data from NSItemProvider"); 174 return; 175 } 176 177 if (![receivedData isKindOfClass:[NSData class]]) { 178 LOG_ERROR("Data received from NSItemProvider is not of type NSData"); 179 return; 180 } 181 182 [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 183 [self didShareImageData:receivedData confirmDataIsValidTIFFData:YES]; 184 }]; 185 186 }]; 187 } else 188 LOG_ERROR("sharingService:didShareItems: - Unknown item type returned"); 189 } 190 191 - (void)sharingService:(NSSharingService *)sharingService didFailToShareItems:(NSArray *)items error:(NSError *)error 192 { 144 193 [self clear]; 145 194 } 146 195 147 - (void)sharingService:(NSSharingService *)sharingService didFailToShareItems:(NSArray *)items error:(NSError *)error148 {149 [self clear];150 }151 152 196 - (NSWindow *)sharingService:(NSSharingService *)sharingService sourceWindowForShareItems:(NSArray *)items sharingContentScope:(NSSharingContentScope *)sharingContentScope 153 197 { -
trunk/Source/WebKit/mac/WebCoreSupport/WebContextMenuClient.mm
r168047 r168145 51 51 #import <WebCore/LocalizedStrings.h> 52 52 #import <WebCore/Page.h> 53 #import <WebCore/SharedBuffer.h> 53 54 #import <WebCore/Frame.h> 54 55 #import <WebCore/FrameView.h> … … 364 365 if (Image* image = page->contextMenuController().context().controlledImage()) { 365 366 ASSERT(page->contextMenuController().context().hitTestResult().innerNode()); 367 368 RefPtr<SharedBuffer> data = image->data(); 369 ASSERT(data); 370 RetainPtr<CFDataRef> cfData = data->createCFData(); 371 366 372 bool isContentEditable = page->contextMenuController().context().hitTestResult().innerNode()->isContentEditable(); 367 m_sharingServicePickerController = adoptNS([[WebSharingServicePickerController alloc] initWith Image:image->getNSImage() includeEditorServices:isContentEditable menuClient:this]);373 m_sharingServicePickerController = adoptNS([[WebSharingServicePickerController alloc] initWithData:(NSData *)cfData.get() includeEditorServices:isContentEditable menuClient:this]); 368 374 369 375 return [m_sharingServicePickerController menu];
Note: See TracChangeset
for help on using the changeset viewer.