Diff
Modified: trunk/Source/WebKit/ChangeLog (283219 => 283220)
--- trunk/Source/WebKit/ChangeLog 2021-09-29 15:38:11 UTC (rev 283219)
+++ trunk/Source/WebKit/ChangeLog 2021-09-29 15:39:26 UTC (rev 283220)
@@ -1,3 +1,32 @@
+2021-09-29 Devin Rousso <[email protected]>
+
+ Add support for sending Expected<void, E> in IPC messages
+ https://bugs.webkit.org/show_bug.cgi?id=230907
+
+ Reviewed by Chris Dumez.
+
+ * Platform/IPC/ArgumentCoders.h:
+
+ * WebProcess/Inspector/WebInspectorUIExtensionController.messages.in:
+ * WebProcess/Inspector/WebInspectorUIExtensionController.h:
+ * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
+ (WebKit::WebInspectorUIExtensionController::registerExtension):
+ (WebKit::WebInspectorUIExtensionController::unregisterExtension):
+ (WebKit::WebInspectorUIExtensionController::showExtensionTab):
+ * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h:
+ * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
+ (WebKit::WebInspectorUIExtensionControllerProxy::registerExtension):
+ (WebKit::WebInspectorUIExtensionControllerProxy::unregisterExtension):
+ (WebKit::WebInspectorUIExtensionControllerProxy::showExtensionTab):
+ * UIProcess/API/Cocoa/_WKInspector.mm:
+ (-[_WKInspector unregisterExtension:completionHandler:]):
+ (-[_WKInspector showExtensionTabWithIdentifier:completionHandler:]):
+ * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
+ (-[_WKRemoteWebInspectorViewController unregisterExtension:completionHandler:]):
+ (-[_WKRemoteWebInspectorViewController showExtensionTabWithIdentifier:completionHandler:]):
+ Replace `Expected<bool, ...>` with `Expected<void, ...>` now that it can be sent over IPC.
+ No change in functionality as the `bool` was never actually used (it was a hardcoded `true`).
+
2021-09-28 Simon Fraser <[email protected]>
Crash in WebKit::DisplayLink::displayLinkCallback()
Modified: trunk/Source/WebKit/Platform/IPC/ArgumentCoders.h (283219 => 283220)
--- trunk/Source/WebKit/Platform/IPC/ArgumentCoders.h 2021-09-29 15:38:11 UTC (rev 283219)
+++ trunk/Source/WebKit/Platform/IPC/ArgumentCoders.h 2021-09-29 15:39:26 UTC (rev 283220)
@@ -30,6 +30,7 @@
#include <utility>
#include <wtf/Box.h>
#include <wtf/CheckedArithmetic.h>
+#include <wtf/Expected.h>
#include <wtf/Forward.h>
#include <wtf/MonotonicTime.h>
#include <wtf/OptionSet.h>
@@ -671,6 +672,36 @@
}
};
+template<typename ErrorType> struct ArgumentCoder<Expected<void, ErrorType>> {
+ template<typename Encoder> static void encode(Encoder& encoder, const Expected<void, ErrorType>& expected)
+ {
+ if (!expected.has_value()) {
+ encoder << false;
+ encoder << expected.error();
+ return;
+ }
+
+ encoder << true;
+ }
+
+ template<typename Decoder> static std::optional<Expected<void, ErrorType>> decode(Decoder& decoder)
+ {
+ std::optional<bool> hasValue;
+ decoder >> hasValue;
+ if (!hasValue)
+ return std::nullopt;
+
+ if (*hasValue)
+ return {{ }};
+
+ std::optional<ErrorType> error;
+ decoder >> error;
+ if (!error)
+ return std::nullopt;
+ return { makeUnexpected(WTFMove(*error)) };
+ }
+};
+
template<size_t index, typename... Types>
struct VariantCoder {
static void encode(Encoder& encoder, const WTF::Variant<Types...>& variant, unsigned i)
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspector.mm (283219 => 283220)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspector.mm 2021-09-29 15:38:11 UTC (rev 283219)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspector.mm 2021-09-29 15:39:26 UTC (rev 283220)
@@ -257,7 +257,7 @@
return;
}
- _inspector->extensionController()->unregisterExtension(extension.extensionID, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<bool, Inspector::ExtensionError> result) mutable {
+ _inspector->extensionController()->unregisterExtension(extension.extensionID, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<void, Inspector::ExtensionError> result) mutable {
if (!result) {
capturedBlock([NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:@{ NSLocalizedFailureReasonErrorKey: Inspector::extensionErrorToString(result.error())}]);
return;
@@ -279,7 +279,7 @@
return;
}
- _inspector->extensionController()->showExtensionTab(extensionTabIdentifier, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<bool, Inspector::ExtensionError>&& result) mutable {
+ _inspector->extensionController()->showExtensionTab(extensionTabIdentifier, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<void, Inspector::ExtensionError>&& result) mutable {
if (!result) {
capturedBlock([NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:@{ NSLocalizedFailureReasonErrorKey: Inspector::extensionErrorToString(result.error())}]);
return;
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm (283219 => 283220)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm 2021-09-29 15:38:11 UTC (rev 283219)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm 2021-09-29 15:39:26 UTC (rev 283220)
@@ -194,7 +194,7 @@
completionHandler([NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:@{ NSLocalizedFailureReasonErrorKey: Inspector::extensionErrorToString(Inspector::ExtensionError::InvalidRequest) }]);
return;
}
- m_remoteInspectorProxy->extensionController()->unregisterExtension(extension.extensionID, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<bool, Inspector::ExtensionError> result) mutable {
+ m_remoteInspectorProxy->extensionController()->unregisterExtension(extension.extensionID, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<void, Inspector::ExtensionError> result) mutable {
if (!result) {
capturedBlock([NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:@{ NSLocalizedFailureReasonErrorKey: Inspector::extensionErrorToString(result.error()) }]);
return;
@@ -226,7 +226,7 @@
return;
}
- m_remoteInspectorProxy->extensionController()->showExtensionTab(extensionTabIdentifier, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<bool, Inspector::ExtensionError>&& result) mutable {
+ m_remoteInspectorProxy->extensionController()->showExtensionTab(extensionTabIdentifier, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<void, Inspector::ExtensionError>&& result) mutable {
if (!result) {
capturedBlock([NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:@{ NSLocalizedFailureReasonErrorKey: Inspector::extensionErrorToString(result.error())}]);
return;
Modified: trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp (283219 => 283220)
--- trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp 2021-09-29 15:38:11 UTC (rev 283219)
+++ trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp 2021-09-29 15:39:26 UTC (rev 283220)
@@ -97,7 +97,7 @@
return;
}
- weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::RegisterExtension { extensionID, displayName }, [strongThis = Ref { *weakThis.get() }, extensionID, completionHandler = WTFMove(completionHandler)](Expected<bool, Inspector::ExtensionError> result) mutable {
+ weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::RegisterExtension { extensionID, displayName }, [strongThis = Ref { *weakThis.get() }, extensionID, completionHandler = WTFMove(completionHandler)](Expected<void, Inspector::ExtensionError> result) mutable {
if (!result) {
completionHandler(makeUnexpected(Inspector::ExtensionError::RegistrationFailed));
return;
@@ -111,7 +111,7 @@
});
}
-void WebInspectorUIExtensionControllerProxy::unregisterExtension(const Inspector::ExtensionID& extensionID, WTF::CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&& completionHandler)
+void WebInspectorUIExtensionControllerProxy::unregisterExtension(const Inspector::ExtensionID& extensionID, WTF::CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&& completionHandler)
{
whenFrontendHasLoaded([weakThis = makeWeakPtr(this), extensionID, completionHandler = WTFMove(completionHandler)] () mutable {
if (!weakThis || !weakThis->m_inspectorPage) {
@@ -119,7 +119,7 @@
return;
}
- weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::UnregisterExtension { extensionID }, [strongThis = Ref { *weakThis.get() }, extensionID, completionHandler = WTFMove(completionHandler)](Expected<bool, Inspector::ExtensionError> result) mutable {
+ weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::UnregisterExtension { extensionID }, [strongThis = Ref { *weakThis.get() }, extensionID, completionHandler = WTFMove(completionHandler)](Expected<void, Inspector::ExtensionError> result) mutable {
if (!result) {
completionHandler(makeUnexpected(Inspector::ExtensionError::InvalidRequest));
return;
@@ -187,7 +187,7 @@
});
}
-void WebInspectorUIExtensionControllerProxy::showExtensionTab(const Inspector::ExtensionTabID& extensionTabIdentifier, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&& completionHandler)
+void WebInspectorUIExtensionControllerProxy::showExtensionTab(const Inspector::ExtensionTabID& extensionTabIdentifier, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&& completionHandler)
{
whenFrontendHasLoaded([weakThis = makeWeakPtr(this), extensionTabIdentifier, completionHandler = WTFMove(completionHandler)] () mutable {
if (!weakThis || !weakThis->m_inspectorPage) {
Modified: trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h (283219 => 283220)
--- trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h 2021-09-29 15:38:11 UTC (rev 283219)
+++ trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h 2021-09-29 15:39:26 UTC (rev 283220)
@@ -56,11 +56,11 @@
// API.
void registerExtension(const Inspector::ExtensionID&, const String& displayName, WTF::CompletionHandler<void(Expected<RefPtr<API::InspectorExtension>, Inspector::ExtensionError>)>&&);
- void unregisterExtension(const Inspector::ExtensionID&, WTF::CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&&);
+ void unregisterExtension(const Inspector::ExtensionID&, WTF::CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&&);
void createTabForExtension(const Inspector::ExtensionID&, const String& tabName, const URL& tabIconURL, const URL& sourceURL, WTF::CompletionHandler<void(Expected<Inspector::ExtensionTabID, Inspector::ExtensionError>)>&&);
void evaluateScriptForExtension(const Inspector::ExtensionID&, const String& scriptSource, const std::optional<URL>& frameURL, const std::optional<URL>& contextSecurityOrigin, const std::optional<bool>& useContentScriptContext, WTF::CompletionHandler<void(Inspector::ExtensionEvaluationResult)>&&);
void reloadForExtension(const Inspector::ExtensionID&, const std::optional<bool>& ignoreCache, const std::optional<String>& userAgent, const std::optional<String>& injectedScript, WTF::CompletionHandler<void(Inspector::ExtensionEvaluationResult)>&&);
- void showExtensionTab(const Inspector::ExtensionTabID&, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&&);
+ void showExtensionTab(const Inspector::ExtensionTabID&, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&&);
// WebInspectorUIExtensionControllerProxy IPC messages.
void didShowExtensionTab(const Inspector::ExtensionID&, const Inspector::ExtensionTabID&);
Modified: trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.cpp (283219 => 283220)
--- trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.cpp 2021-09-29 15:38:11 UTC (rev 283219)
+++ trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.cpp 2021-09-29 15:39:26 UTC (rev 283220)
@@ -109,7 +109,7 @@
// WebInspectorUIExtensionController IPC messages.
-void WebInspectorUIExtensionController::registerExtension(const Inspector::ExtensionID& extensionID, const String& displayName, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&& completionHandler)
+void WebInspectorUIExtensionController::registerExtension(const Inspector::ExtensionID& extensionID, const String& displayName, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&& completionHandler)
{
if (!m_frontendClient) {
completionHandler(makeUnexpected(Inspector::ExtensionError::InvalidRequest));
@@ -131,11 +131,11 @@
return;
}
- completionHandler(true);
+ completionHandler({ });
});
}
-void WebInspectorUIExtensionController::unregisterExtension(const Inspector::ExtensionID& extensionID, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&& completionHandler)
+void WebInspectorUIExtensionController::unregisterExtension(const Inspector::ExtensionID& extensionID, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&& completionHandler)
{
if (!m_frontendClient) {
completionHandler(makeUnexpected(Inspector::ExtensionError::InvalidRequest));
@@ -154,7 +154,7 @@
return;
}
- completionHandler(true);
+ completionHandler({ });
});
}
@@ -326,7 +326,7 @@
});
}
-void WebInspectorUIExtensionController::showExtensionTab(const Inspector::ExtensionTabID& extensionTabIdentifier, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&& completionHandler)
+void WebInspectorUIExtensionController::showExtensionTab(const Inspector::ExtensionTabID& extensionTabIdentifier, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&& completionHandler)
{
if (!m_frontendClient) {
completionHandler(makeUnexpected(Inspector::ExtensionError::InvalidRequest));
@@ -355,7 +355,7 @@
return;
}
- completionHandler(true);
+ completionHandler({ });
});
}
Modified: trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.h (283219 => 283220)
--- trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.h 2021-09-29 15:38:11 UTC (rev 283219)
+++ trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.h 2021-09-29 15:39:26 UTC (rev 283220)
@@ -63,12 +63,12 @@
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
// WebInspectorUIExtensionController IPC messages.
- void registerExtension(const Inspector::ExtensionID&, const String& displayName, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&&);
- void unregisterExtension(const Inspector::ExtensionID&, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&&);
+ void registerExtension(const Inspector::ExtensionID&, const String& displayName, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&&);
+ void unregisterExtension(const Inspector::ExtensionID&, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&&);
void createTabForExtension(const Inspector::ExtensionID&, const String& tabName, const URL& tabIconURL, const URL& sourceURL, CompletionHandler<void(Expected<Inspector::ExtensionTabID, Inspector::ExtensionError>)>&&);
void evaluateScriptForExtension(const Inspector::ExtensionID&, const String& scriptSource, const std::optional<URL>& frameURL, const std::optional<URL>& contextSecurityOrigin, const std::optional<bool>& useContentScriptContext, CompletionHandler<void(const IPC::DataReference&, const std::optional<WebCore::ExceptionDetails>&, const std::optional<Inspector::ExtensionError>&)>&&);
void reloadForExtension(const Inspector::ExtensionID&, const std::optional<bool>& ignoreCache, const std::optional<String>& userAgent, const std::optional<String>& injectedScript, CompletionHandler<void(const std::optional<Inspector::ExtensionError>&)>&&);
- void showExtensionTab(const Inspector::ExtensionTabID&, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&&);
+ void showExtensionTab(const Inspector::ExtensionTabID&, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&&);
// Callbacks from the frontend.
void didShowExtensionTab(const Inspector::ExtensionID&, const Inspector::ExtensionTabID&);
Modified: trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.messages.in (283219 => 283220)
--- trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.messages.in 2021-09-29 15:38:11 UTC (rev 283219)
+++ trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.messages.in 2021-09-29 15:39:26 UTC (rev 283220)
@@ -22,18 +22,14 @@
#if ENABLE(INSPECTOR_EXTENSIONS)
-// FIXME: some completion handlers with a parameter type of Expected<bool, Inspector::ExtensionError>
-// should actually be Expected<void, Inspector::ExtensionError>, but this does not compile as-is without
-// changes to argument coders. This cleanup is tracked by <https://bugs.webkit.org/b/230907>.
-
messages -> WebInspectorUIExtensionController NotRefCounted {
- RegisterExtension(String extensionID, String displayName) -> (Expected<bool, Inspector::ExtensionError> result) Async
- UnregisterExtension(String extensionID) -> (Expected<bool, Inspector::ExtensionError> result) Async
+ RegisterExtension(String extensionID, String displayName) -> (Expected<void, Inspector::ExtensionError> result) Async
+ UnregisterExtension(String extensionID) -> (Expected<void, Inspector::ExtensionError> result) Async
CreateTabForExtension(String extensionID, String tabName, URL tabIconURL, URL sourceURL) -> (Expected<String, Inspector::ExtensionError> result) Async
EvaluateScriptForExtension(String extensionID, String scriptSource, std::optional<URL> frameURL, std::optional<URL> contextSecurityOrigin, std::optional<bool> useContentScriptContext) -> (IPC::DataReference resultData, std::optional<WebCore::ExceptionDetails> details, std::optional<Inspector::ExtensionError> error) Async
ReloadForExtension(String extensionID, std::optional<bool> ignoreCache, std::optional<String> userAgent, std::optional<String> injectedScript) -> (std::optional<Inspector::ExtensionError> error) Async
- ShowExtensionTab(String extensionTabIdentifier) -> (Expected<bool, Inspector::ExtensionError> result) Async
+ ShowExtensionTab(String extensionTabIdentifier) -> (Expected<void, Inspector::ExtensionError> result) Async
}
#endif // ENABLE(INSPECTOR_EXTENSIONS)