[Clipboard API] Refactor custom pasteboard writing codepaths to handle multiple items
https://bugs.webkit.org/show_bug.cgi?id=202916

Reviewed by Tim Horton.

Source/WebCore:

Adjusts the `Pasteboard::write` codepath for writing PasteboardCustomData to the platform pasteboard, such that
it accepts multiple PasteboardCustomDatas. No new tests, since there is no behavior change.

* dom/DataTransfer.cpp:
(WebCore::DataTransfer::commitToPasteboard):

Pass in the PasteboardCustomData as a single-item vector.

* platform/Pasteboard.h:
* platform/PasteboardStrategy.h:
* platform/PlatformPasteboard.h:
* platform/StaticPasteboard.h:
* platform/cocoa/PasteboardCocoa.mm:
(WebCore::Pasteboard::writeCustomData):
* platform/gtk/PasteboardGtk.cpp:
(WebCore::Pasteboard::writeCustomData):
* platform/gtk/PlatformPasteboardGtk.cpp:
(WebCore::PlatformPasteboard::write):
* platform/ios/PlatformPasteboardIOS.mm:
(WebCore::PlatformPasteboard::write):

Adjust this method to return the updated change count.

* platform/libwpe/PasteboardLibWPE.cpp:
(WebCore::Pasteboard::writeCustomData):
* platform/libwpe/PlatformPasteboardLibWPE.cpp:
(WebCore::PlatformPasteboard::write):
* platform/mac/PlatformPasteboardMac.mm:
(WebCore::PlatformPasteboard::write):

Add logic to fall back to writing legacy pasteboard types in the case where there is only one item.

* platform/win/PasteboardWin.cpp:
(WebCore::Pasteboard::writeCustomData):

Source/WebKit:

Change more function and method signatures from `const PasteboardCustomData&` to
`const Vector<PasteboardCustomData>&`.

* UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
(WebKit::WebPasteboardProxy::writeCustomData):
* UIProcess/WebPasteboardProxy.cpp:
(WebKit::WebPasteboardProxy::writeCustomData):
* UIProcess/WebPasteboardProxy.h:
* UIProcess/WebPasteboardProxy.messages.in:
* WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
(WebKit::WebPlatformStrategies::writeCustomData):
* WebProcess/WebCoreSupport/WebPlatformStrategies.h:

Source/WebKitLegacy/mac:

Adjust some method signatures.

* WebCoreSupport/WebPlatformStrategies.h:
* WebCoreSupport/WebPlatformStrategies.mm:
(WebPlatformStrategies::writeCustomData):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@251117 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 76789f4..b085e34 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,45 @@
+2019-10-14  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        [Clipboard API] Refactor custom pasteboard writing codepaths to handle multiple items
+        https://bugs.webkit.org/show_bug.cgi?id=202916
+
+        Reviewed by Tim Horton.
+
+        Adjusts the `Pasteboard::write` codepath for writing PasteboardCustomData to the platform pasteboard, such that
+        it accepts multiple PasteboardCustomDatas. No new tests, since there is no behavior change.
+
+        * dom/DataTransfer.cpp:
+        (WebCore::DataTransfer::commitToPasteboard):
+
+        Pass in the PasteboardCustomData as a single-item vector.
+
+        * platform/Pasteboard.h:
+        * platform/PasteboardStrategy.h:
+        * platform/PlatformPasteboard.h:
+        * platform/StaticPasteboard.h:
+        * platform/cocoa/PasteboardCocoa.mm:
+        (WebCore::Pasteboard::writeCustomData):
+        * platform/gtk/PasteboardGtk.cpp:
+        (WebCore::Pasteboard::writeCustomData):
+        * platform/gtk/PlatformPasteboardGtk.cpp:
+        (WebCore::PlatformPasteboard::write):
+        * platform/ios/PlatformPasteboardIOS.mm:
+        (WebCore::PlatformPasteboard::write):
+
+        Adjust this method to return the updated change count.
+
+        * platform/libwpe/PasteboardLibWPE.cpp:
+        (WebCore::Pasteboard::writeCustomData):
+        * platform/libwpe/PlatformPasteboardLibWPE.cpp:
+        (WebCore::PlatformPasteboard::write):
+        * platform/mac/PlatformPasteboardMac.mm:
+        (WebCore::PlatformPasteboard::write):
+
+        Add logic to fall back to writing legacy pasteboard types in the case where there is only one item.
+
+        * platform/win/PasteboardWin.cpp:
+        (WebCore::Pasteboard::writeCustomData):
+
 2019-10-14  Ryosuke Niwa  <rniwa@webkit.org>
 
         Deploy smart pointers in RadioButtonGroups and RadioButtonGroup
