Diff
Modified: trunk/Source/WebInspectorUI/ChangeLog (273364 => 273365)
--- trunk/Source/WebInspectorUI/ChangeLog 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebInspectorUI/ChangeLog 2021-02-24 01:11:03 UTC (rev 273365)
@@ -1,3 +1,21 @@
+2021-02-23 Patrick Angle <[email protected]>
+
+ [Cocoa] Web Inspector: Add support for reloading the inspected page via _WKInspectorExtension
+ https://bugs.webkit.org/show_bug.cgi?id=222296
+
+ Reviewed by BJ Burg.
+
+ Added support for reloading the inspected page, including ignoring the cache if desired, via
+ _WKInspectorExtension.
+
+ * UserInterface/Controllers/WebInspectorExtensionController.js:
+ (WI.WebInspectorExtensionController.prototype.evaluateScriptForExtension):
+ (WI.WebInspectorExtensionController.prototype.reloadForExtension):
+ (WI.WebInspectorExtensionController):
+ * UserInterface/Protocol/InspectorFrontendAPI.js:
+ (InspectorFrontendAPI.evaluateScriptForExtension):
+ (InspectorFrontendAPI.reloadForExtension):
+
2021-02-19 Nikita Vasilyev <[email protected]>
Web Inspector: CSS Grid Inspector: use a color palette for default grid overlay colors
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/WebInspectorExtensionController.js (273364 => 273365)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/WebInspectorExtensionController.js 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/WebInspectorExtensionController.js 2021-02-24 01:11:03 UTC (rev 273365)
@@ -125,7 +125,35 @@
let {type, value} = resultOrError;
return wasThrown ? {"error": resultOrError.description} : {"result": value};
}).catch((error) => error.description);
- }
+ }
+
+ reloadForExtension(extensionID, {ignoreCache, userAgent, injectedScript} = {})
+ {
+ let extension = this._extensionForExtensionIDMap.get(extensionID);
+ if (!extension) {
+ WI.reportInternalError("Unable to evaluate script for extension with unknown ID: " + extensionID);
+ return WI.WebInspectorExtension.ErrorCode.InvalidRequest;
+ }
+
+ // FIXME: <webkit.org/b/222328> Implement `userAgent` and `injectedScript` options for `devtools.inspectedWindow.reload` command
+ if (userAgent) {
+ WI.reportInternalError("reloadForExtension: the 'userAgent' option is not yet implemented.");
+ return WI.WebInspectorExtension.ErrorCode.NotImplemented;
+ }
+
+ if (injectedScript) {
+ WI.reportInternalError("reloadForExtension: the 'injectedScript' option is not yet implemented.");
+ return WI.WebInspectorExtension.ErrorCode.NotImplemented;
+ }
+
+ let target = WI.assumingMainTarget();
+ if (!target.hasCommand("Page.reload"))
+ return WI.WebInspectorExtension.ErrorCode.InvalidRequest;
+
+ return target.PageAgent.reload.invoke({ignoreCache});
+
+
+ }
};
WI.WebInspectorExtensionController.Event = {
Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorFrontendAPI.js (273364 => 273365)
--- trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorFrontendAPI.js 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorFrontendAPI.js 2021-02-24 01:11:03 UTC (rev 273365)
@@ -223,5 +223,11 @@
evaluateScriptForExtension(extensionID, scriptSource, {frameURL, contextSecurityOrigin, useContentScriptContext} = {})
{
return WI.sharedApp.extensionController.evaluateScriptForExtension(extensionID, scriptSource, {frameURL, contextSecurityOrigin, useContentScriptContext});
- }
+ },
+
+ // Returns a string (WI.WebInspectorExtension.ErrorCode) if an error occurred that prevented reloading.
+ reloadForExtension(extensionID, {ignoreCache, userAgent, injectedScript} = {})
+ {
+ return WI.sharedApp.extensionController.reloadForExtension(extensionID, {ignoreCache, userAgent, injectedScript});
+ },
};
Modified: trunk/Source/WebKit/ChangeLog (273364 => 273365)
--- trunk/Source/WebKit/ChangeLog 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebKit/ChangeLog 2021-02-24 01:11:03 UTC (rev 273365)
@@ -1,3 +1,27 @@
+2021-02-23 Patrick Angle <[email protected]>
+
+ [Cocoa] Web Inspector: Add support for reloading the inspected page via _WKInspectorExtension
+ https://bugs.webkit.org/show_bug.cgi?id=222296
+
+ Reviewed by BJ Burg.
+
+ Added a new method to _WKInspectorExtension which is used to implement `browser.devtools.inspectedWindow.reload`
+ in the Web Extensions API.
+
+ * UIProcess/API/APIInspectorExtension.cpp:
+ (API::InspectorExtension::reloadIgnoringCache):
+ * UIProcess/API/APIInspectorExtension.h:
+ * UIProcess/API/Cocoa/_WKInspectorExtension.h:
+ * UIProcess/API/Cocoa/_WKInspectorExtension.mm:
+ (-[_WKInspectorExtension reloadIgnoringCache:userAgent:injectedScript:completionHandler:]):
+ * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp:
+ (WebKit::WebInspectorUIExtensionControllerProxy::reloadForExtension):
+ * UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h:
+ * WebProcess/Inspector/WebInspectorUIExtensionController.cpp:
+ (WebKit::WebInspectorUIExtensionController::reloadForExtension):
+ * WebProcess/Inspector/WebInspectorUIExtensionController.h:
+ * WebProcess/Inspector/WebInspectorUIExtensionController.messages.in:
+
2021-02-23 Brent Fulgham <[email protected]>
[macOS] Allow additional syscall support in the sandbox
Modified: trunk/Source/WebKit/UIProcess/API/APIInspectorExtension.cpp (273364 => 273365)
--- trunk/Source/WebKit/UIProcess/API/APIInspectorExtension.cpp 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebKit/UIProcess/API/APIInspectorExtension.cpp 2021-02-24 01:11:03 UTC (rev 273365)
@@ -65,6 +65,16 @@
m_extensionControllerProxy->evaluateScriptForExtension(m_identifier, scriptSource, frameURL, contextSecurityOrigin, useContentScriptContext, WTFMove(completionHandler));
}
+void InspectorExtension::reloadIgnoringCache(const Optional<bool>& ignoreCache, const Optional<WTF::String>& userAgent, const Optional<WTF::String>& injectedScript, WTF::CompletionHandler<void(WebKit::InspectorExtensionEvaluationResult)>&& completionHandler)
+{
+ if (!m_extensionControllerProxy) {
+ completionHandler(makeUnexpected(WebKit::InspectorExtensionError::ContextDestroyed));
+ return;
+ }
+
+ m_extensionControllerProxy->reloadForExtension(m_identifier, ignoreCache, userAgent, injectedScript, WTFMove(completionHandler));
+}
+
} // namespace API
#endif // ENABLE(INSPECTOR_EXTENSIONS)
Modified: trunk/Source/WebKit/UIProcess/API/APIInspectorExtension.h (273364 => 273365)
--- trunk/Source/WebKit/UIProcess/API/APIInspectorExtension.h 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebKit/UIProcess/API/APIInspectorExtension.h 2021-02-24 01:11:03 UTC (rev 273365)
@@ -48,6 +48,7 @@
void createTab(const WTF::String& tabName, const WTF::URL& tabIconURL, const WTF::URL& sourceURL, WTF::CompletionHandler<void(Expected<WebKit::InspectorExtensionTabID, WebKit::InspectorExtensionError>)>&&);
void evaluateScript(const WTF::String& scriptSource, const Optional<WTF::URL>& frameURL, const Optional<WTF::URL>& contextSecurityOrigin, const Optional<bool>& useContentScriptContext, WTF::CompletionHandler<void(WebKit::InspectorExtensionEvaluationResult)>&&);
+ void reloadIgnoringCache(const Optional<bool>& ignoreCache, const Optional<WTF::String>& userAgent, const Optional<WTF::String>& injectedScript, WTF::CompletionHandler<void(WebKit::InspectorExtensionEvaluationResult)>&&);
private:
InspectorExtension(const WTF::String& identifier, WebKit::WebInspectorUIExtensionControllerProxy&);
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorExtension.h (273364 => 273365)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorExtension.h 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorExtension.h 2021-02-24 01:11:03 UTC (rev 273365)
@@ -61,6 +61,15 @@
*/
- (void)evaluateScript:(NSString *)scriptSource frameURL:(NSURL *)frameURL contextSecurityOrigin:(NSURL *)contextSecurityOrigin useContentScriptContext:(BOOL)useContentScriptContext completionHandler:(void(^)(NSError * _Nullable, NSDictionary * _Nullable result))completionHandler;
+/**
+ * @abstract Reloads the inspected page on behalf of the _WKInspectorExtension.
+ * @param ignoreCache If YES, reloads the page while ignoring the cache.
+ * @param userAgent If specified, overrides the user agent to be sent in the `User-Agent` header and returned by calls to `navigator.userAgent` made by scripts running in the page. This only affects the next navigation.
+ * @param injectedScript If specified, injects the given _javascript_ _expression_ into all frames on the page before any other scripts.
+ * @param completionHandler A block to invoke when the operation completes or fails.
+ */
+- (void)reloadIgnoringCache:(BOOL)ignoreCache userAgent:(NSString *)userAgent injectedScript:(NSString *)injectedScript completionHandler:(void(^)(NSError * _Nullable))completionHandler;
+
@property (readonly, nonatomic) NSString *extensionID;
@end
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorExtension.mm (273364 => 273365)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorExtension.mm 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorExtension.mm 2021-02-24 01:11:03 UTC (rev 273365)
@@ -84,6 +84,26 @@
});
}
+- (void)reloadIgnoringCache:(BOOL)ignoreCache userAgent:(NSString *)userAgent injectedScript:(NSString *)injectedScript completionHandler:(void(^)(NSError *))completionHandler
+{
+ Optional<String> optionalUserAgent = userAgent ? makeOptional(String(userAgent)) : WTF::nullopt;
+ Optional<String> optionalInjectedScript = injectedScript ? makeOptional(String(injectedScript)) : WTF::nullopt;
+ _extension->reloadIgnoringCache(ignoreCache, optionalUserAgent, optionalInjectedScript, [protectedSelf = retainPtr(self), capturedBlock = makeBlockPtr(WTFMove(completionHandler))] (WebKit::InspectorExtensionEvaluationResult&& result) mutable {
+ if (!result) {
+ capturedBlock([NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:@{ NSLocalizedFailureReasonErrorKey: WebKit::inspectorExtensionErrorToString(result.error()) }]);
+ return;
+ }
+
+ auto valueOrException = result.value();
+ if (!valueOrException) {
+ capturedBlock(nsErrorFromExceptionDetails(valueOrException.error()).get());
+ return;
+ }
+
+ capturedBlock(nil);
+ });
+}
+
// MARK: Properties.
- (NSString *)extensionID
Modified: trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp (273364 => 273365)
--- trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp 2021-02-24 01:11:03 UTC (rev 273365)
@@ -137,6 +137,25 @@
});
}
+void WebInspectorUIExtensionControllerProxy::reloadForExtension(const InspectorExtensionID& extensionID, const Optional<bool>& ignoreCache, const Optional<String>& userAgent, const Optional<String>& injectedScript, WTF::CompletionHandler<void(InspectorExtensionEvaluationResult)>&& completionHandler)
+{
+ whenFrontendHasLoaded([weakThis = makeWeakPtr(this), extensionID, ignoreCache, userAgent, injectedScript, completionHandler = WTFMove(completionHandler)] () mutable {
+ if (!weakThis || !weakThis->m_inspectorPage) {
+ completionHandler(makeUnexpected(InspectorExtensionError::ContextDestroyed));
+ return;
+ }
+
+ weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::ReloadForExtension {extensionID, ignoreCache, userAgent, injectedScript}, [completionHandler = WTFMove(completionHandler)](const Optional<InspectorExtensionError> error) mutable {
+ if (error) {
+ completionHandler(makeUnexpected(error.value()));
+ return;
+ }
+
+ completionHandler({ });
+ });
+ });
+}
+
} // namespace WebKit
#endif // ENABLE(INSPECTOR_EXTENSIONS)
Modified: trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h (273364 => 273365)
--- trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.h 2021-02-24 01:11:03 UTC (rev 273365)
@@ -52,6 +52,7 @@
void unregisterExtension(const InspectorExtensionID&, WTF::CompletionHandler<void(Expected<bool, InspectorExtensionError>)>&&);
void createTabForExtension(const InspectorExtensionID&, const String& tabName, const URL& tabIconURL, const URL& sourceURL, WTF::CompletionHandler<void(Expected<InspectorExtensionTabID, InspectorExtensionError>)>&&);
void evaluateScriptForExtension(const InspectorExtensionID&, const String& scriptSource, const Optional<URL>& frameURL, const Optional<URL>& contextSecurityOrigin, const Optional<bool>& useContentScriptContext, WTF::CompletionHandler<void(InspectorExtensionEvaluationResult)>&&);
+ void reloadForExtension(const InspectorExtensionID&, const Optional<bool>& ignoreCache, const Optional<String>& userAgent, const Optional<String>& injectedScript, WTF::CompletionHandler<void(InspectorExtensionEvaluationResult)>&&);
// Notifications.
void inspectorFrontendLoaded();
Modified: trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.cpp (273364 => 273365)
--- trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.cpp 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.cpp 2021-02-24 01:11:03 UTC (rev 273365)
@@ -281,6 +281,48 @@
});
}
+void WebInspectorUIExtensionController::reloadForExtension(const InspectorExtensionID& extensionID, const Optional<bool>& ignoreCache, const Optional<String>& userAgent, const Optional<String>& injectedScript, CompletionHandler<void(const Optional<InspectorExtensionError>&)>&& completionHandler)
+{
+ if (!m_frontendClient) {
+ completionHandler(InspectorExtensionError::InvalidRequest);
+ return;
+ }
+
+ Ref<JSON::Object> optionalArguments = JSON::Object::create();
+ if (ignoreCache)
+ optionalArguments->setBoolean("ignoreCache"_s, *ignoreCache);
+ if (userAgent)
+ optionalArguments->setString("userAgent"_s, *userAgent);
+ if (injectedScript)
+ optionalArguments->setString("injectedScript"_s, *injectedScript);
+
+ Vector<Ref<JSON::Value>> arguments {
+ JSON::Value::create(extensionID),
+ WTFMove(optionalArguments)
+ };
+
+ m_frontendClient->frontendAPIDispatcher().dispatchCommandWithResultAsync("reloadForExtension"_s, WTFMove(arguments), [weakThis = makeWeakPtr(this), completionHandler = WTFMove(completionHandler)](InspectorFrontendAPIDispatcher::EvaluationResult&& result) mutable {
+ if (!weakThis) {
+ completionHandler(InspectorExtensionError::ContextDestroyed);
+ return;
+ }
+
+ auto* frontendGlobalObject = weakThis->m_frontendClient->frontendAPIDispatcher().frontendGlobalObject();
+ if (!frontendGlobalObject) {
+ completionHandler(InspectorExtensionError::ContextDestroyed);
+ return;
+ }
+
+ if (auto parsedError = weakThis->parseInspectorExtensionErrorFromEvaluationResult(result)) {
+ LOG(Inspector, "Internal error encountered while evaluating upon the frontend: %s", inspectorExtensionErrorToString(*parsedError).utf8().data());
+ completionHandler(parsedError);
+ return;
+ }
+
+ completionHandler(WTF::nullopt);
+ });
+}
+
} // namespace WebKit
#endif // ENABLE(INSPECTOR_EXTENSIONS)
Modified: trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.h (273364 => 273365)
--- trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.h 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.h 2021-02-24 01:11:03 UTC (rev 273365)
@@ -67,6 +67,7 @@
void unregisterExtension(const InspectorExtensionID&, CompletionHandler<void(Expected<bool, InspectorExtensionError>)>&&);
void createTabForExtension(const InspectorExtensionID&, const String& tabName, const URL& tabIconURL, const URL& sourceURL, CompletionHandler<void(Expected<InspectorExtensionTabID, InspectorExtensionError>)>&&);
void evaluateScriptForExtension(const InspectorExtensionID&, const String& scriptSource, const Optional<URL>& frameURL, const Optional<URL>& contextSecurityOrigin, const Optional<bool>& useContentScriptContext, CompletionHandler<void(const IPC::DataReference&, const Optional<WebCore::ExceptionDetails>&, const Optional<InspectorExtensionError>&)>&&);
+ void reloadForExtension(const InspectorExtensionID&, const Optional<bool>& ignoreCache, const Optional<String>& userAgent, const Optional<String>& injectedScript, CompletionHandler<void(const Optional<InspectorExtensionError>&)>&&);
private:
JSC::JSObject* unwrapEvaluationResultAsObject(WebCore::InspectorFrontendAPIDispatcher::EvaluationResult);
Modified: trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.messages.in (273364 => 273365)
--- trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.messages.in 2021-02-24 01:05:36 UTC (rev 273364)
+++ trunk/Source/WebKit/WebProcess/Inspector/WebInspectorUIExtensionController.messages.in 2021-02-24 01:11:03 UTC (rev 273365)
@@ -28,6 +28,7 @@
CreateTabForExtension(String extensionID, String tabName, URL tabIconURL, URL sourceURL) -> (Expected<String, WebKit::InspectorExtensionError> result) Async
EvaluateScriptForExtension(String extensionID, String scriptSource, Optional<URL> frameURL, Optional<URL> contextSecurityOrigin, Optional<bool> useContentScriptContext) -> (IPC::DataReference resultData, Optional<WebCore::ExceptionDetails> details, Optional<WebKit::InspectorExtensionError> error) Async
+ ReloadForExtension(String extensionID, Optional<bool> ignoreCache, Optional<String> userAgent, Optional<String> injectedScript) -> (Optional<WebKit::InspectorExtensionError> error) Async
}
#endif // ENABLE(INSPECTOR_EXTENSIONS)