RESOLVED FIXED Bug 121818
Upstream changes to Pasteboard implementation for iOS
https://bugs.webkit.org/show_bug.cgi?id=121818
Summary Upstream changes to Pasteboard implementation for iOS
Enrica Casucci
Reported 2013-09-23 17:46:35 PDT
This bug tracks a series of changes to the pasteboard implementation on iOS that are being merged to OpenSource.
Attachments
Patch (40.27 KB, patch)
2013-09-24 11:40 PDT, Enrica Casucci
darin: review+
webkit-ews: commit-queue-
Second patch (54.08 KB, patch)
2013-09-27 14:12 PDT, Enrica Casucci
no flags
Second part with fixes (54.60 KB, patch)
2013-09-27 14:55 PDT, Enrica Casucci
benjamin: review+
Enrica Casucci
Comment 1 2013-09-24 11:40:33 PDT
WebKit Commit Bot
Comment 2 2013-09-24 11:43:44 PDT
Attachment 212487 [details] did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/WebCore/ChangeLog', u'Source/WebCore/WebCore.xcodeproj/project.pbxproj', u'Source/WebCore/editing/Editor.cpp', u'Source/WebCore/editing/ios/EditorIOS.mm', u'Source/WebCore/platform/Pasteboard.h', u'Source/WebCore/platform/PasteboardStrategy.h', u'Source/WebCore/platform/PlatformPasteboard.h', u'Source/WebCore/platform/ios/PasteboardIOS.mm', u'Source/WebCore/platform/ios/PlatformPasteboardIOS.mm', u'Source/WebKit/mac/ChangeLog', u'Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h', u'Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm', u'Source/WebKit2/ChangeLog', u'Source/WebKit2/Scripts/webkit2/messages.py', u'Source/WebKit2/Shared/WebCoreArgumentCoders.cpp', u'Source/WebKit2/Shared/WebCoreArgumentCoders.h', u'Source/WebKit2/UIProcess/WebContext.h', u'Source/WebKit2/UIProcess/WebContext.messages.in', u'Source/WebKit2/UIProcess/mac/WebContextMac.mm', u'Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp', u'Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h']" exit_code: 1 Source/WebCore/platform/PlatformPasteboard.h:74: The parameter name "content" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebCore/platform/PlatformPasteboard.h:75: The parameter name "pasteboardImage" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:86: The parameter name "content" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:87: The parameter name "pasteboardImage" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h:99: The parameter name "content" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h:100: The parameter name "pasteboardImage" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebKit2/UIProcess/WebContext.h:324: The parameter name "content" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebKit2/UIProcess/WebContext.h:325: The parameter name "pasteboardImage" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebCore/platform/PasteboardStrategy.h:47: The parameter name "content" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebCore/platform/PasteboardStrategy.h:48: The parameter name "pasteboardImage" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 10 in 21 files If any of these errors are false positives, please file a bug against check-webkit-style.
Early Warning System Bot
Comment 3 2013-09-24 11:49:00 PDT
Darin Adler
Comment 4 2013-09-24 11:53:23 PDT
Comment on attachment 212487 [details] Patch Don’t land this if it breaks the build for other platforms ;)
EFL EWS Bot
Comment 5 2013-09-24 12:01:06 PDT
Enrica Casucci
Comment 6 2013-09-24 12:18:35 PDT
(In reply to comment #4) > (From update of attachment 212487 [details]) > Don’t land this if it breaks the build for other platforms ;) Thanks for the review. I will fix the other platforms before landing.
Enrica Casucci
Comment 7 2013-09-24 12:34:49 PDT
The failures are unrelated to this patch. Committed revision 156350.
Darin Adler
Comment 8 2013-09-24 13:35:42 PDT
Arrgh, I had a lot of comments on the patch that went along with my review+ and they seemed to all be deleted!
Csaba Osztrogonác
Comment 9 2013-09-24 15:42:30 PDT
(In reply to comment #7) > The failures are unrelated to this patch. > Committed revision 156350. No the failures weren't unrelated ... Qt EWS noticed the real failure. It seems the generator can't handle the nested ifdefs and generated buggy output. Fix landed in http://trac.webkit.org/changeset/156366
Csaba Osztrogonác
Comment 10 2013-09-24 16:05:18 PDT
And I broke the Mac build, because I reversed the ifdefs accidentally. Sorry. And AP fixed it - http://trac.webkit.org/changeset/156368. Thanks. The problem was that the generator doesn't like nested ifdefs for some reason. I'm going to file a new bug report about it and attach the generated cpps.
Darin Adler
Comment 11 2013-09-25 09:34:43 PDT
Comment on attachment 212487 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=212487&action=review > Source/WebCore/platform/Pasteboard.h:30 > +#include "Image.h" Please don’t add this include to Pasteboard.h. It’s not needed. Maybe we need some additional forward class declarations instead? > Source/WebCore/platform/Pasteboard.h:32 > +#include "SharedBuffer.h" Please don’t add this include to Pasteboard.h. It’s not needed. Maybe we need some additional forward class declarations instead? > Source/WebCore/platform/Pasteboard.h:53 > +#if PLATFORM(IOS) I’ve been trying to keep platforms in alphabetical order. So this would go after GTK and before QT, not after WIN. > Source/WebCore/platform/Pasteboard.h:191 > + static String resourceMIMEType(NSString *mimeType); This should take a const String& instead of an NSString *. > Source/WebCore/platform/PasteboardStrategy.h:31 > +#if PLATFORM(IOS) > +#include "Pasteboard.h" > +#endif Conditional includes like this one should go after the unconditional includes in a separate paragraph. But also, I don’t think we should add this include. Instead we should add some forward struct declarations. > Source/WebCore/platform/PasteboardStrategy.h:46 > + // FIXME: we should move Mac to this. Sentence style with capital letter. >> Source/WebCore/platform/PasteboardStrategy.h:47 >> + virtual void writeToPasteboard(const PasteboardWebContent& content) = 0; > > The parameter name "content" adds no information, so it should be removed. [readability/parameter_name] [5] I agree with the bot. Please remove this. >> Source/WebCore/platform/PasteboardStrategy.h:48 >> + virtual void writeToPasteboard(const PasteboardImage& pasteboardImage) = 0; > > The parameter name "pasteboardImage" adds no information, so it should be removed. [readability/parameter_name] [5] I agree with the bot. Please remove this. > Source/WebCore/platform/PasteboardStrategy.h:49 > + virtual void writeToPasteboard(const String& text) = 0; Please remove this argument name. > Source/WebCore/platform/PlatformPasteboard.h:29 > +#include "Pasteboard.h" We should not add this include. Instead we should add some forward declarations. > Source/WebCore/platform/PlatformPasteboard.h:52 > +#if PLATFORM(IOS) > + PlatformPasteboard(); > +#endif Conditional things like this should go after the the platform-independent ones. > Source/WebCore/platform/PlatformPasteboard.h:53 > + // FIXME: probably we don't need a constructor that takes a pasteboard name for iOS. Comments should have sentence style, with capital letter. >> Source/WebCore/platform/PlatformPasteboard.h:74 >> + void write(const PasteboardWebContent& content); > > The parameter name "content" adds no information, so it should be removed. [readability/parameter_name] [5] I agree with the bot. >> Source/WebCore/platform/PlatformPasteboard.h:75 >> + void write(const PasteboardImage& pasteboardImage); > > The parameter name "pasteboardImage" adds no information, so it should be removed. [readability/parameter_name] [5] I agree with the bot. > Source/WebCore/platform/PlatformPasteboard.h:76 > + void write(const String& text); I suggest removing the name text here. > Source/WebCore/platform/ios/PasteboardIOS.mm:63 > +// FIXME: the following soft linking and #define needs to be shared > +// with PlatformPasteboardIOS.mm Sentence style with capital letter and period. I also suggest using a single line. > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:2 > + * Copyright (C) 2006-2013 Apple Computer, Inc. All rights reserved. Year ranges are not used. This should list years of publication. And it’s Apple Inc., not Apple Computer, Inc. > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:31 > +#import "config.h" > +#import "Color.h" > +#import "KURL.h" > +#import "Image.h" > +#import "PlatformPasteboard.h" > +#import "SoftLinking.h" The PlatformPasteboard.h should go first, grouped with config.h. The others should be in a separate paragraph. > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:42 > +// FIXME: the following soft linking and #define needs to be shared > +// with PasteboardIOS.mm. Sentence style with capital letter. I also suggest using a single line. > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:159 > + [m_pasteboard setItems:[NSArray arrayWithObject:representations.get()]]; Can’t we use the @[] syntax instead of [NSArray arrayWithObject:]? > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:169 > + [m_pasteboard setItems:[NSArray arrayWithObject:representations.get()]]; Can’t we use the @[] syntax instead of [NSArray arrayWithObject:]? > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:176 > + [m_pasteboard setItems:[NSArray arrayWithObject:representations.get()]]; Can’t we use the @[] syntax instead of [NSArray arrayWithObject:]? > Source/WebKit2/Shared/WebCoreArgumentCoders.cpp:793 > +#if PLATFORM(IOS) > +static void encodeSharedBuffer(ArgumentEncoder& encoder, SharedBuffer* buffer) Please leave a blank line to match the blank line before the #endif below. > Source/WebKit2/Shared/WebCoreArgumentCoders.cpp:817 > + buffer = SharedBuffer::create(static_cast<unsigned char *>(sharedMemoryBuffer->data()), bufferSize); For unsigned char* there should not a be a space after “char”. This looks dangerous. It’s using a buffer size that was read off the wire with the a data pointer from the SharedMemory object. Is this correct? I don’t see how we’re guaranteed that the SharedMemory has the specified size. > Source/WebKit2/UIProcess/WebContext.h:49 > +#include <WebCore/Pasteboard.h> I don’t think this include is needed. We just need forward declarations of a couple classes. >> Source/WebKit2/UIProcess/WebContext.h:324 >> + void writeWebContentToPasteboard(const WebCore::PasteboardWebContent& content); > > The parameter name "content" adds no information, so it should be removed. [readability/parameter_name] [5] I agree with the bot on this. >> Source/WebKit2/UIProcess/WebContext.h:325 >> + void writeImageToPasteboard(const WebCore::PasteboardImage& pasteboardImage); > > The parameter name "pasteboardImage" adds no information, so it should be removed. [readability/parameter_name] [5] I agree with the bot on this. > Source/WebKit2/UIProcess/WebContext.h:326 > + void writeStringToPasteboard(const String& text); Should remove the word “text”. > Source/WebKit2/UIProcess/mac/WebContextMac.mm:459 > +void WebContext::writeWebContentToPasteboard(const WebCore::PasteboardWebContent &content) The & is in the wrong place. Should be by the type name. > Source/WebKit2/UIProcess/mac/WebContextMac.mm:464 > +void WebContext::writeImageToPasteboard(const WebCore::PasteboardImage &pasteboardImage) I would just use the name image. No need to use the name pasteboardImage. Also, the & is in the wrong place. > Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:511 > +void WebPlatformStrategies::writeToPasteboard(const WebCore::PasteboardImage& pasteboardImage) I would just use the name image. No need to use the name pasteboardImage. >> Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h:99 >> + virtual void writeToPasteboard(const WebCore::PasteboardWebContent& content) OVERRIDE; > > The parameter name "content" adds no information, so it should be removed. [readability/parameter_name] [5] I agree with the bot on this. >> Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h:100 >> + virtual void writeToPasteboard(const WebCore::PasteboardImage& pasteboardImage) OVERRIDE; > > The parameter name "pasteboardImage" adds no information, so it should be removed. [readability/parameter_name] [5] I agree with the bot on this. > Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h:101 > + virtual void writeToPasteboard(const String& text) OVERRIDE; Should remove the argument name text. > Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:34 > +#if PLATFORM(IOS) > +#include <WebCore/Pasteboard.h> > +#endif Conditional includes should be in a separate paragraph below the unconditional ones. But also, I don’t think this include is needed. Instead we should forward-declare the classes. Further, I don’t think an include like this one needs to be conditional. >> Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:86 >> + virtual void writeToPasteboard(const WebCore::PasteboardWebContent& content) OVERRIDE; > > The parameter name "content" adds no information, so it should be removed. [readability/parameter_name] [5] I agree with the bot. >> Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:87 >> + virtual void writeToPasteboard(const WebCore::PasteboardImage& pasteboardImage) OVERRIDE; > > The parameter name "pasteboardImage" adds no information, so it should be removed. [readability/parameter_name] [5] I agree with the bot. > Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:88 > + virtual void writeToPasteboard(const String& text) OVERRIDE; I suggest omitting the argument name “text”. > Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm:234 > +void WebPlatformStrategies::writeToPasteboard(const WebCore::PasteboardImage& pasteboardImage) I would just use the name image. No need to use the name pasteboardImage.
Darin Adler
Comment 12 2013-09-25 09:35:10 PDT
Enrica, I rewrote the lost comments that were supposed to go with the review+.
Enrica Casucci
Comment 13 2013-09-25 10:07:22 PDT
(In reply to comment #12) > Enrica, I rewrote the lost comments that were supposed to go with the review+. Thanks for all the feedback. I will address all your comments in the next upstream patch.
Enrica Casucci
Comment 14 2013-09-27 14:11:19 PDT
Using the same bug for the next patch.
Enrica Casucci
Comment 15 2013-09-27 14:12:14 PDT
Created attachment 212840 [details] Second patch
WebKit Commit Bot
Comment 16 2013-09-27 14:14:42 PDT
Attachment 212840 [details] did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/WebCore/ChangeLog', u'Source/WebCore/WebCore.exp.in', u'Source/WebCore/editing/Editor.cpp', u'Source/WebCore/editing/ios/EditorIOS.mm', u'Source/WebCore/platform/Pasteboard.h', u'Source/WebCore/platform/PasteboardStrategy.h', u'Source/WebCore/platform/PlatformPasteboard.h', u'Source/WebCore/platform/ios/PasteboardIOS.mm', u'Source/WebCore/platform/ios/PlatformPasteboardIOS.mm', u'Source/WebCore/platform/mac/PasteboardMac.mm', u'Source/WebCore/platform/mac/PlatformPasteboardMac.mm', u'Source/WebKit/mac/ChangeLog', u'Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h', u'Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm', u'Source/WebKit2/ChangeLog', u'Source/WebKit2/Shared/WebCoreArgumentCoders.cpp', u'Source/WebKit2/Shared/WebCoreArgumentCoders.h', u'Source/WebKit2/UIProcess/WebContext.h', u'Source/WebKit2/UIProcess/WebContext.messages.in', u'Source/WebKit2/UIProcess/mac/WebContextMac.mm', u'Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp', u'Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h']" exit_code: 1 Source/WebCore/platform/PasteboardStrategy.h:46: Tab found; better to use spaces [whitespace/tab] [1] Source/WebCore/platform/PasteboardStrategy.h:46: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] Source/WebCore/platform/PasteboardStrategy.h:47: Tab found; better to use spaces [whitespace/tab] [1] Source/WebCore/platform/PasteboardStrategy.h:47: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] Source/WebCore/platform/PasteboardStrategy.h:48: Tab found; better to use spaces [whitespace/tab] [1] Source/WebCore/platform/PasteboardStrategy.h:48: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] Source/WebCore/platform/PasteboardStrategy.h:49: Tab found; better to use spaces [whitespace/tab] [1] Source/WebCore/platform/PasteboardStrategy.h:49: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] Source/WebCore/platform/PasteboardStrategy.h:50: Tab found; better to use spaces [whitespace/tab] [1] Source/WebCore/platform/PasteboardStrategy.h:50: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] Source/WebCore/platform/PasteboardStrategy.h:51: Tab found; better to use spaces [whitespace/tab] [1] Source/WebCore/platform/PasteboardStrategy.h:51: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] Source/WebCore/platform/PasteboardStrategy.h:52: Tab found; better to use spaces [whitespace/tab] [1] Source/WebCore/platform/PasteboardStrategy.h:52: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] Source/WebCore/platform/PasteboardStrategy.h:53: Tab found; better to use spaces [whitespace/tab] [1] Source/WebCore/platform/PasteboardStrategy.h:53: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3] Total errors found: 16 in 22 files If any of these errors are false positives, please file a bug against check-webkit-style.
Enrica Casucci
Comment 17 2013-09-27 14:55:33 PDT
Created attachment 212843 [details] Second part with fixes I've changed KURL to URL in iOS specific files.
Benjamin Poulain
Comment 18 2013-09-27 16:06:20 PDT
Comment on attachment 212843 [details] Second part with fixes View in context: https://bugs.webkit.org/attachment.cgi?id=212843&action=review > Source/WebCore/editing/ios/EditorIOS.mm:387 > + : frame(frame) > + , context(context) > + , allowPlainText(allowPlainText) > + , madeFragmentFromPlainText(false) Indent. > Source/WebCore/editing/ios/EditorIOS.mm:477 > + NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"%@://%@/%@", @"webkit-fake-url", UUIDString.get(), relativePart]]; > + > + return URL; This could be return [NSURL ...] > Source/WebCore/editing/ios/EditorIOS.mm:494 > + if (url.string().isEmpty()) > + return false; This should be url.isEmpty(). URL::string() is evil :) > Source/WebCore/editing/ios/EditorIOS.mm:607 > + > + Two blank lines here. > Source/WebCore/platform/PasteboardStrategy.h:53 > + No need for the blank line. > Source/WebCore/platform/PasteboardStrategy.h:54 > #endif I would add // PLATFORM(IOS) because this block is a little long. > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:179 > + if (pasteboardType == String(kUTTypeURL)) Unrelated, but we should totally add WTF::String::operator==(NSString*)! > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:180 > + [representations setValue:[[[NSURL alloc] initWithString:text] autorelease] forKey:pasteboardType]; Please use a adoptNS().get() here instead of autorelease. > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:193 > + NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:index]; RetainPtr<> of [NSIndexSet alloc] initWith...]? > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:204 > + NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:index]; RetainPtr<> of [NSIndexSet alloc] initWith...]? > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:215 > + if (![value isKindOfClass:[NSString class]]) { > + return String(); > + } Brackets. > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:221 > + NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:index]; RetainPtr? > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:225 > + if (![pasteboardItem.get() count]) No need for the get(). > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:228 > + id value = [pasteboardItem.get() objectAtIndex:0]; No need for the get(). > Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:230 > + ASSERT([value isKindOfClass:[NSURL class]]); This Assert will always hit.
Enrica Casucci
Comment 19 2013-09-27 16:28:49 PDT
Addressed feedback and landed. Committed revision 156588.
Note You need to log in before you can comment on or make changes to this bug.