diff --git a/Source/WebCore/dom/DataTransfer.cpp b/Source/WebCore/dom/DataTransfer.cpp
index 0d47b73..521fa41 100644
--- a/Source/WebCore/dom/DataTransfer.cpp
+++ b/Source/WebCore/dom/DataTransfer.cpp
@@ -427,7 +427,7 @@
     PasteboardCustomData customData = downcast<StaticPasteboard>(*m_pasteboard).takeCustomData();
     if (RuntimeEnabledFeatures::sharedFeatures().customPasteboardDataEnabled()) {
         customData.setOrigin(m_originIdentifier);
-        nativePasteboard.writeCustomData(customData);
+        nativePasteboard.writeCustomData({ customData });
         return;
     }
 
diff --git a/Source/WebCore/platform/Pasteboard.h b/Source/WebCore/platform/Pasteboard.h
index cbffca2..d37c3c5 100644
--- a/Source/WebCore/platform/Pasteboard.h
+++ b/Source/WebCore/platform/Pasteboard.h
@@ -208,7 +208,7 @@
     virtual WEBCORE_EXPORT void write(const PasteboardImage&);
     virtual WEBCORE_EXPORT void write(const PasteboardWebContent&);
 
-    virtual WEBCORE_EXPORT void writeCustomData(const PasteboardCustomData&);
+    virtual WEBCORE_EXPORT void writeCustomData(const Vector<PasteboardCustomData>&);
 
     enum class FileContentState { NoFileOrImageData, InMemoryImage, MayContainFilePaths };
     virtual WEBCORE_EXPORT FileContentState fileContentState();
diff --git a/Source/WebCore/platform/PasteboardStrategy.h b/Source/WebCore/platform/PasteboardStrategy.h
index ed86085..6162942 100644
--- a/Source/WebCore/platform/PasteboardStrategy.h
+++ b/Source/WebCore/platform/PasteboardStrategy.h
@@ -75,7 +75,7 @@
     virtual int getPasteboardItemsCount(const String& pasteboardName) = 0;
 
     virtual Vector<String> typesSafeForDOMToReadAndWrite(const String& pasteboardName, const String& origin) = 0;
-    virtual long writeCustomData(const PasteboardCustomData&, const String& pasteboardName) = 0;
+    virtual long writeCustomData(const Vector<PasteboardCustomData>&, const String& pasteboardName) = 0;
 
 #if PLATFORM(GTK)
     virtual void writeToClipboard(const String& pasteboardName, const SelectionData&) = 0;
diff --git a/Source/WebCore/platform/PlatformPasteboard.h b/Source/WebCore/platform/PlatformPasteboard.h
index 70ab14e..ff034e7 100644
--- a/Source/WebCore/platform/PlatformPasteboard.h
+++ b/Source/WebCore/platform/PlatformPasteboard.h
@@ -96,7 +96,7 @@
     WEBCORE_EXPORT URL readURL(size_t index, String& title) const;
     WEBCORE_EXPORT int count() const;
     WEBCORE_EXPORT int numberOfFiles() const;
-    WEBCORE_EXPORT void write(const Vector<PasteboardCustomData>&);
+    WEBCORE_EXPORT long write(const Vector<PasteboardCustomData>&);
     WEBCORE_EXPORT long write(const PasteboardCustomData&);
     WEBCORE_EXPORT Vector<String> typesSafeForDOMToReadAndWrite(const String& origin) const;
 
