⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 286815 in webkit


Ignore:
Timestamp:
Dec 9, 2021, 4:23:53 PM (5 years ago)
Author:
achristensen@apple.com
Message:

Use Span for IPC::ArrayReference and DataReference
https://bugs.webkit.org/show_bug.cgi?id=233931

Reviewed by Wenson Hsieh.

Source/WebKit:

No change in behavior, just simplifying some code.

  • Platform/IPC/ArgumentCoders.h:
  • Platform/IPC/ArrayReference.h:

(): Deleted.
(IPC::ArrayReference::ArrayReference): Deleted.
(IPC::ArrayReference::isEmpty const): Deleted.
(IPC::ArrayReference::size const): Deleted.
(IPC::ArrayReference::data const): Deleted.
(IPC::ArrayReference::vector const): Deleted.

  • Platform/IPC/DataReference.h:
  • Platform/IPC/SharedBufferDataReference.cpp:

(IPC::SharedBufferDataReference::encode const):

  • Shared/API/APIData.cpp:

(API::Data::create):

  • Shared/Cocoa/SandboxExtensionCocoa.mm:

(WebKit::SandboxExtension::Handle::decode):

  • Shared/UserData.cpp:

(WebKit::UserData::decode):

  • Shared/cf/ArgumentCodersCF.cpp:

(IPC::ArgumentCoder<RetainPtr<CFURLRef>>::decode):

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView createPDFWithConfiguration:completionHandler:]):

  • UIProcess/Downloads/DownloadProxy.cpp:

(WebKit::createData):

  • UIProcess/ProvisionalPageProxy.cpp:

(WebKit::ProvisionalPageProxy::registerWebProcessAccessibilityToken):

  • UIProcess/UserContent/WebUserContentControllerProxy.cpp:

(WebKit::WebUserContentControllerProxy::didPostMessage):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::loadData):
(WebKit::WebPageProxy::loadSimulatedRequest):
(WebKit::WebPageProxy::runJavaScriptInFrameInScriptWorld):
(WebKit::WebPageProxy::wrapCryptoKey):
(WebKit::WebPageProxy::unwrapCryptoKey):

  • UIProcess/ios/WKContentView.mm:

(-[WKContentView _wk_pageCountForPrintFormatter:]):

  • UIProcess/mac/WebPageProxyMac.mm:

(WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication):

  • WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp:

(WebKit::RemoteGraphicsContextGLProxy::getShaderPrecisionFormat):

  • WebProcess/Network/WebSocketChannel.cpp:

(WebKit::WebSocketChannel::didReceiveBinaryData):

  • WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp:

(WebKit::RTCDataChannelRemoteManager::receiveData):

  • WebProcess/UserContent/WebUserContentController.cpp:
  • WebProcess/WebPage/mac/WebPageMac.mm:

(WebKit::WebPage::replaceSelectionWithPasteboardData):

Source/WTF:

  • wtf/Vector.h:

(WTF::Vector::Vector):
(WTF::Vector::span const):

