WebKit Bugzilla
Attachment 362072 Details for
Bug 194679
: IPC code should support messages with both Delayed and WantsConnection attributes
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-194679-20190214153458.patch (text/plain), 7.57 KB, created by
Alex Christensen
on 2019-02-14 15:34:59 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Alex Christensen
Created:
2019-02-14 15:34:59 PST
Size:
7.57 KB
patch
obsolete
>Index: Source/WebKit/ChangeLog >=================================================================== >--- Source/WebKit/ChangeLog (revision 241566) >+++ Source/WebKit/ChangeLog (working copy) >@@ -1,3 +1,20 @@ >+2019-02-14 Alex Christensen <achristensen@webkit.org> >+ >+ IPC code should support messages with both Delayed and WantsConnection attributes >+ https://bugs.webkit.org/show_bug.cgi?id=194679 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * Platform/IPC/HandleMessage.h: >+ (IPC::callMemberFunctionImpl): >+ (IPC::callMemberFunction): >+ (IPC::handleMessageDelayedWantsConnection): >+ * Scripts/webkit/messages.py: >+ * UIProcess/WebStorage/StorageManager.cpp: >+ (WebKit::StorageManager::getValues): >+ * UIProcess/WebStorage/StorageManager.h: >+ * UIProcess/WebStorage/StorageManager.messages.in: >+ > 2019-02-14 Youenn Fablet <youenn@apple.com> > > ASSERTION FAILED: m_caches.isEmpty() || !m_pendingInitializationCallbacks.isEmpty() in WebKit::CacheStorage::Caches::clearMemoryRepresentation() >Index: Source/WebKit/Platform/IPC/HandleMessage.h >=================================================================== >--- Source/WebKit/Platform/IPC/HandleMessage.h (revision 241441) >+++ Source/WebKit/Platform/IPC/HandleMessage.h (working copy) >@@ -75,6 +75,20 @@ void callMemberFunction(ArgsTuple&& args > callMemberFunctionImpl(object, function, WTFMove(completionHandler), std::forward<ArgsTuple>(args), ArgsIndicies()); > } > >+// Dispatch functions with connection parameter with delayed reply arguments. >+ >+template <typename C, typename MF, typename CH, typename ArgsTuple, size_t... ArgsIndex> >+void callMemberFunctionImpl(Connection& connection, C* object, MF function, CompletionHandler<CH>&& completionHandler, ArgsTuple&& args, std::index_sequence<ArgsIndex...>) >+{ >+ (object->*function)(connection, std::get<ArgsIndex>(std::forward<ArgsTuple>(args))..., WTFMove(completionHandler)); >+} >+ >+template<typename C, typename MF, typename CH, typename ArgsTuple, typename ArgsIndicies = std::make_index_sequence<std::tuple_size<ArgsTuple>::value>> >+void callMemberFunction(Connection& connection, ArgsTuple&& args, CompletionHandler<CH>&& completionHandler, C* object, MF function) >+{ >+ callMemberFunctionImpl(connection, object, function, WTFMove(completionHandler), std::forward<ArgsTuple>(args), ArgsIndicies()); >+} >+ > // Dispatch functions with connection parameter with no reply arguments. > > template <typename C, typename MF, typename ArgsTuple, size_t... ArgsIndex> >@@ -188,6 +202,21 @@ void handleMessageDelayed(Connection& co > } > > template<typename T, typename C, typename MF> >+void handleMessageDelayedWantsConnection(Connection& connection, Decoder& decoder, std::unique_ptr<Encoder>& replyEncoder, C* object, MF function) >+{ >+ typename CodingType<typename T::Arguments>::Type arguments; >+ if (!decoder.decode(arguments)) { >+ ASSERT(decoder.isInvalid()); >+ return; >+ } >+ >+ typename T::DelayedReply completionHandler = [replyEncoder = WTFMove(replyEncoder), connection = makeRef(connection)] (auto&&... args) mutable { >+ T::send(WTFMove(replyEncoder), WTFMove(connection), args...); >+ }; >+ callMemberFunction(connection, WTFMove(arguments), WTFMove(completionHandler), object, function); >+} >+ >+template<typename T, typename C, typename MF> > void handleMessageAsync(Connection& connection, Decoder& decoder, C* object, MF function) > { > Optional<uint64_t> listenerID; >Index: Source/WebKit/Scripts/webkit/messages.py >=================================================================== >--- Source/WebKit/Scripts/webkit/messages.py (revision 241441) >+++ Source/WebKit/Scripts/webkit/messages.py (working copy) >@@ -307,6 +307,8 @@ def sync_message_statement(receiver, mes > dispatch_function = 'handleMessage' > if message.has_attribute(DELAYED_ATTRIBUTE): > dispatch_function += 'Delayed' >+ if message.has_attribute(WANTS_CONNECTION_ATTRIBUTE): >+ dispatch_function += 'WantsConnection' > if message.has_attribute(ASYNC_ATTRIBUTE): > dispatch_function += 'Async' > if message.has_attribute(LEGACY_SYNC_ATTRIBUTE): >Index: Source/WebKit/UIProcess/WebStorage/StorageManager.cpp >=================================================================== >--- Source/WebKit/UIProcess/WebStorage/StorageManager.cpp (revision 241441) >+++ Source/WebKit/UIProcess/WebStorage/StorageManager.cpp (working copy) >@@ -785,15 +785,15 @@ void StorageManager::destroyStorageMap(I > m_storageAreasByConnection.remove(connectionAndStorageMapIDPair); > } > >-void StorageManager::getValues(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageMapSeed, HashMap<String, String>& values) >+void StorageManager::getValues(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageMapSeed, CompletionHandler<void(const HashMap<String, String>&)>&& completionHandler) > { > StorageArea* storageArea = findStorageArea(connection, storageMapID); > if (!storageArea) { > // This is a session storage area for a page that has already been closed. Ignore it. >- return; >+ return completionHandler({ }); > } > >- values = storageArea->items(); >+ completionHandler(storageArea->items()); > connection.send(Messages::StorageAreaMap::DidGetValues(storageMapSeed), storageMapID); > } > >Index: Source/WebKit/UIProcess/WebStorage/StorageManager.h >=================================================================== >--- Source/WebKit/UIProcess/WebStorage/StorageManager.h (revision 241441) >+++ Source/WebKit/UIProcess/WebStorage/StorageManager.h (working copy) >@@ -81,7 +81,7 @@ private: > void createSessionStorageMap(IPC::Connection&, uint64_t storageMapID, uint64_t storageNamespaceID, WebCore::SecurityOriginData&&); > void destroyStorageMap(IPC::Connection&, uint64_t storageMapID); > >- void getValues(IPC::Connection&, uint64_t storageMapID, uint64_t storageMapSeed, HashMap<String, String>& values); >+ void getValues(IPC::Connection&, uint64_t storageMapID, uint64_t storageMapSeed, CompletionHandler<void(const HashMap<String, String>&)>&&); > void setItem(IPC::Connection&, uint64_t storageAreaID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, const String& key, const String& value, const String& urlString); > void removeItem(IPC::Connection&, uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, const String& key, const String& urlString); > void clear(IPC::Connection&, uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, const String& urlString); >Index: Source/WebKit/UIProcess/WebStorage/StorageManager.messages.in >=================================================================== >--- Source/WebKit/UIProcess/WebStorage/StorageManager.messages.in (revision 241441) >+++ Source/WebKit/UIProcess/WebStorage/StorageManager.messages.in (working copy) >@@ -26,7 +26,7 @@ messages -> StorageManager { > CreateSessionStorageMap(uint64_t storageMapID, uint64_t storageNamespaceID, struct WebCore::SecurityOriginData securityOriginData) WantsConnection > DestroyStorageMap(uint64_t storageMapID) WantsConnection > >- GetValues(uint64_t storageMapID, uint64_t storageMapSeed) -> (HashMap<String, String> values) LegacySync WantsConnection >+ GetValues(uint64_t storageMapID, uint64_t storageMapSeed) -> (HashMap<String, String> values) Delayed WantsConnection > > SetItem(uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, String key, String value, String urlString) WantsConnection > RemoveItem(uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, String key, String urlString) WantsConnection
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
ggaren
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194679
: 362072