Skip to content

Commit f0ef7ec

Browse files
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`). git-svn-id: http://svn.webkit.org/repository/webkit/trunk@283220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 14a98b5 commit f0ef7ec

9 files changed

+82
-26
lines changed

Source/WebKit/ChangeLog

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,32 @@
1+
2021-09-29 Devin Rousso <[email protected]>
2+
3+
Add support for sending Expected<void, E> in IPC messages
4+
https://bugs.webkit.org/show_bug.cgi?id=230907
5+
6+
Reviewed by Chris Dumez.
7+
8+
* Platform/IPC/ArgumentCoders.h:
9+
10+
* WebProcess/Inspector/WebInspectorUIExtensionController.messages.in:
11+
* WebProcess/Inspector/WebInspectorUIExtensionController.h:
12+
* WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
13+
(WebKit::WebInspectorUIExtensionController::registerExtension):
14+
(WebKit::WebInspectorUIExtensionController::unregisterExtension):
15+
(WebKit::WebInspectorUIExtensionController::showExtensionTab):
16+
* UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h:
17+
* UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
18+
(WebKit::WebInspectorUIExtensionControllerProxy::registerExtension):
19+
(WebKit::WebInspectorUIExtensionControllerProxy::unregisterExtension):
20+
(WebKit::WebInspectorUIExtensionControllerProxy::showExtensionTab):
21+
* UIProcess/API/Cocoa/_WKInspector.mm:
22+
(-[_WKInspector unregisterExtension:completionHandler:]):
23+
(-[_WKInspector showExtensionTabWithIdentifier:completionHandler:]):
24+
* UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm:
25+
(-[_WKRemoteWebInspectorViewController unregisterExtension:completionHandler:]):
26+
(-[_WKRemoteWebInspectorViewController showExtensionTabWithIdentifier:completionHandler:]):
27+
Replace `Expected<bool, ...>` with `Expected<void, ...>` now that it can be sent over IPC.
28+
No change in functionality as the `bool` was never actually used (it was a hardcoded `true`).
29+
130
2021-09-28 Simon Fraser <[email protected]>
231

332
Crash in WebKit::DisplayLink::displayLinkCallback()

Source/WebKit/Platform/IPC/ArgumentCoders.h

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <utility>
3131
#include <wtf/Box.h>
3232
#include <wtf/CheckedArithmetic.h>
33+
#include <wtf/Expected.h>
3334
#include <wtf/Forward.h>
3435
#include <wtf/MonotonicTime.h>
3536
#include <wtf/OptionSet.h>
@@ -671,6 +672,36 @@ template<typename ValueType, typename ErrorType> struct ArgumentCoder<Expected<V
671672
}
672673
};
673674

675+
template<typename ErrorType> struct ArgumentCoder<Expected<void, ErrorType>> {
676+
template<typename Encoder> static void encode(Encoder& encoder, const Expected<void, ErrorType>& expected)
677+
{
678+
if (!expected.has_value()) {
679+
encoder << false;
680+
encoder << expected.error();
681+
return;
682+
}
683+
684+
encoder << true;
685+
}
686+
687+
template<typename Decoder> static std::optional<Expected<void, ErrorType>> decode(Decoder& decoder)
688+
{
689+
std::optional<bool> hasValue;
690+
decoder >> hasValue;
691+
if (!hasValue)
692+
return std::nullopt;
693+
694+
if (*hasValue)
695+
return {{ }};
696+
697+
std::optional<ErrorType> error;
698+
decoder >> error;
699+
if (!error)
700+
return std::nullopt;
701+
return { makeUnexpected(WTFMove(*error)) };
702+
}
703+
};
704+
674705
template<size_t index, typename... Types>
675706
struct VariantCoder {
676707
static void encode(Encoder& encoder, const WTF::Variant<Types...>& variant, unsigned i)

Source/WebKit/UIProcess/API/Cocoa/_WKInspector.mm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ - (void)unregisterExtension:(_WKInspectorExtension *)extension completionHandler
257257
return;
258258
}
259259

260-
_inspector->extensionController()->unregisterExtension(extension.extensionID, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<bool, Inspector::ExtensionError> result) mutable {
260+
_inspector->extensionController()->unregisterExtension(extension.extensionID, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<void, Inspector::ExtensionError> result) mutable {
261261
if (!result) {
262262
capturedBlock([NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:@{ NSLocalizedFailureReasonErrorKey: Inspector::extensionErrorToString(result.error())}]);
263263
return;
@@ -279,7 +279,7 @@ - (void)showExtensionTabWithIdentifier:(NSString *)extensionTabIdentifier comple
279279
return;
280280
}
281281

282-
_inspector->extensionController()->showExtensionTab(extensionTabIdentifier, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<bool, Inspector::ExtensionError>&& result) mutable {
282+
_inspector->extensionController()->showExtensionTab(extensionTabIdentifier, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<void, Inspector::ExtensionError>&& result) mutable {
283283
if (!result) {
284284
capturedBlock([NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:@{ NSLocalizedFailureReasonErrorKey: Inspector::extensionErrorToString(result.error())}]);
285285
return;

Source/WebKit/UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ - (void)unregisterExtension:(_WKInspectorExtension *)extension completionHandler
194194
completionHandler([NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:@{ NSLocalizedFailureReasonErrorKey: Inspector::extensionErrorToString(Inspector::ExtensionError::InvalidRequest) }]);
195195
return;
196196
}
197-
m_remoteInspectorProxy->extensionController()->unregisterExtension(extension.extensionID, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<bool, Inspector::ExtensionError> result) mutable {
197+
m_remoteInspectorProxy->extensionController()->unregisterExtension(extension.extensionID, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<void, Inspector::ExtensionError> result) mutable {
198198
if (!result) {
199199
capturedBlock([NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:@{ NSLocalizedFailureReasonErrorKey: Inspector::extensionErrorToString(result.error()) }]);
200200
return;
@@ -226,7 +226,7 @@ - (void)showExtensionTabWithIdentifier:(NSString *)extensionTabIdentifier comple
226226
return;
227227
}
228228

229-
m_remoteInspectorProxy->extensionController()->showExtensionTab(extensionTabIdentifier, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<bool, Inspector::ExtensionError>&& result) mutable {
229+
m_remoteInspectorProxy->extensionController()->showExtensionTab(extensionTabIdentifier, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(completionHandler)] (Expected<void, Inspector::ExtensionError>&& result) mutable {
230230
if (!result) {
231231
capturedBlock([NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:@{ NSLocalizedFailureReasonErrorKey: Inspector::extensionErrorToString(result.error())}]);
232232
return;

Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ void WebInspectorUIExtensionControllerProxy::registerExtension(const Inspector::
9797
return;
9898
}
9999

100-
weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::RegisterExtension { extensionID, displayName }, [strongThis = Ref { *weakThis.get() }, extensionID, completionHandler = WTFMove(completionHandler)](Expected<bool, Inspector::ExtensionError> result) mutable {
100+
weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::RegisterExtension { extensionID, displayName }, [strongThis = Ref { *weakThis.get() }, extensionID, completionHandler = WTFMove(completionHandler)](Expected<void, Inspector::ExtensionError> result) mutable {
101101
if (!result) {
102102
completionHandler(makeUnexpected(Inspector::ExtensionError::RegistrationFailed));
103103
return;
@@ -111,15 +111,15 @@ void WebInspectorUIExtensionControllerProxy::registerExtension(const Inspector::
111111
});
112112
}
113113

114-
void WebInspectorUIExtensionControllerProxy::unregisterExtension(const Inspector::ExtensionID& extensionID, WTF::CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&& completionHandler)
114+
void WebInspectorUIExtensionControllerProxy::unregisterExtension(const Inspector::ExtensionID& extensionID, WTF::CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&& completionHandler)
115115
{
116116
whenFrontendHasLoaded([weakThis = makeWeakPtr(this), extensionID, completionHandler = WTFMove(completionHandler)] () mutable {
117117
if (!weakThis || !weakThis->m_inspectorPage) {
118118
completionHandler(makeUnexpected(Inspector::ExtensionError::InvalidRequest));
119119
return;
120120
}
121121

122-
weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::UnregisterExtension { extensionID }, [strongThis = Ref { *weakThis.get() }, extensionID, completionHandler = WTFMove(completionHandler)](Expected<bool, Inspector::ExtensionError> result) mutable {
122+
weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::UnregisterExtension { extensionID }, [strongThis = Ref { *weakThis.get() }, extensionID, completionHandler = WTFMove(completionHandler)](Expected<void, Inspector::ExtensionError> result) mutable {
123123
if (!result) {
124124
completionHandler(makeUnexpected(Inspector::ExtensionError::InvalidRequest));
125125
return;
@@ -187,7 +187,7 @@ void WebInspectorUIExtensionControllerProxy::reloadForExtension(const Inspector:
187187
});
188188
}
189189

190-
void WebInspectorUIExtensionControllerProxy::showExtensionTab(const Inspector::ExtensionTabID& extensionTabIdentifier, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&& completionHandler)
190+
void WebInspectorUIExtensionControllerProxy::showExtensionTab(const Inspector::ExtensionTabID& extensionTabIdentifier, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&& completionHandler)
191191
{
192192
whenFrontendHasLoaded([weakThis = makeWeakPtr(this), extensionTabIdentifier, completionHandler = WTFMove(completionHandler)] () mutable {
193193
if (!weakThis || !weakThis->m_inspectorPage) {

Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ class WebInspectorUIExtensionControllerProxy final
5656

5757
// API.
5858
void registerExtension(const Inspector::ExtensionID&, const String& displayName, WTF::CompletionHandler<void(Expected<RefPtr<API::InspectorExtension>, Inspector::ExtensionError>)>&&);
59-
void unregisterExtension(const Inspector::ExtensionID&, WTF::CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&&);
59+
void unregisterExtension(const Inspector::ExtensionID&, WTF::CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&&);
6060
void createTabForExtension(const Inspector::ExtensionID&, const String& tabName, const URL& tabIconURL, const URL& sourceURL, WTF::CompletionHandler<void(Expected<Inspector::ExtensionTabID, Inspector::ExtensionError>)>&&);
6161
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)>&&);
6262
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)>&&);
63-
void showExtensionTab(const Inspector::ExtensionTabID&, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&&);
63+
void showExtensionTab(const Inspector::ExtensionTabID&, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&&);
6464

6565
// WebInspectorUIExtensionControllerProxy IPC messages.
6666
void didShowExtensionTab(const Inspector::ExtensionID&, const Inspector::ExtensionTabID&);

Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ std::optional<Inspector::ExtensionError> WebInspectorUIExtensionController::pars
109109

110110
// WebInspectorUIExtensionController IPC messages.
111111

112-
void WebInspectorUIExtensionController::registerExtension(const Inspector::ExtensionID& extensionID, const String& displayName, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&& completionHandler)
112+
void WebInspectorUIExtensionController::registerExtension(const Inspector::ExtensionID& extensionID, const String& displayName, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&& completionHandler)
113113
{
114114
if (!m_frontendClient) {
115115
completionHandler(makeUnexpected(Inspector::ExtensionError::InvalidRequest));
@@ -131,11 +131,11 @@ void WebInspectorUIExtensionController::registerExtension(const Inspector::Exten
131131
return;
132132
}
133133

134-
completionHandler(true);
134+
completionHandler({ });
135135
});
136136
}
137137

138-
void WebInspectorUIExtensionController::unregisterExtension(const Inspector::ExtensionID& extensionID, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&& completionHandler)
138+
void WebInspectorUIExtensionController::unregisterExtension(const Inspector::ExtensionID& extensionID, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&& completionHandler)
139139
{
140140
if (!m_frontendClient) {
141141
completionHandler(makeUnexpected(Inspector::ExtensionError::InvalidRequest));
@@ -154,7 +154,7 @@ void WebInspectorUIExtensionController::unregisterExtension(const Inspector::Ext
154154
return;
155155
}
156156

157-
completionHandler(true);
157+
completionHandler({ });
158158
});
159159
}
160160

@@ -326,7 +326,7 @@ void WebInspectorUIExtensionController::reloadForExtension(const Inspector::Exte
326326
});
327327
}
328328

329-
void WebInspectorUIExtensionController::showExtensionTab(const Inspector::ExtensionTabID& extensionTabIdentifier, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&& completionHandler)
329+
void WebInspectorUIExtensionController::showExtensionTab(const Inspector::ExtensionTabID& extensionTabIdentifier, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&& completionHandler)
330330
{
331331
if (!m_frontendClient) {
332332
completionHandler(makeUnexpected(Inspector::ExtensionError::InvalidRequest));
@@ -355,7 +355,7 @@ void WebInspectorUIExtensionController::showExtensionTab(const Inspector::Extens
355355
return;
356356
}
357357

358-
completionHandler(true);
358+
completionHandler({ });
359359
});
360360
}
361361

Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,12 @@ class WebInspectorUIExtensionController
6363
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
6464

6565
// WebInspectorUIExtensionController IPC messages.
66-
void registerExtension(const Inspector::ExtensionID&, const String& displayName, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&&);
67-
void unregisterExtension(const Inspector::ExtensionID&, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&&);
66+
void registerExtension(const Inspector::ExtensionID&, const String& displayName, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&&);
67+
void unregisterExtension(const Inspector::ExtensionID&, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&&);
6868
void createTabForExtension(const Inspector::ExtensionID&, const String& tabName, const URL& tabIconURL, const URL& sourceURL, CompletionHandler<void(Expected<Inspector::ExtensionTabID, Inspector::ExtensionError>)>&&);
6969
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>&)>&&);
7070
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>&)>&&);
71-
void showExtensionTab(const Inspector::ExtensionTabID&, CompletionHandler<void(Expected<bool, Inspector::ExtensionError>)>&&);
71+
void showExtensionTab(const Inspector::ExtensionTabID&, CompletionHandler<void(Expected<void, Inspector::ExtensionError>)>&&);
7272

7373
// Callbacks from the frontend.
7474
void didShowExtensionTab(const Inspector::ExtensionID&, const Inspector::ExtensionTabID&);

Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.messages.in

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,14 @@
2222

2323
#if ENABLE(INSPECTOR_EXTENSIONS)
2424

25-
// FIXME: some completion handlers with a parameter type of Expected<bool, Inspector::ExtensionError>
26-
// should actually be Expected<void, Inspector::ExtensionError>, but this does not compile as-is without
27-
// changes to argument coders. This cleanup is tracked by <https://bugs.webkit.org/b/230907>.
28-
2925
messages -> WebInspectorUIExtensionController NotRefCounted {
30-
RegisterExtension(String extensionID, String displayName) -> (Expected<bool, Inspector::ExtensionError> result) Async
31-
UnregisterExtension(String extensionID) -> (Expected<bool, Inspector::ExtensionError> result) Async
26+
RegisterExtension(String extensionID, String displayName) -> (Expected<void, Inspector::ExtensionError> result) Async
27+
UnregisterExtension(String extensionID) -> (Expected<void, Inspector::ExtensionError> result) Async
3228

3329
CreateTabForExtension(String extensionID, String tabName, URL tabIconURL, URL sourceURL) -> (Expected<String, Inspector::ExtensionError> result) Async
3430
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
3531
ReloadForExtension(String extensionID, std::optional<bool> ignoreCache, std::optional<String> userAgent, std::optional<String> injectedScript) -> (std::optional<Inspector::ExtensionError> error) Async
36-
ShowExtensionTab(String extensionTabIdentifier) -> (Expected<bool, Inspector::ExtensionError> result) Async
32+
ShowExtensionTab(String extensionTabIdentifier) -> (Expected<void, Inspector::ExtensionError> result) Async
3733
}
3834

3935
#endif // ENABLE(INSPECTOR_EXTENSIONS)

0 commit comments

Comments
 (0)