diff --git a/Source/WebCore/platform/StaticPasteboard.h b/Source/WebCore/platform/StaticPasteboard.h
index a56a472..c9bff6f 100644
--- a/Source/WebCore/platform/StaticPasteboard.h
+++ b/Source/WebCore/platform/StaticPasteboard.h
@@ -63,7 +63,7 @@
     void write(const PasteboardImage&) final { }
     void write(const PasteboardWebContent&) final { }
 
-    void writeCustomData(const PasteboardCustomData&) final { }
+    void writeCustomData(const Vector<PasteboardCustomData>&) final { }
 
     Pasteboard::FileContentState fileContentState() final { return FileContentState::NoFileOrImageData; }
     bool canSmartReplace() final { return false; }
diff --git a/Source/WebCore/platform/cocoa/PasteboardCocoa.mm b/Source/WebCore/platform/cocoa/PasteboardCocoa.mm
index d0341be..166369b 100644
--- a/Source/WebCore/platform/cocoa/PasteboardCocoa.mm
+++ b/Source/WebCore/platform/cocoa/PasteboardCocoa.mm
@@ -275,9 +275,9 @@
     return *m_customDataCache; 
 }
 
-void Pasteboard::writeCustomData(const PasteboardCustomData& data)
+void Pasteboard::writeCustomData(const Vector<PasteboardCustomData>& data)
 {
-    m_changeCount = platformStrategies()->pasteboardStrategy()->writeCustomData(data, m_pasteboardName);
+    m_changeCount = platformStrategies()->pasteboardStrategy()->writeCustomData(data, name());
 }
 
 long Pasteboard::changeCount() const
diff --git a/Source/WebCore/platform/gtk/PasteboardGtk.cpp b/Source/WebCore/platform/gtk/PasteboardGtk.cpp
index 42252d3..62a772b 100644
--- a/Source/WebCore/platform/gtk/PasteboardGtk.cpp
+++ b/Source/WebCore/platform/gtk/PasteboardGtk.cpp
@@ -329,7 +329,7 @@
 {
 }
 
-void Pasteboard::writeCustomData(const PasteboardCustomData&)
+void Pasteboard::writeCustomData(const Vector<PasteboardCustomData>&)
 {
 }
 
diff --git a/Source/WebCore/platform/gtk/PlatformPasteboardGtk.cpp b/Source/WebCore/platform/gtk/PlatformPasteboardGtk.cpp
index 8143faf..f9cf601 100644
--- a/Source/WebCore/platform/gtk/PlatformPasteboardGtk.cpp
+++ b/Source/WebCore/platform/gtk/PlatformPasteboardGtk.cpp
@@ -56,4 +56,9 @@
     return 0;
 }
 
+long PlatformPasteboard::write(const Vector<PasteboardCustomData>&)
+{
+    return 0;
+}
+
 }
diff --git a/Source/WebCore/platform/ios/PlatformPasteboardIOS.mm b/Source/WebCore/platform/ios/PlatformPasteboardIOS.mm
index d163ad6..31b2070 100644
--- a/Source/WebCore/platform/ios/PlatformPasteboardIOS.mm
+++ b/Source/WebCore/platform/ios/PlatformPasteboardIOS.mm
@@ -598,7 +598,7 @@
     return representationsToRegister;
 }
 
-void PlatformPasteboard::write(const Vector<PasteboardCustomData>& itemData)
+long PlatformPasteboard::write(const Vector<PasteboardCustomData>& itemData)
 {
     auto registrationLists = adoptNS([[NSMutableArray alloc] initWithCapacity:itemData.size()]);
     for (auto& data : itemData) {
@@ -606,6 +606,7 @@
             [registrationLists addObject:itemList.get()];
     }
     registerItemsToPasteboard(registrationLists.get(), m_pasteboard.get());
+    return [m_pasteboard changeCount];
 }
 
 #else
@@ -641,8 +642,9 @@
     return { };
 }
 
-void PlatformPasteboard::write(const Vector<PasteboardCustomData>&)
+long PlatformPasteboard::write(const Vector<PasteboardCustomData>&)
 {
+    return 0;
 }
 
 #endif
