From 168ac37c751e78766b79618e1dcf982125338258 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Sun, 17 Jul 2022 18:12:46 -0500 Subject: WebExtensions: Implement runtime.getManifest() Closes #1822 --- .../ephy-web-process-extension.c | 6 ++++-- .../web-process-extension/ephy-webextension-common.c | 20 +++++++++++++++++++- .../web-process-extension/ephy-webextension-common.h | 3 ++- .../resources/js/webextensions-common.js | 2 +- src/webextension/ephy-web-extension-manager.c | 1 + 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/embed/web-process-extension/ephy-web-process-extension.c b/embed/web-process-extension/ephy-web-process-extension.c index 274d20681..507db2e61 100644 --- a/embed/web-process-extension/ephy-web-process-extension.c +++ b/embed/web-process-extension/ephy-web-process-extension.c @@ -389,7 +389,8 @@ content_script_window_object_cleared_cb (WebKitScriptWorld *world, frame, js_context, guid, - extension_data->translations); + extension_data->translations, + extension_data->manifest); } static void @@ -904,7 +905,8 @@ default_window_object_cleared_cb (WebKitScriptWorld *world, frame, js_context, guid, - extension_data->translations); + extension_data->translations, + extension_data->manifest); js_browser = jsc_context_get_value (js_context, "browser"); js_extension = jsc_value_object_get_property (js_browser, "extension"); diff --git a/embed/web-process-extension/ephy-webextension-common.c b/embed/web-process-extension/ephy-webextension-common.c index 41d36df39..f0f211073 100644 --- a/embed/web-process-extension/ephy-webextension-common.c +++ b/embed/web-process-extension/ephy-webextension-common.c @@ -156,6 +156,13 @@ js_geturl (const char *path, return g_strdup_printf ("ephy-webextension://%s/%s", guid, path[0] == '/' ? path + 1 : path); } +static JSCValue * +js_getmanifest (gpointer user_data) +{ + JSCValue *manifest_object = user_data; + return g_object_ref (manifest_object); +} + static void js_exception_handler (JSCContext *context, JSCException *exception) @@ -178,7 +185,8 @@ ephy_webextension_install_common_apis (WebKitWebPage *page, WebKitFrame *frame, JSCContext *js_context, const char *guid, - JsonObject *translations) + JsonObject *translations, + const char *manifest) { g_autoptr (JSCValue) result = NULL; g_autoptr (JSCValue) js_browser = NULL; @@ -186,6 +194,7 @@ ephy_webextension_install_common_apis (WebKitWebPage *page, g_autoptr (JSCValue) js_extension = NULL; g_autoptr (JSCValue) js_function = NULL; g_autoptr (JSCValue) js_object = NULL; + g_autoptr (JSCValue) manifest_object = NULL; EphySendMessageData *send_message_data; jsc_context_push_exception_handler (js_context, (JSCExceptionHandler)js_exception_handler, NULL, NULL); @@ -230,6 +239,15 @@ ephy_webextension_install_common_apis (WebKitWebPage *page, jsc_value_object_set_property (js_extension, "getURL", js_function); g_clear_object (&js_function); + manifest_object = jsc_value_new_from_json (js_context, manifest); + js_function = jsc_value_new_function (js_context, + NULL, + G_CALLBACK (js_getmanifest), g_object_ref (manifest_object), g_object_unref, + JSC_TYPE_VALUE, + 0); + jsc_value_object_set_property (js_extension, "getManifest", js_function); + g_clear_object (&js_function); + /* global functions */ send_message_data = g_new (EphySendMessageData, 1); send_message_data->page = page; diff --git a/embed/web-process-extension/ephy-webextension-common.h b/embed/web-process-extension/ephy-webextension-common.h index cda5e308e..77e6aa1ec 100644 --- a/embed/web-process-extension/ephy-webextension-common.h +++ b/embed/web-process-extension/ephy-webextension-common.h @@ -31,6 +31,7 @@ void ephy_webextension_install_common_apis (WebKitWebPage *page, WebKitFrame *frame, JSCContext *js_context, const char *guid, - JsonObject *translations); + JsonObject *translations, + const char *manifest); G_END_DECLS diff --git a/embed/web-process-extension/resources/js/webextensions-common.js b/embed/web-process-extension/resources/js/webextensions-common.js index 86c8d8460..965873d58 100644 --- a/embed/web-process-extension/resources/js/webextensions-common.js +++ b/embed/web-process-extension/resources/js/webextensions-common.js @@ -84,7 +84,7 @@ const ephy_message = function (fn, args) { window.browser.runtime = { getURL: function (args) { return window.browser.extension.getURL(args); }, - getManifest: function () { return {}; }, + getManifest: function () { return window.browser.extension.getManifest(); }, onMessage: new EphyEventListener (), onConnect: new EphyEventListener (), sendMessage: function (...args) { diff --git a/src/webextension/ephy-web-extension-manager.c b/src/webextension/ephy-web-extension-manager.c index 124f1c90b..01079ff25 100644 --- a/src/webextension/ephy-web-extension-manager.c +++ b/src/webextension/ephy-web-extension-manager.c @@ -115,6 +115,7 @@ create_extension_data_variant (EphyWebExtension *extension) g_auto (GVariantDict) dict = G_VARIANT_DICT_INIT (NULL); g_autofree char *translations = get_translation_contents (extension); + /* FIXME: The manifest is not localized. */ g_variant_dict_insert (&dict, "manifest", "s", ephy_web_extension_get_manifest (extension)); g_variant_dict_insert (&dict, "translations", "s", translations); g_variant_dict_insert (&dict, "has-background-page", "b", ephy_web_extension_has_background_web_view (extension)); -- cgit v1.2.1