Changeset 286815 in webkit
- Timestamp:
- Dec 9, 2021, 4:23:53 PM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 24 edited
-
WTF/ChangeLog (modified) (1 diff)
-
WTF/wtf/Vector.h (modified) (2 diffs)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/Platform/IPC/ArgumentCoders.h (modified) (2 diffs)
-
WebKit/Platform/IPC/ArrayReference.h (modified) (1 diff)
-
WebKit/Platform/IPC/DataReference.h (modified) (1 diff)
-
WebKit/Platform/IPC/SharedBufferDataReference.cpp (modified) (1 diff)
-
WebKit/Shared/API/APIData.cpp (modified) (1 diff)
-
WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm (modified) (1 diff)
-
WebKit/Shared/UserData.cpp (modified) (1 diff)
-
WebKit/Shared/cf/ArgumentCodersCF.cpp (modified) (3 diffs)
-
WebKit/UIProcess/API/Cocoa/WKWebView.mm (modified) (1 diff)
-
WebKit/UIProcess/Downloads/DownloadProxy.cpp (modified) (1 diff)
-
WebKit/UIProcess/ProvisionalPageProxy.cpp (modified) (1 diff)
-
WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp (modified) (1 diff)
-
WebKit/UIProcess/WebPageProxy.cpp (modified) (5 diffs)
-
WebKit/UIProcess/ios/WKContentView.mm (modified) (1 diff)
-
WebKit/UIProcess/mac/WebPageProxyMac.mm (modified) (1 diff)
-
WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp (modified) (1 diff)
-
WebKit/WebProcess/Network/WebSocketChannel.cpp (modified) (1 diff)
-
WebKit/WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp (modified) (1 diff)
-
WebKit/WebProcess/UserContent/WebUserContentController.cpp (modified) (1 diff)
-
WebKit/WebProcess/WebPage/WebPage.cpp (modified) (1 diff)
-
WebKit/WebProcess/WebPage/mac/WebPageMac.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r286813 r286815 1 2021-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 1 12 2021-12-09 Robert Jenner <Jenner@apple.com> 2 13 -
trunk/Source/WTF/wtf/Vector.h
r286813 r286815 655 655 } 656 656 657 Vector(Span<const T> span) 658 : Vector(span.data(), span.size()) { } 659 657 660 Vector(std::initializer_list<T> initializerList) 658 661 { … … 708 711 size_t capacity() const { return Base::capacity(); } 709 712 bool isEmpty() const { return !size(); } 713 Span<const T> span() const { return { data(), size() }; } 710 714 711 715 T& at(size_t i) -
trunk/Source/WebKit/ChangeLog
r286813 r286815 1 2021-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 1 57 2021-12-09 Robert Jenner <Jenner@apple.com> 2 58 -
trunk/Source/WebKit/Platform/IPC/ArgumentCoders.h
r284213 r286815 58 58 }; 59 59 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) 60 template<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) 93 70 { 94 71 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 } 100 82 101 83 auto dataSize = CheckedSize { *size } * sizeof(T); … … 106 88 if (!data) 107 89 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)); 109 91 } 110 92 }; -
trunk/Source/WebKit/Platform/IPC/ArrayReference.h
r278146 r286815 27 27 28 28 #include <limits> 29 #include <wtf/Span.h> 29 30 #include <wtf/Vector.h> 30 31 31 32 namespace IPC { 32 33 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>; 34 template <typename T, size_t Extent = WTF::dynamic_extent> using ArrayReference = Span<const T, Extent>; 119 35 120 36 } // namespace IPC -
trunk/Source/WebKit/Platform/IPC/DataReference.h
r270573 r286815 30 30 namespace IPC { 31 31 32 using DataReference = ArrayReference<uint8_t, arrayReferenceDynamicExtent>;32 using DataReference = Span<const uint8_t>; 33 33 34 34 } // namespace IPC -
trunk/Source/WebKit/Platform/IPC/SharedBufferDataReference.cpp
r270573 r286815 34 34 void SharedBufferDataReference::encode(Encoder& encoder) const 35 35 { 36 if (m_data. isEmpty()) {36 if (m_data.empty()) { 37 37 SharedBufferCopy::encode(encoder); 38 38 return; -
trunk/Source/WebKit/Shared/API/APIData.cpp
r271378 r286815 36 36 RefPtr<Data> Data::create(const IPC::DataReference& data) 37 37 { 38 if (data. isEmpty())38 if (data.empty()) 39 39 return nullptr; 40 40 return create(data.data(), data.size()); -
trunk/Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm
r285130 r286815 168 168 return std::nullopt; 169 169 170 if (dataReference. isEmpty())170 if (dataReference.empty()) 171 171 return {{ }}; 172 172 -
trunk/Source/WebKit/Shared/UserData.cpp
r278253 r286815 441 441 return false; 442 442 443 result = API::SerializedScriptValue::adopt( dataReference.vector());443 result = API::SerializedScriptValue::adopt({ dataReference }); 444 444 break; 445 445 } -
trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.cpp
r285588 r286815 673 673 // FIXME: Move this to ArgumentCodersCFMac.mm and change this file back to be C++ 674 674 // instead of Objective-C++. 675 if (urlBytes-> isEmpty()) {675 if (urlBytes->empty()) { 676 676 // CFURL can't hold an empty URL, unlike NSURL. 677 677 // FIXME: This discards base URL, which seems incorrect. … … 686 686 } 687 687 688 enum class CGColorSpaceEncodingScheme { Name, PropertyList };688 enum class CGColorSpaceEncodingScheme : bool { Name, PropertyList }; 689 689 690 690 template<typename Encoder> … … 901 901 }; 902 902 903 template<> struct EnumTraits<IPC::CGColorSpaceEncodingScheme> {904 using values = EnumValues<905 IPC::CGColorSpaceEncodingScheme,906 IPC::CGColorSpaceEncodingScheme::Name,907 IPC::CGColorSpaceEncodingScheme::PropertyList908 >;909 };910 911 903 } // namespace WTF -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
r286751 r286815 1641 1641 1642 1642 _page->drawToPDF(frameID, floatRect, [handler = makeBlockPtr(completionHandler)](const IPC::DataReference& pdfData) { 1643 if (pdfData. isEmpty()) {1643 if (pdfData.empty()) { 1644 1644 handler(nil, createNSError(WKErrorUnknown).get()); 1645 1645 return; -
trunk/Source/WebKit/UIProcess/Downloads/DownloadProxy.cpp
r284142 r286815 68 68 static RefPtr<API::Data> createData(const IPC::DataReference& data) 69 69 { 70 if (data. isEmpty())70 if (data.empty()) 71 71 return nullptr; 72 72 return API::Data::create(data.data(), data.size()); -
trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp
r286574 r286815 440 440 void ProvisionalPageProxy::registerWebProcessAccessibilityToken(const IPC::DataReference& data) 441 441 { 442 m_accessibilityToken = data.vector();442 m_accessibilityToken = Vector(data); 443 443 } 444 444 #endif -
trunk/Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp
r286084 r286815 344 344 345 345 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 })); 347 347 reply({ }, { }); 348 348 return; 349 349 } 350 350 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 { 352 352 if (errorMessage.isNull()) { 353 353 ASSERT(value); -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r286762 r286815 1523 1523 launchProcess({ }, ProcessLaunchReason::InitialProcess); 1524 1524 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)); 1526 1526 1527 1527 if (shouldForceForegroundPriorityForClientNavigation()) … … 1584 1584 launchProcess(RegistrableDomain { simulatedRequest.url() }, ProcessLaunchReason::InitialProcess); 1585 1585 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()); 1587 1587 1588 1588 if (shouldForceForegroundPriorityForClientNavigation()) … … 4340 4340 if (details) 4341 4341 return callbackFunction(makeUnexpected(WTFMove(*details))); 4342 if (dataReference. isEmpty())4342 if (dataReference.empty()) 4343 4343 return callbackFunction({ nullptr }); 4344 4344 Vector<uint8_t> data; … … 9251 9251 9252 9252 if (auto keyData = m_navigationClient->webCryptoMasterKey(*this)) 9253 masterKey = keyData->dataReference().vector();9253 masterKey = Vector(keyData->dataReference()); 9254 9254 9255 9255 Vector<uint8_t> wrappedKey; … … 9265 9265 9266 9266 if (auto keyData = m_navigationClient->webCryptoMasterKey(*this)) 9267 masterKey = keyData->dataReference().vector();9267 masterKey = Vector(keyData->dataReference()); 9268 9268 9269 9269 Vector<uint8_t> key; -
trunk/Source/WebKit/UIProcess/ios/WKContentView.mm
r286588 r286815 900 900 auto pair = _page->computePagesForPrintingAndDrawToPDF(frameID, printInfo, [retainedSelf](const IPC::DataReference& pdfData) { 901 901 retainedSelf->_pdfPrintCallbackID = 0; 902 if (pdfData. isEmpty())902 if (pdfData.empty()) 903 903 return; 904 904 -
trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm
r286762 r286815 461 461 void WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication(const String& suggestedFilename, FrameInfoData&& frameInfo, const IPC::DataReference& data, const String& pdfUUID) 462 462 { 463 if (data. isEmpty()) {463 if (data.empty()) { 464 464 WTFLogAlways("Cannot save empty PDF file to the temporary directory."); 465 465 return; -
trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp
r278253 r286815 687 687 void RemoteGraphicsContextGLProxy::getShaderPrecisionFormat(GCGLenum shaderType, GCGLenum precisionType, GCGLSpan<GCGLint, 2> range, GCGLint* precision) 688 688 { 689 IPC::ArrayReference<int32_t, 2> rangeReply ;689 IPC::ArrayReference<int32_t, 2> rangeReply { { } }; 690 690 int32_t precisionReply = { }; 691 691 if (!isContextLost()) { -
trunk/Source/WebKit/WebProcess/Network/WebSocketChannel.cpp
r284472 r286815 295 295 m_inspector.didReceiveWebSocketFrame(m_document.get(), createWebSocketFrameForWebInspector(data.data(), data.size(), WebSocketFrame::OpCode::OpCodeBinary)); 296 296 297 m_client->didReceiveBinaryData( data.vector());297 m_client->didReceiveBinaryData({ data }); 298 298 } 299 299 -
trunk/Source/WebKit/WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp
r284142 r286815 147 147 String text; 148 148 if (isRaw) 149 buffer = data.vector();149 buffer = Vector(data); 150 150 else 151 151 text = String::fromUTF8(data.data(), data.size()); -
trunk/Source/WebKit/WebProcess/UserContent/WebUserContentController.cpp
r286084 r286815 275 275 } 276 276 277 auto value = SerializedScriptValue::createFromWireBytes( resultValue.vector());277 auto value = SerializedScriptValue::createFromWireBytes({ resultValue }); 278 278 completionHandler(value.ptr(), { }); 279 279 }; -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r286705 r286815 4795 4795 4796 4796 RefPtr<Icon> icon; 4797 if (!iconData. isEmpty()) {4797 if (!iconData.empty()) { 4798 4798 RetainPtr<CFDataRef> dataRef = adoptCF(CFDataCreate(nullptr, iconData.data(), iconData.size())); 4799 4799 RetainPtr<CGDataProviderRef> imageProviderRef = adoptCF(CGDataProviderCreateWithCFData(dataRef.get())); -
trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm
r286812 r286815 510 510 { 511 511 for (auto& type : types) 512 WebPasteboardOverrides::sharedPasteboardOverrides().addOverride(replaceSelectionPasteboardName(), type, data.vector());512 WebPasteboardOverrides::sharedPasteboardOverrides().addOverride(replaceSelectionPasteboardName(), type, { data }); 513 513 514 514 readSelectionFromPasteboard(replaceSelectionPasteboardName(), [](bool) { });
Note:
See TracChangeset
for help on using the changeset viewer.