@@ -743,8 +745,7 @@
 
 long PlatformPasteboard::write(const PasteboardCustomData& data)
 {
-    write(Vector<PasteboardCustomData> { data });
-    return [m_pasteboard changeCount];
+    return write(Vector<PasteboardCustomData> { data });
 }
 
 }
diff --git a/Source/WebCore/platform/libwpe/PasteboardLibWPE.cpp b/Source/WebCore/platform/libwpe/PasteboardLibWPE.cpp
index 43ba9e4..368f937 100644
--- a/Source/WebCore/platform/libwpe/PasteboardLibWPE.cpp
+++ b/Source/WebCore/platform/libwpe/PasteboardLibWPE.cpp
@@ -147,7 +147,7 @@
     writeString("text/plain;charset=utf-8", text);
 }
 
-void Pasteboard::writeCustomData(const PasteboardCustomData&)
+void Pasteboard::writeCustomData(const Vector<PasteboardCustomData>&)
 {
 }
 
diff --git a/Source/WebCore/platform/libwpe/PlatformPasteboardLibWPE.cpp b/Source/WebCore/platform/libwpe/PlatformPasteboardLibWPE.cpp
index e540c35..d5271e8 100644
--- a/Source/WebCore/platform/libwpe/PlatformPasteboardLibWPE.cpp
+++ b/Source/WebCore/platform/libwpe/PlatformPasteboardLibWPE.cpp
@@ -127,6 +127,11 @@
     return 0;
 }
 
+long PlatformPasteboard::write(const Vector<PasteboardCustomData>&)
+{
+    return 0;
+}
+
 } // namespace WebCore
 
 #endif // USE(LIBWPE)
diff --git a/Source/WebCore/platform/mac/PlatformPasteboardMac.mm b/Source/WebCore/platform/mac/PlatformPasteboardMac.mm
index 3e9f466..718126a 100644
--- a/Source/WebCore/platform/mac/PlatformPasteboardMac.mm
+++ b/Source/WebCore/platform/mac/PlatformPasteboardMac.mm
@@ -494,13 +494,17 @@
     return item;
 }
 
-void PlatformPasteboard::write(const Vector<PasteboardCustomData>& itemData)
+long PlatformPasteboard::write(const Vector<PasteboardCustomData>& itemData)
 {
+    if (itemData.size() == 1)
+        return write(itemData.first());
+
     auto platformItems = adoptNS([[NSMutableArray alloc] initWithCapacity:itemData.size()]);
     for (auto& data : itemData)
         [platformItems addObject:createPasteboardItem(data).get()];
     [m_pasteboard clearContents];
     [m_pasteboard writeObjects:platformItems.get()];
+    return [m_pasteboard changeCount];
 }
 
 PasteboardItemInfo PlatformPasteboard::informationForItemAtIndex(size_t index)
diff --git a/Source/WebCore/platform/win/PasteboardWin.cpp b/Source/WebCore/platform/win/PasteboardWin.cpp
index 1697855..d261c21 100644
--- a/Source/WebCore/platform/win/PasteboardWin.cpp
+++ b/Source/WebCore/platform/win/PasteboardWin.cpp
@@ -1081,7 +1081,7 @@
 {
 }
 
-void Pasteboard::writeCustomData(const PasteboardCustomData&)
+void Pasteboard::writeCustomData(const Vector<PasteboardCustomData>&)
 {
 }
 
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 80d2724..c04d5c3 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,23 @@
+2019-10-14  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        [Clipboard API] Refactor custom pasteboard writing codepaths to handle multiple items
+        https://bugs.webkit.org/show_bug.cgi?id=202916
+
+        Reviewed by Tim Horton.
+
+        Change more function and method signatures from `const PasteboardCustomData&` to
+        `const Vector<PasteboardCustomData>&`.
+
+        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
+        (WebKit::WebPasteboardProxy::writeCustomData):
+        * UIProcess/WebPasteboardProxy.cpp:
+        (WebKit::WebPasteboardProxy::writeCustomData):
+        * UIProcess/WebPasteboardProxy.h:
+        * UIProcess/WebPasteboardProxy.messages.in:
+        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
+        (WebKit::WebPlatformStrategies::writeCustomData):
+        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
+
 2019-10-14  Per Arne Vollan  <pvollan@apple.com>
 
         REGRESSION(251087): Several API tests are failing
