[epiphany/pgriffis/web-extension/tabs: 3/5] WebExtensions: Implement tabs.getZoom() and tabs.setZoom()
- From: Patrick Griffis <pgriffis src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany/pgriffis/web-extension/tabs: 3/5] WebExtensions: Implement tabs.getZoom() and tabs.setZoom()
- Date: Fri, 3 Jun 2022 01:36:12 +0000 (UTC)
commit e0d13e3869976e2ea90492047472c33a183c821c
Author: Patrick Griffis <pgriffis igalia com>
Date: Thu Jun 2 17:30:53 2022 -0500
WebExtensions: Implement tabs.getZoom() and tabs.setZoom()
.../resources/js/webextensions.js | 2 +
src/webextension/api/tabs.c | 79 +++++++++++++++++++++-
2 files changed, 80 insertions(+), 1 deletion(-)
---
diff --git a/embed/web-process-extension/resources/js/webextensions.js
b/embed/web-process-extension/resources/js/webextensions.js
index 8694656f6..952993ad6 100644
--- a/embed/web-process-extension/resources/js/webextensions.js
+++ b/embed/web-process-extension/resources/js/webextensions.js
@@ -26,6 +26,8 @@ window.browser.tabs = {
remove: function (...args) { return ephy_message ('tabs.remove', args); },
removeCSS: function (...args) { return ephy_message ('tabs.removeCSS', args); },
sendMessage: function (...args) { return ephy_message ('tabs.sendMessage', args); },
+ getZoom: function (...args) { return ephy_message ('tabs.getZoom', args); },
+ setZoom: function (...args) { return ephy_message ('tabs.setZoom', args); },
onActivated: new EphyEventListener (),
onAttached: new EphyEventListener (),
onCreated: new EphyEventListener (),
diff --git a/src/webextension/api/tabs.c b/src/webextension/api/tabs.c
index 8df12f66a..16bf63d24 100644
--- a/src/webextension/api/tabs.c
+++ b/src/webextension/api/tabs.c
@@ -664,10 +664,85 @@ tabs_handler_remove (EphyWebExtension *self,
g_set_error_literal (error, WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_INVALID_ARGUMENT, "tabs.remove():
First argument is not a number or array.");
return NULL;
}
- g_set_error_literal (error, WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_INVALID_ARGUMENT, "tabs.close():
First argument is not a number or array.");
+
+static char *
+tabs_handler_set_zoom (EphyWebExtension *self,
+ char *name,
+ JSCValue *args,
+ gint64 extension_page_id,
+ GError **error)
+{
+ EphyShell *shell = ephy_shell_get_default ();
+ g_autoptr (JSCValue) zoom_level_value = NULL;
+ g_autoptr (JSCValue) tab_id_value = NULL;
+ WebKitWebView *web_view;
+ int tab_id = -1;
+ double zoom_level;
+
+ /* First arg is optional tabId, second zoomFactor. */
+ zoom_level_value = jsc_value_object_get_property_at_index (args, 1);
+ if (jsc_value_is_undefined (zoom_level_value)) {
+ g_object_unref (zoom_level_value);
+ zoom_level_value = jsc_value_object_get_property_at_index (args, 0);
+ } else {
+ tab_id_value = jsc_value_object_get_property_at_index (args, 0);
+ tab_id = jsc_value_to_int32 (tab_id_value);
+ }
+
+ if (!jsc_value_is_number (zoom_level_value)) {
+ g_set_error_literal (error, WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_INVALID_ARGUMENT, "tabs.setZoom():
Missing zoomFactor.");
+ return NULL;
+ }
+
+ zoom_level = jsc_value_to_double (zoom_level_value);
+ if (zoom_level < 0.3 || zoom_level > 5) {
+ g_set_error_literal (error, WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_INVALID_ARGUMENT, "tabs.setZoom():
zoomFactor must be between 0.3 and 5.0.");
+ return NULL;
+ }
+
+ if (tab_id >= 0)
+ web_view = get_web_view_for_tab_id (shell, tab_id, NULL);
+ else
+ web_view = WEBKIT_WEB_VIEW (ephy_shell_get_active_web_view (shell));
+
+ if (!web_view) {
+ g_set_error (error, WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_INVALID_ARGUMENT, "tabs.setZoom(): Failed
to find tabId %d.", tab_id);
+ return NULL;
+ }
+
+ webkit_web_view_set_zoom_level (web_view, jsc_value_to_double (zoom_level_value));
return NULL;
}
+static char *
+tabs_handler_get_zoom (EphyWebExtension *self,
+ char *name,
+ JSCValue *args,
+ gint64 extension_page_id,
+ GError **error)
+{
+ EphyShell *shell = ephy_shell_get_default ();
+ g_autoptr (JSCValue) tab_id_value = NULL;
+ WebKitWebView *web_view;
+ int tab_id = -1;
+
+ tab_id_value = jsc_value_object_get_property_at_index (args, 0);
+ if (jsc_value_is_number (tab_id_value))
+ tab_id = jsc_value_to_int32 (tab_id_value);
+
+ if (tab_id >= 0)
+ web_view = get_web_view_for_tab_id (shell, tab_id, NULL);
+ else
+ web_view = WEBKIT_WEB_VIEW (ephy_shell_get_active_web_view (shell));
+
+ if (!web_view) {
+ g_set_error (error, WEB_EXTENSION_ERROR, WEB_EXTENSION_ERROR_INVALID_ARGUMENT, "tabs.getZoom(): Failed
to find tabId %d.", tab_id);
+ return NULL;
+ }
+
+ return g_strdup_printf ("%f", webkit_web_view_get_zoom_level (web_view));
+}
+
static EphyWebExtensionSyncApiHandler tabs_handlers[] = {
{"create", tabs_handler_create},
{"query", tabs_handler_query},
@@ -677,6 +752,8 @@ static EphyWebExtensionSyncApiHandler tabs_handlers[] = {
{"get", tabs_handler_get},
{"executeScript", tabs_handler_execute_script},
{"sendMessage", tabs_handler_send_message},
+ {"getZoom", tabs_handler_get_zoom},
+ {"setZoom", tabs_handler_set_zoom},
};
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]