summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Griffis <pgriffis@igalia.com>2022-07-17 18:12:46 -0500
committerPatrick Griffis <pgriffis@igalia.com>2022-07-17 18:24:59 -0500
commit168ac37c751e78766b79618e1dcf982125338258 (patch)
tree4914e6b8e3f54d192d07068f1dfea8c15215ad91
parent5bd486a5a9cafb2785d27777ddb387eca26b401e (diff)
downloadepiphany-pgriffis/web-extension/unify-web-process-extensions.tar.gz
WebExtensions: Implement runtime.getManifest()pgriffis/web-extension/unify-web-process-extensions
Closes #1822
-rw-r--r--embed/web-process-extension/ephy-web-process-extension.c6
-rw-r--r--embed/web-process-extension/ephy-webextension-common.c20
-rw-r--r--embed/web-process-extension/ephy-webextension-common.h3
-rw-r--r--embed/web-process-extension/resources/js/webextensions-common.js2
-rw-r--r--src/webextension/ephy-web-extension-manager.c1
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));