diff --git a/Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm b/Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm
index 0a18174..d930228 100644
--- a/Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm
+++ b/Source/WebKit/UIProcess/Cocoa/WebPasteboardProxyCocoa.mm
@@ -175,7 +175,7 @@
     completionHandler(PlatformPasteboard(pasteboardName).typesSafeForDOMToReadAndWrite(origin));
 }
 
-void WebPasteboardProxy::writeCustomData(const WebCore::PasteboardCustomData& data, const String& pasteboardName, CompletionHandler<void(uint64_t)>&& completionHandler)
+void WebPasteboardProxy::writeCustomData(const Vector<PasteboardCustomData>& data, const String& pasteboardName, CompletionHandler<void(uint64_t)>&& completionHandler)
 {
     completionHandler(PlatformPasteboard(pasteboardName).write(data));
 }
diff --git a/Source/WebKit/UIProcess/WebPasteboardProxy.cpp b/Source/WebKit/UIProcess/WebPasteboardProxy.cpp
index 0febdc1..7e8c2e3 100644
--- a/Source/WebKit/UIProcess/WebPasteboardProxy.cpp
+++ b/Source/WebKit/UIProcess/WebPasteboardProxy.cpp
@@ -70,7 +70,7 @@
     completionHandler({ });
 }
 
-void WebPasteboardProxy::writeCustomData(const WebCore::PasteboardCustomData&, const String&, CompletionHandler<void(uint64_t)>&& completionHandler)
+void WebPasteboardProxy::writeCustomData(const Vector<PasteboardCustomData>&, const String&, CompletionHandler<void(uint64_t)>&& completionHandler)
 {
     completionHandler(0);
 }
diff --git a/Source/WebKit/UIProcess/WebPasteboardProxy.h b/Source/WebKit/UIProcess/WebPasteboardProxy.h
index ad406f4..d890e30 100644
--- a/Source/WebKit/UIProcess/WebPasteboardProxy.h
+++ b/Source/WebKit/UIProcess/WebPasteboardProxy.h
@@ -102,7 +102,7 @@
     void informationForItemAtIndex(size_t index, const String& pasteboardName, CompletionHandler<void(WebCore::PasteboardItemInfo&&)>&&);
     void allPasteboardItemInfo(const String& pasteboardName, CompletionHandler<void(Vector<WebCore::PasteboardItemInfo>&&)>&&);
 
-    void writeCustomData(const WebCore::PasteboardCustomData&, const String& pasteboardName, CompletionHandler<void(uint64_t)>&&);
+    void writeCustomData(const Vector<WebCore::PasteboardCustomData>&, const String& pasteboardName, CompletionHandler<void(uint64_t)>&&);
     void typesSafeForDOMToReadAndWrite(const String& pasteboardName, const String& origin, CompletionHandler<void(Vector<String>&&)>&&);
 
 #if PLATFORM(GTK)
diff --git a/Source/WebKit/UIProcess/WebPasteboardProxy.messages.in b/Source/WebKit/UIProcess/WebPasteboardProxy.messages.in
index 3b6625a..2e4e26e 100644
--- a/Source/WebKit/UIProcess/WebPasteboardProxy.messages.in
+++ b/Source/WebKit/UIProcess/WebPasteboardProxy.messages.in
@@ -29,7 +29,7 @@
     UpdateSupportedTypeIdentifiers(Vector<String> identifiers, String pasteboardName)
 #endif
 
