Bug 211511

Summary: [GTK] Rework clipboard handling in preparation for GTK4
Product: WebKit Reporter: Carlos Garcia Campos <cgarcia>
Component: WebKitGTKAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: aperez, bugs-noreply, ews-watchlist, mifenton
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on:    
Bug Blocks: 210100, 211561, 211723    
Attachments:
Description Flags
Patch
none
Patch
none
Patch
aperez: review+
Patch for landing none

Carlos Garcia Campos
Reported 2020-05-06 06:54:44 PDT
Use async APIs to avoid blocking the UI process during the communication with the clipboard. In GTK4 only async APIs are available.
Attachments
Patch (66.74 KB, patch)
2020-05-06 07:05 PDT, Carlos Garcia Campos
no flags
Patch (67.24 KB, patch)
2020-05-07 05:21 PDT, Carlos Garcia Campos
no flags
Patch (68.36 KB, patch)
2020-05-11 05:50 PDT, Carlos Garcia Campos
aperez: review+
Patch for landing (69.54 KB, patch)
2020-05-12 07:16 PDT, Carlos Garcia Campos
no flags
Carlos Garcia Campos
Comment 1 2020-05-06 07:05:08 PDT
Carlos Garcia Campos
Comment 2 2020-05-07 05:21:54 PDT
Carlos Garcia Campos
Comment 3 2020-05-11 05:50:48 PDT
Adrian Perez
Comment 4 2020-05-12 06:50:52 PDT
Comment on attachment 399013 [details] Patch Looks good overall, with a few nits you may want to take a look at before landing. View in context: https://bugs.webkit.org/attachment.cgi?id=399013&action=review > Source/WebCore/editing/gtk/WebContentReaderGtk.cpp:53 > +bool WebContentReader::readFilePaths(const Vector<String>& paths) This is exactly the same implementation as for Cocoa, and it seems like a reasonable default implementation for any port. I would move this into “WebContentReader.cpp” and share the code. > Source/WebCore/editing/gtk/WebContentReaderGtk.cpp:93 > +bool WebContentReader::readURL(const URL&, const String&) The Cocoa port creates an anchor element when reading an URL, resulting in a fragment with something like “<a href="url">title-or-url</a>” being added. I think it makes sense to mimic that behavior. Feel free to leave a TODO note here to do that later on as a follow-up patch. > Source/WebCore/editing/gtk/WebContentReaderGtk.cpp:98 > +bool WebContentMarkupReader::readHTML(const String&) This could also be implemented, seems easy enough to call “sanitizeMarkup()” on the input string and use the result from that. Feel free to leave it as a TODO for a follow-up patch as well. > Source/WebCore/platform/gtk/PasteboardGtk.cpp:106 > + ASSERT(m_selectionData); Shouldn't this be also a “RELEASE_ASSERT()” as above? It looks like to me that both assertions should be of the same kind.
Carlos Garcia Campos
Comment 5 2020-05-12 07:05:11 PDT
Comment on attachment 399013 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=399013&action=review >> Source/WebCore/editing/gtk/WebContentReaderGtk.cpp:93 >> +bool WebContentReader::readURL(const URL&, const String&) > > The Cocoa port creates an anchor element when reading an URL, resulting in a > fragment with something like “<a href="url">title-or-url</a>” being added. > > I think it makes sense to mimic that behavior. Feel free to leave a TODO note > here to do that later on as a follow-up patch. We don't really support URLs, we use _NETSCAPE_URL for drag an drop and the html markup is already generated so it's always handled as text/html. This is never called for GTK port. >> Source/WebCore/editing/gtk/WebContentReaderGtk.cpp:98 >> +bool WebContentMarkupReader::readHTML(const String&) > > This could also be implemented, seems easy enough to call “sanitizeMarkup()” on the > input string and use the result from that. > > Feel free to leave it as a TODO for a follow-up patch as well. I'm not sure this is called for the GTK port either, I'll check. >> Source/WebCore/platform/gtk/PasteboardGtk.cpp:106 >> + ASSERT(m_selectionData); > > Shouldn't this be also a “RELEASE_ASSERT()” as above? It looks like to me > that both assertions should be of the same kind. No, the other should be ASSERT instead, since I don't usually build with debug I use release assert during development and then convert them to asserts, but I guess I forgot one. > Source/WebCore/platform/gtk/PasteboardGtk.cpp:249 > +void Pasteboard::read(PasteboardWebContentReader& reader, WebContentReadingPolicy policy, Optional<size_t>) This is where the WebContentReader is used and we don't call reader.readURL(), that's why it's unimplemented.
Carlos Garcia Campos
Comment 6 2020-05-12 07:16:47 PDT
Created attachment 399126 [details] Patch for landing
Carlos Garcia Campos
Comment 7 2020-05-12 08:20:38 PDT
Note You need to log in before you can comment on or make changes to this bug.