Location:
trunk/Source
Files:
24 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r286813 r286815  
     12021-12-09  Alex Christensen  <achristensen@webkit.org>
     2
     3        Use Span for IPC::ArrayReference and DataReference
     4        https://bugs.webkit.org/show_bug.cgi?id=233931
     5
     6        Reviewed by Wenson Hsieh.
     7
     8        * wtf/Vector.h:
     9        (WTF::Vector::Vector):
     10        (WTF::Vector::span const):
     11
    1122021-12-09  Robert Jenner  <Jenner@apple.com>
    213
  • trunk/Source/WTF/wtf/Vector.h

    r286813 r286815  
    655655    }
    656656
     657    Vector(Span<const T> span)
     658        : Vector(span.data(), span.size()) { }
     659
    657660    Vector(std::initializer_list<T> initializerList)
    658661    {
     
    708711    size_t capacity() const { return Base::capacity(); }
    709712    bool isEmpty() const { return !size(); }
     713    Span<const T> span() const { return { data(), size() }; }
    710714
    711715    T& at(size_t i)
  • trunk/Source/WebKit/ChangeLog

    r286813 r286815  
     12021-12-09  Alex Christensen  <achristensen@webkit.org>
     2
     3        Use Span for IPC::ArrayReference and DataReference
     4        https://bugs.webkit.org/show_bug.cgi?id=233931
     5
     6        Reviewed by Wenson Hsieh.
     7
     8        No change in behavior, just simplifying some code.
     9
     10        * Platform/IPC/ArgumentCoders.h:
     11        * Platform/IPC/ArrayReference.h:
     12        (): Deleted.
     13        (IPC::ArrayReference::ArrayReference): Deleted.
     14        (IPC::ArrayReference::isEmpty const): Deleted.
     15        (IPC::ArrayReference::size const): Deleted.
     16        (IPC::ArrayReference::data const): Deleted.
     17        (IPC::ArrayReference::vector const): Deleted.
     18        * Platform/IPC/DataReference.h:
     19        * Platform/IPC/SharedBufferDataReference.cpp:
     20        (IPC::SharedBufferDataReference::encode const):
     21        * Shared/API/APIData.cpp:
     22        (API::Data::create):
     23        * Shared/Cocoa/SandboxExtensionCocoa.mm:
     24        (WebKit::SandboxExtension::Handle::decode):
     25        * Shared/UserData.cpp:
     26        (WebKit::UserData::decode):
     27        * Shared/cf/ArgumentCodersCF.cpp:
     28        (IPC::ArgumentCoder<RetainPtr<CFURLRef>>::decode):
     29        * UIProcess/API/Cocoa/WKWebView.mm:
     30        (-[WKWebView createPDFWithConfiguration:completionHandler:]):
     31        * UIProcess/Downloads/DownloadProxy.cpp:
     32        (WebKit::createData):
     33        * UIProcess/ProvisionalPageProxy.cpp:
     34        (WebKit::ProvisionalPageProxy::registerWebProcessAccessibilityToken):
     35        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
     36        (WebKit::WebUserContentControllerProxy::didPostMessage):
     37        * UIProcess/WebPageProxy.cpp:
     38        (WebKit::WebPageProxy::loadData):
     39        (WebKit::WebPageProxy::loadSimulatedRequest):
     40        (WebKit::WebPageProxy::runJavaScriptInFrameInScriptWorld):
     41        (WebKit::WebPageProxy::wrapCryptoKey):
     42        (WebKit::WebPageProxy::unwrapCryptoKey):
     43        * UIProcess/ios/WKContentView.mm:
     44        (-[WKContentView _wk_pageCountForPrintFormatter:]):
     45        * UIProcess/mac/WebPageProxyMac.mm:
     46        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication):
     47        * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp:
     48        (WebKit::RemoteGraphicsContextGLProxy::getShaderPrecisionFormat):
     49        * WebProcess/Network/WebSocketChannel.cpp:
     50        (WebKit::WebSocketChannel::didReceiveBinaryData):
     51        * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp:
     52        (WebKit::RTCDataChannelRemoteManager::receiveData):
     53        * WebProcess/UserContent/WebUserContentController.cpp:
     54        * WebProcess/WebPage/mac/WebPageMac.mm:
     55        (WebKit::WebPage::replaceSelectionWithPasteboardData):
     56
    1572021-12-09  Robert Jenner  <Jenner@apple.com>
    258
  • trunk/Source/WebKit/Platform/IPC/ArgumentCoders.h

    r284213 r286815  
    5858};
    5959
    60 template<typename T, size_t Extent> struct ArgumentCoder<ArrayReference<T, Extent>> {
    61     using ArrayReferenceType = ArrayReference<T, Extent>;
    62     template<typename Encoder>
    63     static void encode(Encoder& encoder, const ArrayReferenceType& arrayReference)
    64     {
    65         if (!Extent)
    66             return;
    67         encoder.encodeFixedLengthData(reinterpret_cast<const uint8_t*>(arrayReference.data()), arrayReference.size() * sizeof(T), alignof(T));
    68     }
    69     template<typename Decoder>
    70     static std::optional<ArrayReferenceType> decode(Decoder& decoder)
    71     {
    72         if (!Extent)
    73             return ArrayReferenceType();
    74         const uint8_t* data = decoder.decodeFixedLengthReference(Extent * sizeof(T), alignof(T));
    75         if (!data)
    76             return std::nullopt;
    77         return ArrayReferenceType(reinterpret_cast<const T*>(data), Extent);
    78     }
    79 };
    80 
    81 template<typename T> struct ArgumentCoder<ArrayReference<T, arrayReferenceDynamicExtent>> {
    82     using ArrayReferenceType = ArrayReference<T, arrayReferenceDynamicExtent>;
    83     template<typename Encoder>
    84     static void encode(Encoder& encoder, const ArrayReferenceType& arrayReference)
    85     {
    86         encoder << static_cast<uint64_t>(arrayReference.size());
    87         if (!arrayReference.size())
    88             return;
    89         encoder.encodeFixedLengthData(reinterpret_cast<const uint8_t*>(arrayReference.data()), arrayReference.size() * sizeof(T), alignof(T));
    90     }
    91     template<typename Decoder>
    92     static std::optional<ArrayReferenceType> decode(Decoder& decoder)
     60template<typename T, size_t Extent> struct ArgumentCoder<Span<T, Extent>> {
     61    template<typename Encoder>
     62    static void encode(Encoder& encoder, const Span<T, Extent>& span)
     63    {
     64        if constexpr (Extent == WTF::dynamic_extent)
     65            encoder << static_cast<uint64_t>(span.size());
     66        encoder.encodeFixedLengthData(reinterpret_cast<const uint8_t*>(span.data()), span.size() * sizeof(T), alignof(T));
     67    }
     68    template<typename Decoder>
     69    static std::optional<Span<T, Extent>> decode(Decoder& decoder)
    9370    {
    9471        std::optional<uint64_t> size;
    95         decoder >> size;
    96         if (!size)
    97             return std::nullopt;
    98         if (!*size)
    99             return ArrayReferenceType();
     72        if constexpr (Extent == WTF::dynamic_extent) {
     73            decoder >> size;
     74            if (!size)
     75                return std::nullopt;
     76            if (!*size)
     77                return Span<T, Extent>();
     78        } else {
     79            size = Extent;
     80            static_assert(Extent, "Can't decode a fixed size of 0");
     81        }
    10082
    10183        auto dataSize = CheckedSize { *size } * sizeof(T);
     
    10688        if (!data)
    10789            return std::nullopt;
    108         return ArrayReferenceType(reinterpret_cast<const T*>(data), static_cast<size_t>(*size));
     90        return Span<T, Extent>(reinterpret_cast<const T*>(data), static_cast<size_t>(*size));
    10991    }
    11092};
  • trunk/Source/WebKit/Platform/IPC/ArrayReference.h

    r278146 r286815  
    2727
    2828#include <limits>
     29#include <wtf/Span.h>
    2930#include <wtf/Vector.h>
    3031
    3132namespace IPC {
    3233
    33 inline constexpr size_t arrayReferenceDynamicExtent = std::numeric_limits<size_t>::max();
    34 
    35 template <typename T, size_t Extent = arrayReferenceDynamicExtent>
    36 class ArrayReference;
    37 
    38 template <typename T>
    39 class ArrayReference<T, arrayReferenceDynamicExtent> {
    40 public:
    41     ArrayReference() = default;
    42 
    43     ArrayReference(const T* data, size_t size)
    44         : m_data(data)
    45         , m_size(size)
    46     {
    47     }
    48 
    49     template <size_t inlineCapacity>
    50     ArrayReference(const Vector<T, inlineCapacity>& vector)
    51         : m_data(vector.data())
    52         , m_size(vector.size())
    53     {
    54     }
    55 
    56     bool isEmpty() const { return !m_size; }
    57 
    58     size_t size() const { return m_size; }
    59     const T* data() const
    60     {
    61         if (isEmpty())
    62             return nullptr;
    63         return m_data;
    64     }
    65 
    66     Vector<T> vector() const
    67     {
    68         Vector<T> result;
    69         result.append(m_data, m_size);
    70 
    71         return result;
    72     }
    73 
    74 private:
    75     const T* m_data { nullptr };
    76     size_t m_size { 0 };
    77 };
    78 
    79 template <typename T, size_t Extent>
    80 class ArrayReference {
    81 public:
    82     ArrayReference() = default;
    83 
    84     ArrayReference(const T* data, size_t size)
    85         : m_data(data)
    86     {
    87         ASSERT_UNUSED(size, size == Extent);
    88     }
    89 
    90     template <size_t inlineCapacity>
    91     ArrayReference(const Vector<T, inlineCapacity>& vector)
    92         : m_data(vector.data())
    93     {
    94         ASSERT(vector.size() == Extent);
    95     }
    96 
    97     constexpr bool isEmpty() const { return !Extent; }
    98 
    99     constexpr size_t size() const { return Extent; }
    100 
    101     const T* data() const
    102     {
    103         if (isEmpty())
    104             return nullptr;
    105         return m_data;
    106     }
    107 
    108     Vector<T> vector() const
    109     {
    110         return { m_data, Extent };
    111     }
    112 
    113 private:
    114     const T* m_data { nullptr };
    115 };
    116 
    117 template<typename T, size_t inlineCapacity>
    118 ArrayReference(const WTF::Vector<T, inlineCapacity>&) -> ArrayReference<T>;
     34template <typename T, size_t Extent = WTF::dynamic_extent> using ArrayReference = Span<const T, Extent>;
    11935
    12036} // namespace IPC
  • trunk/Source/WebKit/Platform/IPC/DataReference.h

    r270573 r286815  
    3030namespace IPC {
    3131
    32 using DataReference = ArrayReference<uint8_t, arrayReferenceDynamicExtent>;
     32using DataReference = Span<const uint8_t>;
    3333
    3434} // namespace IPC
  • trunk/Source/WebKit/Platform/IPC/SharedBufferDataReference.cpp

    r270573 r286815  
    3434void SharedBufferDataReference::encode(Encoder& encoder) const
    3535{
    36     if (m_data.isEmpty()) {
     36    if (m_data.empty()) {
    3737        SharedBufferCopy::encode(encoder);
    3838        return;
  • trunk/Source/WebKit/Shared/API/APIData.cpp

    r271378 r286815  
    3636RefPtr<Data> Data::create(const IPC::DataReference& data)
    3737{
    38     if (data.isEmpty())
     38    if (data.empty())
    3939        return nullptr;
    4040    return create(data.data(), data.size());
  • trunk/Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm

    r285130 r286815  
    168168        return std::nullopt;
    169169
    170     if (dataReference.isEmpty())
     170    if (dataReference.empty())
    171171        return {{ }};
    172172
  • trunk/Source/WebKit/Shared/UserData.cpp

    r278253 r286815  
    441441            return false;
    442442
    443         result = API::SerializedScriptValue::adopt(dataReference.vector());
     443        result = API::SerializedScriptValue::adopt({ dataReference });
    444444        break;
    445445    }
  • trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.cpp

    r285588 r286815  
    673673    // FIXME: Move this to ArgumentCodersCFMac.mm and change this file back to be C++
    674674    // instead of Objective-C++.
    675     if (urlBytes->isEmpty()) {
     675    if (urlBytes->empty()) {
    676676        // CFURL can't hold an empty URL, unlike NSURL.
    677677        // FIXME: This discards base URL, which seems incorrect.
     
    686686}
    687687
    688 enum class CGColorSpaceEncodingScheme { Name, PropertyList };
     688enum class CGColorSpaceEncodingScheme : bool { Name, PropertyList };
    689689
    690690template<typename Encoder>
     
    901901};
    902902
    903 template<> struct EnumTraits<IPC::CGColorSpaceEncodingScheme> {
    904     using values = EnumValues<
    905         IPC::CGColorSpaceEncodingScheme,
    906         IPC::CGColorSpaceEncodingScheme::Name,
    907         IPC::CGColorSpaceEncodingScheme::PropertyList
    908     >;
    909 };
    910 
    911903} // namespace WTF
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r286751 r286815  
    16411641
    16421642    _page->drawToPDF(frameID, floatRect, [handler = makeBlockPtr(completionHandler)](const IPC::DataReference& pdfData) {
    1643         if (pdfData.isEmpty()) {
     1643        if (pdfData.empty()) {
    16441644            handler(nil, createNSError(WKErrorUnknown).get());
    16451645            return;
  • trunk/Source/WebKit/UIProcess/Downloads/DownloadProxy.cpp

    r284142 r286815  
    6868static RefPtr<API::Data> createData(const IPC::DataReference& data)
    6969{
    70     if (data.isEmpty())
     70    if (data.empty())
    7171        return nullptr;
    7272    return API::Data::create(data.data(), data.size());
  • trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp

    r286574 r286815  
    440440void ProvisionalPageProxy::registerWebProcessAccessibilityToken(const IPC::DataReference& data)
    441441{
    442     m_accessibilityToken = data.vector();
     442    m_accessibilityToken = Vector(data);
    443443}
    444444#endif
  • trunk/Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp

    r286084 r286815  
    344344
    345345    if (!handler->client().supportsAsyncReply()) {
    346         handler->client().didPostMessage(*page, WTFMove(frameInfoData), handler->world(),  WebCore::SerializedScriptValue::adopt(dataReference.vector()));
     346        handler->client().didPostMessage(*page, WTFMove(frameInfoData), handler->world(),  WebCore::SerializedScriptValue::adopt({ dataReference }));
    347347        reply({ }, { });
    348348        return;
    349349    }
    350350
    351     handler->client().didPostMessageWithAsyncReply(*page, WTFMove(frameInfoData), handler->world(),  WebCore::SerializedScriptValue::adopt(dataReference.vector()), [reply = WTFMove(reply)](API::SerializedScriptValue* value, const String& errorMessage) mutable {
     351    handler->client().didPostMessageWithAsyncReply(*page, WTFMove(frameInfoData), handler->world(),  WebCore::SerializedScriptValue::adopt({ dataReference }), [reply = WTFMove(reply)](API::SerializedScriptValue* value, const String& errorMessage) mutable {
    352352        if (errorMessage.isNull()) {
    353353            ASSERT(value);
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r286762 r286815  
    15231523        launchProcess({ }, ProcessLaunchReason::InitialProcess);
    15241524
    1525     auto navigation = m_navigationState->createLoadDataNavigation(makeUnique<API::SubstituteData>(data.vector(), MIMEType, encoding, baseURL, userData));
     1525    auto navigation = m_navigationState->createLoadDataNavigation(makeUnique<API::SubstituteData>(Vector(data), MIMEType, encoding, baseURL, userData));
    15261526
    15271527    if (shouldForceForegroundPriorityForClientNavigation())
     
    15841584        launchProcess(RegistrableDomain { simulatedRequest.url() }, ProcessLaunchReason::InitialProcess);
    15851585
    1586     auto navigation = m_navigationState->createSimulatedLoadWithDataNavigation(ResourceRequest(simulatedRequest), makeUnique<API::SubstituteData>(data.vector(), ResourceResponse(simulatedResponse), WebCore::SubstituteData::SessionHistoryVisibility::Visible), m_backForwardList->currentItem());
     1586    auto navigation = m_navigationState->createSimulatedLoadWithDataNavigation(ResourceRequest(simulatedRequest), makeUnique<API::SubstituteData>(Vector(data), ResourceResponse(simulatedResponse), WebCore::SubstituteData::SessionHistoryVisibility::Visible), m_backForwardList->currentItem());
    15871587
    15881588    if (shouldForceForegroundPriorityForClientNavigation())
     
    43404340        if (details)
    43414341            return callbackFunction(makeUnexpected(WTFMove(*details)));
    4342         if (dataReference.isEmpty())
     4342        if (dataReference.empty())
    43434343            return callbackFunction({ nullptr });
    43444344        Vector<uint8_t> data;
     
    92519251
    92529252    if (auto keyData = m_navigationClient->webCryptoMasterKey(*this))
    9253         masterKey = keyData->dataReference().vector();
     9253        masterKey = Vector(keyData->dataReference());
    92549254
    92559255    Vector<uint8_t> wrappedKey;
     
    92659265
    92669266    if (auto keyData = m_navigationClient->webCryptoMasterKey(*this))
    9267         masterKey = keyData->dataReference().vector();
     9267        masterKey = Vector(keyData->dataReference());
    92689268
    92699269    Vector<uint8_t> key;
  • trunk/Source/WebKit/UIProcess/ios/WKContentView.mm

    r286588 r286815  
    900900    auto pair = _page->computePagesForPrintingAndDrawToPDF(frameID, printInfo, [retainedSelf](const IPC::DataReference& pdfData) {
    901901        retainedSelf->_pdfPrintCallbackID = 0;
    902         if (pdfData.isEmpty())
     902        if (pdfData.empty())
    903903            return;
    904904
  • trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm

    r286762 r286815  
    461461void WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication(const String& suggestedFilename, FrameInfoData&& frameInfo, const IPC::DataReference& data, const String& pdfUUID)
    462462{
    463     if (data.isEmpty()) {
     463    if (data.empty()) {
    464464        WTFLogAlways("Cannot save empty PDF file to the temporary directory.");
    465465        return;
  • trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp

    r278253 r286815  
    687687void RemoteGraphicsContextGLProxy::getShaderPrecisionFormat(GCGLenum shaderType, GCGLenum precisionType, GCGLSpan<GCGLint, 2> range, GCGLint* precision)
    688688{
    689     IPC::ArrayReference<int32_t, 2> rangeReply;
     689    IPC::ArrayReference<int32_t, 2> rangeReply { { } };
    690690    int32_t precisionReply = { };
    691691    if (!isContextLost()) {
  • trunk/Source/WebKit/WebProcess/Network/WebSocketChannel.cpp

    r284472 r286815  
    295295    m_inspector.didReceiveWebSocketFrame(m_document.get(), createWebSocketFrameForWebInspector(data.data(), data.size(), WebSocketFrame::OpCode::OpCodeBinary));
    296296
    297     m_client->didReceiveBinaryData(data.vector());
     297    m_client->didReceiveBinaryData({ data });
    298298}
    299299
  • trunk/Source/WebKit/WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp

    r284142 r286815  
    147147    String text;
    148148    if (isRaw)
    149         buffer = data.vector();
     149        buffer = Vector(data);
    150150    else
    151151        text = String::fromUTF8(data.data(), data.size());
  • trunk/Source/WebKit/WebProcess/UserContent/WebUserContentController.cpp

    r286084 r286815  
    275275            }
    276276
    277             auto value = SerializedScriptValue::createFromWireBytes(resultValue.vector());
     277            auto value = SerializedScriptValue::createFromWireBytes({ resultValue });
    278278            completionHandler(value.ptr(), { });
    279279        };
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r286705 r286815  
    47954795
    47964796    RefPtr<Icon> icon;
    4797     if (!iconData.isEmpty()) {
     4797    if (!iconData.empty()) {
    47984798        RetainPtr<CFDataRef> dataRef = adoptCF(CFDataCreate(nullptr, iconData.data(), iconData.size()));
    47994799        RetainPtr<CGDataProviderRef> imageProviderRef = adoptCF(CGDataProviderCreateWithCFData(dataRef.get()));
  • trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm

    r286812 r286815  
    510510{
    511511    for (auto& type : types)
    512         WebPasteboardOverrides::sharedPasteboardOverrides().addOverride(replaceSelectionPasteboardName(), type, data.vector());
     512        WebPasteboardOverrides::sharedPasteboardOverrides().addOverride(replaceSelectionPasteboardName(), type, { data });
    513513
    514514    readSelectionFromPasteboard(replaceSelectionPasteboardName(), [](bool) { });
Note: See TracChangeset for help on using the changeset viewer.