-    WriteCustomData(WebCore::PasteboardCustomData data, String pasteboardName) -> (uint64_t changeCount) Synchronous
+    WriteCustomData(Vector<WebCore::PasteboardCustomData> data, String pasteboardName) -> (uint64_t changeCount) Synchronous
     TypesSafeForDOMToReadAndWrite(String pasteboardName, String origin) -> (Vector<String> types) Synchronous
     AllPasteboardItemInfo(String pasteboardName) -> (Vector<WebCore::PasteboardItemInfo> allInfo) Synchronous
     InformationForItemAtIndex(uint64_t index, String pasteboardName) -> (struct WebCore::PasteboardItemInfo info) Synchronous
diff --git a/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp b/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
index 5544a25..47930a2 100644
--- a/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
+++ b/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
@@ -318,7 +318,7 @@
     return types;
 }
 
-long WebPlatformStrategies::writeCustomData(const WebCore::PasteboardCustomData& data, const String& pasteboardName)
+long WebPlatformStrategies::writeCustomData(const Vector<PasteboardCustomData>& data, const String& pasteboardName)
 {
     uint64_t newChangeCount { 0 };
     WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebPasteboardProxy::WriteCustomData(data, pasteboardName), Messages::WebPasteboardProxy::WriteCustomData::Reply(newChangeCount), 0);
diff --git a/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.h b/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.h
index 0702359..81a7a44 100644
--- a/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.h
+++ b/Source/WebKit/WebProcess/WebCoreSupport/WebPlatformStrategies.h
@@ -88,7 +88,7 @@
     WebCore::PasteboardItemInfo informationForItemAtIndex(size_t index, const String& pasteboardName) override;
     Vector<WebCore::PasteboardItemInfo> allPasteboardItemInfo(const String& pasteboardName) override;
     Vector<String> typesSafeForDOMToReadAndWrite(const String& pasteboardName, const String& origin) override;
-    long writeCustomData(const WebCore::PasteboardCustomData&, const String&) override;
+    long writeCustomData(const Vector<WebCore::PasteboardCustomData>&, const String&) override;
 };
 
 } // namespace WebKit
diff --git a/Source/WebKitLegacy/mac/ChangeLog b/Source/WebKitLegacy/mac/ChangeLog
index badbdfe..2b9abc4 100644
--- a/Source/WebKitLegacy/mac/ChangeLog
+++ b/Source/WebKitLegacy/mac/ChangeLog
@@ -1,3 +1,16 @@
+2019-10-14  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        [Clipboard API] Refactor custom pasteboard writing codepaths to handle multiple items
+        https://bugs.webkit.org/show_bug.cgi?id=202916
+
+        Reviewed by Tim Horton.
+
+        Adjust some method signatures.
+
+        * WebCoreSupport/WebPlatformStrategies.h:
+        * WebCoreSupport/WebPlatformStrategies.mm:
+        (WebPlatformStrategies::writeCustomData):
+
 2019-10-14  David Quesada  <david_quesada@apple.com>
 
         Remove WebCore::IOSApplication::isWebApp()
diff --git a/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.h b/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.h
index 3e880ab..39511e0 100644
--- a/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.h
+++ b/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.h
@@ -70,7 +70,7 @@
     WebCore::Color color(const String& pasteboardName) override;
     URL url(const String& pasteboardName) override;
 
-    long writeCustomData(const WebCore::PasteboardCustomData&, const String& pasteboardName) override;
+    long writeCustomData(const Vector<WebCore::PasteboardCustomData>&, const String& pasteboardName) override;
     Vector<String> typesSafeForDOMToReadAndWrite(const String& pasteboardName, const String& origin) override;
 
     long addTypes(const Vector<String>& pasteboardTypes, const String& pasteboardName) override;
diff --git a/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm b/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm
index 98d324c..0f7a915 100644
--- a/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm
+++ b/Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm
@@ -168,7 +168,7 @@
     return PlatformPasteboard(pasteboardName).typesSafeForDOMToReadAndWrite(origin);
 }
 
-long WebPlatformStrategies::writeCustomData(const WebCore::PasteboardCustomData& data, const String& pasteboardName)
+long WebPlatformStrategies::writeCustomData(const Vector<WebCore::PasteboardCustomData>& data, const String& pasteboardName)
 {
     return PlatformPasteboard(pasteboardName).write(data);
 }