Title: [222904] trunk/Source/WebCore
Revision
222904
Author
[email protected]
Date
2017-10-05 01:06:16 -0700 (Thu, 05 Oct 2017)

Log Message

Address post-review feedback following r222885
https://bugs.webkit.org/show_bug.cgi?id=177853
<rdar://problem/34807346>

Reviewed by Ryosuke Niwa and Dan Bates.

* dom/DataTransfer.cpp:
(WebCore::DataTransfer::updateFileList):
(WebCore::DataTransfer::types const):
(WebCore::DataTransfer::filesFromPasteboardAndItemList const):
* dom/DataTransferItem.h:
(WebCore::DataTransferItem::file):
(WebCore::DataTransferItem::file const): Deleted.
* dom/DataTransferItemList.cpp:
(WebCore::DataTransferItemList::add):
(WebCore::DataTransferItemList::remove):

When removing a data transfer item, capture it in a Ref for the scope of remove(), so that it won't be destroyed
immediately after removing from the item list.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (222903 => 222904)


--- trunk/Source/WebCore/ChangeLog	2017-10-05 07:54:02 UTC (rev 222903)
+++ trunk/Source/WebCore/ChangeLog	2017-10-05 08:06:16 UTC (rev 222904)
@@ -1,3 +1,25 @@
+2017-10-05  Wenson Hsieh  <[email protected]>
+
+        Address post-review feedback following r222885
+        https://bugs.webkit.org/show_bug.cgi?id=177853
+        <rdar://problem/34807346>
+
+        Reviewed by Ryosuke Niwa and Dan Bates.
+
+        * dom/DataTransfer.cpp:
+        (WebCore::DataTransfer::updateFileList):
+        (WebCore::DataTransfer::types const):
+        (WebCore::DataTransfer::filesFromPasteboardAndItemList const):
+        * dom/DataTransferItem.h:
+        (WebCore::DataTransferItem::file):
+        (WebCore::DataTransferItem::file const): Deleted.
+        * dom/DataTransferItemList.cpp:
+        (WebCore::DataTransferItemList::add):
+        (WebCore::DataTransferItemList::remove):
+
+        When removing a data transfer item, capture it in a Ref for the scope of remove(), so that it won't be destroyed
+        immediately after removing from the item list.
+
 2017-10-05  Youenn Fablet  <[email protected]>
 
         Make LibWebRTCProvider port agnostic

Modified: trunk/Source/WebCore/dom/DataTransfer.cpp (222903 => 222904)


--- trunk/Source/WebCore/dom/DataTransfer.cpp	2017-10-05 07:54:02 UTC (rev 222903)
+++ trunk/Source/WebCore/dom/DataTransfer.cpp	2017-10-05 08:06:16 UTC (rev 222904)
@@ -164,8 +164,6 @@
 
 void DataTransfer::updateFileList()
 {
-    // If we're removing an item, then the item list must exist, which implies that the file list must have been initialized already.
-    ASSERT(m_fileList);
     ASSERT(canWriteData());
 
     m_fileList->m_files = filesFromPasteboardAndItemList();
@@ -203,11 +201,11 @@
     }
 
     if (m_itemList && m_itemList->hasItems() && m_itemList->items().findMatching([] (const auto& item) { return item->isFile(); }) != notFound)
-        return { "Files" };
+        return { ASCIILiteral("Files") };
 
     if (m_pasteboard->containsFiles()) {
         ASSERT(!m_pasteboard->typesSafeForBindings().contains("Files"));
-        return { "Files" };
+        return { ASCIILiteral("Files") };
     }
 
     auto types = m_pasteboard->typesSafeForBindings();
@@ -229,9 +227,8 @@
     bool itemListContainsItems = false;
     if (m_itemList && m_itemList->hasItems()) {
         for (auto& item : m_itemList->items()) {
-            if (auto file = item->file()) {
-                files.append(*file);
-            }
+            if (auto file = item->file())
+                files.append(file.releaseNonNull());
         }
         itemListContainsItems = true;
     }

Modified: trunk/Source/WebCore/dom/DataTransferItem.h (222903 => 222904)


--- trunk/Source/WebCore/dom/DataTransferItem.h	2017-10-05 07:54:02 UTC (rev 222903)
+++ trunk/Source/WebCore/dom/DataTransferItem.h	2017-10-05 08:06:16 UTC (rev 222904)
@@ -54,7 +54,7 @@
 
     ~DataTransferItem();
 
-    RefPtr<File> file() const { return m_file; }
+    RefPtr<File> file() { return m_file; }
     void clearListAndPutIntoDisabledMode();
 
     bool isFile() const { return m_file; }

Modified: trunk/Source/WebCore/dom/DataTransferItemList.cpp (222903 => 222904)


--- trunk/Source/WebCore/dom/DataTransferItemList.cpp	2017-10-05 07:54:02 UTC (rev 222903)
+++ trunk/Source/WebCore/dom/DataTransferItemList.cpp	2017-10-05 08:06:16 UTC (rev 222904)
@@ -91,7 +91,7 @@
 
     ensureItems().append(DataTransferItem::create(m_weakPtrFactory.createWeakPtr(*this), file->type(), file.copyRef()));
     m_dataTransfer.didAddFileToItemList();
-    return RefPtr<DataTransferItem> { m_items->last().ptr() };
+    return m_items->last().ptr();
 }
 
 ExceptionOr<void> DataTransferItemList::remove(unsigned index)
@@ -103,15 +103,13 @@
     if (items.size() <= index)
         return Exception { IndexSizeError }; // Matches Gecko. See https://github.com/whatwg/html/issues/2925
 
-    // Since file-backed DataTransferItems are not actually written to the pasteboard yet, we don't need to remove any
-    // temporary files. When we support writing file-backed DataTransferItems to the platform pasteboard, we will need
-    // to clean up here.
-    auto& removedItem = items[index].get();
-    if (!removedItem.isFile())
-        m_dataTransfer.pasteboard().clear(removedItem.type());
-    removedItem.clearListAndPutIntoDisabledMode();
+    // FIXME: Remove the file from the pasteboard object once we add support for it.
+    Ref<DataTransferItem> removedItem = items[index].copyRef();
+    if (!removedItem->isFile())
+        m_dataTransfer.pasteboard().clear(removedItem->type());
+    removedItem->clearListAndPutIntoDisabledMode();
     items.remove(index);
-    if (removedItem.isFile())
+    if (removedItem->isFile())
         m_dataTransfer.updateFileList();
 
     return { };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to