[evolution/wip/mcrha/webkit-jsc-api] Begun to use already defined jsc functions in EWebView
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/wip/mcrha/webkit-jsc-api] Begun to use already defined jsc functions in EWebView
- Date: Fri, 27 Sep 2019 06:49:49 +0000 (UTC)
commit b00fded05574075b2f77b79baea1701e420b7848
Author: Milan Crha <mcrha redhat com>
Date: Fri Sep 27 08:49:43 2019 +0200
Begun to use already defined jsc functions in EWebView
src/e-util/e-web-view-jsc-utils.c | 260 +++++++++++++++++++++-----------------
src/e-util/e-web-view-jsc-utils.h | 12 +-
src/e-util/e-web-view.c | 95 +++-----------
src/e-util/e-web-view.h | 6 +-
src/e-util/test-web-view.c | 18 +--
src/mail/e-mail-display.c | 2 +-
src/web-extensions/ext-utils.js | 35 ++++-
7 files changed, 213 insertions(+), 215 deletions(-)
---
diff --git a/src/e-util/e-web-view-jsc-utils.c b/src/e-util/e-web-view-jsc-utils.c
index 6cb4e99e9c..2a3e37a713 100644
--- a/src/e-util/e-web-view-jsc-utils.c
+++ b/src/e-util/e-web-view-jsc-utils.c
@@ -21,90 +21,6 @@
#include "e-web-view-jsc-utils.h"
-gchar *
-e_web_view_jsc_strdup_call (const gchar *call_format,
- ...)
-{
- GString *script;
- const gchar *ptr;
- va_list va;
-
- g_return_val_if_fail (call_format != NULL, NULL);
-
- script = g_string_sized_new (128);
- va_start (va, call_format);
-
- for (ptr = call_format; *ptr; ptr++) {
- if (*ptr == '\\') {
- g_warn_if_fail (ptr[1]);
-
- g_string_append_c (script, ptr[0]);
- g_string_append_c (script, ptr[1]);
-
- ptr++;
- } else if (*ptr == '%') {
- g_warn_if_fail (ptr[1]);
-
- switch (ptr[1]) {
- case '%':
- g_string_append_c (script, ptr[1]);
- break;
- case 's': {
- const gchar *arg = va_arg (va, const gchar *);
-
- /* Enclose strings into double-quotes */
- g_string_append_c (script, '\"');
-
- /* Escape significant characters */
- if (arg && (strchr (arg, '\"') ||
- strchr (arg, '\\') ||
- strchr (arg, '\n') ||
- strchr (arg, '\r') ||
- strchr (arg, '\t'))) {
- const gchar *ptr2;
-
- for (ptr2 = arg; *ptr2; ptr2++) {
- if (*ptr2 == '\\')
- g_string_append (script, "\\\\");
- else if (*ptr2 == '\"')
- g_string_append (script, "\\\"");
- else if (*ptr2 == '\r')
- g_string_append (script, "\\r");
- else if (*ptr2 == '\n')
- g_string_append (script, "\\n");
- else if (*ptr2 == '\t')
- g_string_append (script, "\\t");
- else
- g_string_append_c (script, *ptr2);
- }
- } else if (arg && *arg) {
- g_string_append (script, arg);
- }
-
- g_string_append_c (script, '\"');
-
- } break;
- case 'd': {
- gint arg = va_arg (va, gint);
-
- g_string_append_printf (script, "%d", arg);
- } break;
- default:
- g_warning ("%s: Unknown percent tag '%c'", G_STRFUNC, *ptr);
- break;
- }
-
- ptr++;
- } else {
- g_string_append_c (script, *ptr);
- }
- }
-
- va_end (va);
-
- return g_string_free (script, FALSE);
-}
-
gboolean
e_web_view_jsc_get_object_property_boolean (JSCValue *jsc_object,
const gchar *property_name,
@@ -199,6 +115,112 @@ e_web_view_jsc_get_object_property_string (JSCValue *jsc_object,
return res;
}
+gchar *
+e_web_view_jsc_printf_script (const gchar *script_format,
+ ...)
+{
+ gchar *script;
+ va_list va;
+
+ g_return_val_if_fail (script_format != NULL, NULL);
+
+ va_start (va, script_format);
+ script = e_web_view_jsc_printf_scriptv (script_format, va);
+ va_end (va);
+
+ return script;
+}
+
+gchar *
+e_web_view_jsc_printf_scriptv (const gchar *script_format,
+ va_list va)
+{
+ GString *script;
+ const gchar *ptr;
+
+ g_return_val_if_fail (script_format != NULL, NULL);
+
+ script = g_string_sized_new (128);
+
+ for (ptr = script_format; *ptr; ptr++) {
+ if (*ptr == '\\') {
+ g_warn_if_fail (ptr[1]);
+
+ g_string_append_c (script, ptr[0]);
+ g_string_append_c (script, ptr[1]);
+
+ ptr++;
+ } else if (*ptr == '%') {
+ g_warn_if_fail (ptr[1]);
+
+ switch (ptr[1]) {
+ case '%':
+ g_string_append_c (script, ptr[1]);
+ break;
+ case 'b': {
+ gboolean arg = va_arg (va, gboolean);
+
+ g_string_append (script, arg ? "true" : "false");
+ } break;
+ case 'd': {
+ gint arg = va_arg (va, gint);
+
+ g_string_append_printf (script, "%d", arg);
+ } break;
+ case 'f': {
+ gdouble arg = va_arg (va, gdouble);
+
+ g_string_append_printf (script, "%f", arg);
+ } break;
+ case 's': {
+ const gchar *arg = va_arg (va, const gchar *);
+
+ /* Enclose strings into double-quotes */
+ g_string_append_c (script, '\"');
+
+ /* Escape significant characters */
+ if (arg && (strchr (arg, '\"') ||
+ strchr (arg, '\\') ||
+ strchr (arg, '\n') ||
+ strchr (arg, '\r') ||
+ strchr (arg, '\t'))) {
+ const gchar *ptr2;
+
+ for (ptr2 = arg; *ptr2; ptr2++) {
+ if (*ptr2 == '\\')
+ g_string_append (script, "\\\\");
+ else if (*ptr2 == '\"')
+ g_string_append (script, "\\\"");
+ else if (*ptr2 == '\r')
+ g_string_append (script, "\\r");
+ else if (*ptr2 == '\n')
+ g_string_append (script, "\\n");
+ else if (*ptr2 == '\t')
+ g_string_append (script, "\\t");
+ else
+ g_string_append_c (script, *ptr2);
+ }
+ } else if (arg && *arg) {
+ g_string_append (script, arg);
+ }
+
+ g_string_append_c (script, '\"');
+
+ } break;
+ default:
+ g_warning ("%s: Unknown percent tag '%c'", G_STRFUNC, *ptr);
+ break;
+ }
+
+ ptr++;
+ } else {
+ g_string_append_c (script, *ptr);
+ }
+ }
+
+ return g_string_free (script, FALSE);
+}
+
static void
ewv_jsc_call_done_cb (GObject *source,
GAsyncResult *result,
@@ -211,8 +233,11 @@ ewv_jsc_call_done_cb (GObject *source,
js_result = webkit_web_view_run_javascript_finish (WEBKIT_WEB_VIEW (source), result, &error);
if (error) {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- g_warning ("Failed to call '%s' function: %s", script, error->message);
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) &&
+ (!g_error_matches (error, WEBKIT_JAVASCRIPT_ERROR, WEBKIT_JAVASCRIPT_ERROR_SCRIPT_FAILED)
||
+ /* WebKit can return empty error message, thus ignore those. */
+ (error->message && *(error->message))))
+ g_warning ("Failed to call '%s' function: %s:%d: %s", script, g_quark_to_string
(error->domain), error->code, error->message);
g_clear_error (&error);
}
@@ -232,6 +257,25 @@ ewv_jsc_call_done_cb (GObject *source,
g_free (script);
}
+void
+e_web_view_jsc_run_script (WebKitWebView *web_view,
+ GCancellable *cancellable,
+ const gchar *script_format,
+ ...)
+{
+ gchar *script;
+ va_list va;
+
+ g_return_if_fail (WEBKIT_IS_WEB_VIEW (web_view));
+ g_return_if_fail (script_format != NULL);
+
+ va_start (va, script_format);
+ script = e_web_view_jsc_printf_scriptv (script_format, va);
+ va_end (va);
+
+ webkit_web_view_run_javascript (web_view, script, cancellable, ewv_jsc_call_done_cb, script);
+}
+
void
e_web_view_jsc_set_element_hidden (WebKitWebView *web_view,
const gchar *iframe_id,
@@ -239,17 +283,14 @@ e_web_view_jsc_set_element_hidden (WebKitWebView *web_view,
gboolean value,
GCancellable *cancellable)
{
- gchar *script;
-
g_return_if_fail (WEBKIT_IS_WEB_VIEW (web_view));
g_return_if_fail (element_id != NULL);
- script = e_web_view_jsc_strdup_call ("Evo.SetElementHidden(%s,%s,%d)",
+ e_web_view_jsc_run_script (web_view, cancellable,
+ "Evo.SetElementHidden(%s,%s,%d)",
iframe_id,
element_id,
value ? 1 : 0);
-
- webkit_web_view_run_javascript (web_view, script, cancellable, ewv_jsc_call_done_cb, script);
}
void
@@ -260,19 +301,16 @@ e_web_view_jsc_set_element_style_property (WebKitWebView *web_view,
const gchar *value,
GCancellable *cancellable)
{
- gchar *script;
-
g_return_if_fail (WEBKIT_IS_WEB_VIEW (web_view));
g_return_if_fail (element_id != NULL);
g_return_if_fail (property_name != NULL);
- script = e_web_view_jsc_strdup_call ("Evo.SetElementStyleProperty(%s,%s,%s,%s)",
+ e_web_view_jsc_run_script (web_view, cancellable,
+ "Evo.SetElementStyleProperty(%s,%s,%s,%s)",
iframe_id,
element_id,
property_name,
value);
-
- webkit_web_view_run_javascript (web_view, script, cancellable, ewv_jsc_call_done_cb, script);
}
void
@@ -284,20 +322,17 @@ e_web_view_jsc_set_element_attribute (WebKitWebView *web_view,
const gchar *value,
GCancellable *cancellable)
{
- gchar *script;
-
g_return_if_fail (WEBKIT_IS_WEB_VIEW (web_view));
g_return_if_fail (element_id != NULL);
g_return_if_fail (qualified_name != NULL);
- script = e_web_view_jsc_strdup_call ("Evo.SetElementAttribute(%s,%s,%s,%s,%s)",
+ e_web_view_jsc_run_script (web_view, cancellable,
+ "Evo.SetElementAttribute(%s,%s,%s,%s,%s)",
iframe_id,
element_id,
namespace_uri,
qualified_name,
value);
-
- webkit_web_view_run_javascript (web_view, script, cancellable, ewv_jsc_call_done_cb, script);
}
void
@@ -307,17 +342,14 @@ e_web_view_jsc_create_css_style_sheet (WebKitWebView *web_view,
const gchar *content,
GCancellable *cancellable)
{
- gchar *script;
-
g_return_if_fail (WEBKIT_IS_WEB_VIEW (web_view));
g_return_if_fail (style_sheet_id != NULL);
- script = e_web_view_jsc_strdup_call ("Evo.CreateCSSStyleSheet(%s,%s,%s)",
+ e_web_view_jsc_run_script (web_view, cancellable,
+ "Evo.CreateCSSStyleSheet(%s,%s,%s)",
iframe_id,
style_sheet_id,
content);
-
- webkit_web_view_run_javascript (web_view, script, cancellable, ewv_jsc_call_done_cb, script);
}
void
@@ -328,18 +360,15 @@ e_web_view_jsc_add_css_rule_into_style_sheet (WebKitWebView *web_view,
const gchar *style,
GCancellable *cancellable)
{
- gchar *script;
-
g_return_if_fail (WEBKIT_IS_WEB_VIEW (web_view));
g_return_if_fail (style_sheet_id != NULL);
- script = e_web_view_jsc_strdup_call ("Evo.AddCSSRuleIntoStyleSheet(%s,%s,%s,%s)",
+ e_web_view_jsc_run_script (web_view, cancellable,
+ "Evo.AddCSSRuleIntoStyleSheet(%s,%s,%s,%s)",
iframe_id,
style_sheet_id,
selector,
style);
-
- webkit_web_view_run_javascript (web_view, script, cancellable, ewv_jsc_call_done_cb, script);
}
void
@@ -348,16 +377,13 @@ e_web_view_jsc_register_element_clicked (WebKitWebView *web_view,
const gchar *elem_classes,
GCancellable *cancellable)
{
- gchar *script;
-
g_return_if_fail (WEBKIT_IS_WEB_VIEW (web_view));
g_return_if_fail (elem_classes != NULL);
- script = e_web_view_jsc_strdup_call ("Evo.RegisterElementClicked(%s,%s)",
+ e_web_view_jsc_run_script (web_view, cancellable,
+ "Evo.RegisterElementClicked(%s,%s)",
iframe_id,
elem_classes);
-
- webkit_web_view_run_javascript (web_view, script, cancellable, ewv_jsc_call_done_cb, script);
}
void
@@ -371,7 +397,7 @@ e_web_view_jsc_get_selection (WebKitWebView *web_view,
g_return_if_fail (WEBKIT_IS_WEB_VIEW (web_view));
- script = e_web_view_jsc_strdup_call ("Evo.GetSelection(%d)", format);
+ script = e_web_view_jsc_printf_script ("Evo.GetSelection(%d)", format);
webkit_web_view_run_javascript (web_view, script, cancellable, callback, user_data);
diff --git a/src/e-util/e-web-view-jsc-utils.h b/src/e-util/e-web-view-jsc-utils.h
index aefc453af2..7351256870 100644
--- a/src/e-util/e-web-view-jsc-utils.h
+++ b/src/e-util/e-web-view-jsc-utils.h
@@ -26,9 +26,6 @@
G_BEGIN_DECLS
-gchar * e_web_view_jsc_strdup_call (const gchar *call_format,
- ...) G_GNUC_PRINTF (1, 2);
-
gboolean e_web_view_jsc_get_object_property_boolean
(JSCValue *jsc_object,
const gchar *property_name,
@@ -46,6 +43,15 @@ gchar * e_web_view_jsc_get_object_property_string
const gchar *property_name,
const gchar *default_value);
+gchar * e_web_view_jsc_printf_script (const gchar *script_format,
+ ...) G_GNUC_PRINTF (1, 2);
+gchar * e_web_view_jsc_printf_scriptv (const gchar *script_format,
+ va_list va);
+void e_web_view_jsc_run_script (WebKitWebView *web_view,
+ GCancellable *cancellable,
+ const gchar *script_format,
+ ...) G_GNUC_PRINTF (3, 4);
+
void e_web_view_jsc_set_element_hidden
(WebKitWebView *web_view,
const gchar *iframe_id,
diff --git a/src/e-util/e-web-view.c b/src/e-util/e-web-view.c
index 9dddfded08..86c2feb702 100644
--- a/src/e-util/e-web-view.c
+++ b/src/e-util/e-web-view.c
@@ -744,21 +744,6 @@ web_view_decide_policy_cb (EWebView *web_view,
return TRUE;
}
-static void
-e_web_view_ensure_body_class (EWebView *web_view)
-{
- guint64 page_id;
-
- g_return_if_fail (E_IS_WEB_VIEW (web_view));
-
- page_id = webkit_web_view_get_page_id (WEBKIT_WEB_VIEW (web_view));
-
- e_web_extension_container_call_simple (web_view->priv->container,
- page_id, web_view->priv->stamp,
- "EWebViewEnsureBodyClass",
- g_variant_new ("(ts)", page_id, "-e-web-view-background-color -e-web-view-text-color"));
-}
-
static void
style_updated_cb (EWebView *web_view)
{
@@ -826,7 +811,9 @@ web_view_load_changed_cb (WebKitWebView *webkit_web_view,
if (load_event != WEBKIT_LOAD_FINISHED)
return;
- e_web_view_ensure_body_class (web_view);
+ /* Make sure the initialize function is called for the top document when it is loaded. */
+ e_web_view_jsc_run_script (webkit_web_view, web_view->priv->load_cancellable,
+ "Evo.InitializeAndPostContentLoaded(null);");
style_updated_cb (web_view);
web_view_update_document_highlights (web_view);
@@ -1049,6 +1036,9 @@ web_view_dispose (GObject *object)
{
EWebViewPrivate *priv;
+ /* This can be called during dispose, thus disconnect early */
+ g_signal_handlers_disconnect_by_func (object, G_CALLBACK (style_updated_cb), NULL);
+
priv = E_WEB_VIEW_GET_PRIVATE (object);
if (priv->load_cancellable) {
@@ -1828,7 +1818,6 @@ e_web_view_page_proxy_changed_cb (EWebExtensionContainer *container,
e_web_view_set_web_extension_proxy (web_view, proxy);
if (proxy) {
- e_web_view_ensure_body_class (web_view);
style_updated_cb (web_view);
}
}
@@ -4513,31 +4502,6 @@ e_web_view_request_finish (EWebView *web_view,
return g_object_ref (async_context->input_stream);
}
-/**
- * e_web_view_create_and_add_css_style_sheet:
- * @web_view: an #EWebView
- * @style_sheet_id: CSS style sheet's id
- *
- * Creates new CSS style sheet with given @style_sheel_id and inserts
- * it into given @web_view document.
- **/
-void
-e_web_view_create_and_add_css_style_sheet (EWebView *web_view,
- const gchar *style_sheet_id)
-{
- guint64 page_id;
-
- g_return_if_fail (E_IS_WEB_VIEW (web_view));
- g_return_if_fail (style_sheet_id && *style_sheet_id);
-
- page_id = webkit_web_view_get_page_id (WEBKIT_WEB_VIEW (web_view));
-
- e_web_extension_container_call_simple (web_view->priv->container,
- page_id, web_view->priv->stamp,
- "CreateAndAddCSSStyleSheet",
- g_variant_new ("(ts)", page_id, style_sheet_id));
-}
-
/**
* e_web_view_add_css_rule_into_style_sheet:
* @web_view: an #EWebView
@@ -4557,19 +4521,14 @@ e_web_view_add_css_rule_into_style_sheet (EWebView *web_view,
const gchar *selector,
const gchar *style)
{
- guint64 page_id;
-
g_return_if_fail (E_IS_WEB_VIEW (web_view));
g_return_if_fail (style_sheet_id && *style_sheet_id);
g_return_if_fail (selector && *selector);
g_return_if_fail (style && *style);
- page_id = webkit_web_view_get_page_id (WEBKIT_WEB_VIEW (web_view));
-
- e_web_extension_container_call_simple (web_view->priv->container,
- page_id, web_view->priv->stamp,
- "AddCSSRuleIntoStyleSheet",
- g_variant_new ("(tsss)", page_id, style_sheet_id, selector, style));
+ e_web_view_jsc_add_css_rule_into_style_sheet (WEBKIT_WEB_VIEW (web_view),
+ "", style_sheet_id, selector, style,
+ web_view->priv->load_cancellable);
}
/**
@@ -4794,38 +4753,27 @@ e_web_view_set_element_hidden (EWebView *web_view,
const gchar *element_id,
gboolean hidden)
{
- guint64 page_id;
-
g_return_if_fail (E_IS_WEB_VIEW (web_view));
g_return_if_fail (element_id && *element_id);
- page_id = webkit_web_view_get_page_id (WEBKIT_WEB_VIEW (web_view));
-
- e_web_extension_container_call_simple (web_view->priv->container,
- page_id, web_view->priv->stamp,
- "SetElementHidden",
- g_variant_new ("(tsb)", page_id, element_id, hidden));
+ e_web_view_jsc_set_element_hidden (WEBKIT_WEB_VIEW (web_view),
+ "*", element_id, hidden,
+ web_view->priv->load_cancellable);
}
void
e_web_view_set_element_style_property (EWebView *web_view,
const gchar *element_id,
const gchar *property_name,
- const gchar *value,
- const gchar *priority)
+ const gchar *value)
{
- guint64 page_id;
-
g_return_if_fail (E_IS_WEB_VIEW (web_view));
g_return_if_fail (element_id && *element_id);
g_return_if_fail (property_name && *property_name);
- page_id = webkit_web_view_get_page_id (WEBKIT_WEB_VIEW (web_view));
-
- e_web_extension_container_call_simple (web_view->priv->container,
- page_id, web_view->priv->stamp,
- "SetElementStyleProperty",
- g_variant_new ("(tssss)", page_id, element_id, property_name, value ? value : "", priority ?
priority : ""));
+ e_web_view_jsc_set_element_style_property (WEBKIT_WEB_VIEW (web_view),
+ "*", element_id, property_name, value,
+ web_view->priv->load_cancellable);
}
void
@@ -4835,16 +4783,11 @@ e_web_view_set_element_attribute (EWebView *web_view,
const gchar *qualified_name,
const gchar *value)
{
- guint64 page_id;
-
g_return_if_fail (E_IS_WEB_VIEW (web_view));
g_return_if_fail (element_id && *element_id);
g_return_if_fail (qualified_name && *qualified_name);
- page_id = webkit_web_view_get_page_id (WEBKIT_WEB_VIEW (web_view));
-
- e_web_extension_container_call_simple (web_view->priv->container,
- page_id, web_view->priv->stamp,
- "SetElementAttribute",
- g_variant_new ("(tssss)", page_id, element_id, namespace_uri ? namespace_uri : "",
qualified_name, value ? value : ""));
+ e_web_view_jsc_set_element_attribute (WEBKIT_WEB_VIEW (web_view),
+ "*", element_id, namespace_uri, qualified_name, value,
+ web_view->priv->load_cancellable);
}
diff --git a/src/e-util/e-web-view.h b/src/e-util/e-web-view.h
index 5d2d66eede..f98f43fa04 100644
--- a/src/e-util/e-web-view.h
+++ b/src/e-util/e-web-view.h
@@ -267,9 +267,6 @@ GInputStream * e_web_view_request_finish (EWebView *web_view,
void e_web_view_install_request_handler
(EWebView *web_view,
GType handler_type);
-void e_web_view_create_and_add_css_style_sheet
- (EWebView *web_view,
- const gchar *style_sheet_id);
void e_web_view_add_css_rule_into_style_sheet
(EWebView *web_view,
const gchar *style_sheet_id,
@@ -302,8 +299,7 @@ void e_web_view_set_element_style_property
(EWebView *web_view,
const gchar *element_id,
const gchar *property_name,
- const gchar *value,
- const gchar *priority);
+ const gchar *value);
void e_web_view_set_element_attribute
(EWebView *web_view,
const gchar *element_id,
diff --git a/src/e-util/test-web-view.c b/src/e-util/test-web-view.c
index c1af5516a4..bbbc78947b 100644
--- a/src/e-util/test-web-view.c
+++ b/src/e-util/test-web-view.c
@@ -427,7 +427,7 @@ test_utils_load_iframe_content (TestFixture *fixture,
handler_id = g_signal_connect (fixture->web_view, "content-loaded",
G_CALLBACK (test_utils_iframe_loaded_cb), fixture);
- script = e_web_view_jsc_strdup_call ("Evo.SetIFrameContent(%s,%s)", iframe_id, content);
+ script = e_web_view_jsc_printf_script ("Evo.SetIFrameContent(%s,%s)", iframe_id, content);
test_utils_jsc_call (fixture, script);
@@ -518,7 +518,7 @@ test_jsc_object_properties (TestFixture *fixture)
JSCValue *jsc_object = NULL;
gchar *str;
- str = e_web_view_jsc_strdup_call (
+ str = e_web_view_jsc_printf_script (
"test_obj_props = function()\n"
"{\n"
" var arrobj = [];\n"
@@ -772,7 +772,7 @@ test_style_sheets (TestFixture *fixture)
NULL);
g_assert_cmpint (1, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"\")"));
- g_assert_cmpint (1, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1\")"));
+ g_assert_cmpint (0, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1\")"));
g_assert_cmpint (0, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1_1\")"));
g_assert_cmpint (0, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm2\")"));
test_utils_jsc_call_string_and_verify (fixture, "Test.getStyle(\"\", \"sheet1\", \"body\",
\"color\")", NULL);
@@ -781,7 +781,7 @@ test_style_sheets (TestFixture *fixture)
test_utils_wait_noop (fixture);
g_assert_cmpint (2, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"\")"));
- g_assert_cmpint (1, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1\")"));
+ g_assert_cmpint (0, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1\")"));
g_assert_cmpint (0, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1_1\")"));
g_assert_cmpint (0, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm2\")"));
test_utils_jsc_call_string_and_verify (fixture, "Test.getStyle(\"\", \"sheet1\", \"body\",
\"color\")", "green");
@@ -791,7 +791,7 @@ test_style_sheets (TestFixture *fixture)
test_utils_wait_noop (fixture);
g_assert_cmpint (2, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"\")"));
- g_assert_cmpint (1, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1\")"));
+ g_assert_cmpint (0, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1\")"));
g_assert_cmpint (1, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1_1\")"));
g_assert_cmpint (0, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm2\")"));
test_utils_jsc_call_string_and_verify (fixture, "Test.getStyle(\"\", \"sheet1\", \"body\",
\"color\")", "green");
@@ -805,7 +805,7 @@ test_style_sheets (TestFixture *fixture)
test_utils_wait_noop (fixture);
g_assert_cmpint (3, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"\")"));
- g_assert_cmpint (2, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1\")"));
+ g_assert_cmpint (1, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1\")"));
g_assert_cmpint (2, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm1_1\")"));
g_assert_cmpint (1, ==, test_utils_jsc_call_int32_sync (fixture, "Test.nStyles(\"frm2\")"));
test_utils_jsc_call_string_and_verify (fixture, "Test.getStyle(\"\", \"sheet1\", \"body\",
\"color\")", "green");
@@ -864,7 +864,7 @@ test_verify_element_clicked (TestFixture *fixture,
expects->element_class = element_class;
expects->element_value = element_value;
- script = e_web_view_jsc_strdup_call ("Evo.findIFrameDocument(%s).getElementById(%s).click();",
+ script = e_web_view_jsc_printf_script ("Evo.findIFrameDocument(%s).getElementById(%s).click();",
iframe_id, element_id);
test_utils_jsc_call (fixture, script);
@@ -978,7 +978,7 @@ test_verify_need_input (TestFixture *fixture,
if (iframe_id) {
gchar *script;
- script = e_web_view_jsc_strdup_call ("Evo.findIFrameDocument(%s).getElementById(%s).focus();",
+ script = e_web_view_jsc_printf_script
("Evo.findIFrameDocument(%s).getElementById(%s).focus();",
iframe_id, element_id);
test_utils_jsc_call (fixture, script);
@@ -1057,7 +1057,7 @@ test_selection_select_in_iframe (TestFixture *fixture,
{
gchar *script;
- script = e_web_view_jsc_strdup_call (
+ script = e_web_view_jsc_printf_script (
/* Clean selection in both places first, otherwise the previous selection
can stay when changing it only in one of them. */
"Evo.findIFrameDocument(\"\").defaultView.getSelection().empty();\n"
diff --git a/src/mail/e-mail-display.c b/src/mail/e-mail-display.c
index 0a18d284da..9257d9fd61 100644
--- a/src/mail/e-mail-display.c
+++ b/src/mail/e-mail-display.c
@@ -749,7 +749,7 @@ mail_attachment_change_zoom (EMailDisplay *display,
element_id = g_strdup_printf ("attachment-wrapper-%p::child", attachment);
- e_web_view_set_element_style_property (E_WEB_VIEW (display), element_id, "max-width",
max_width, "");
+ e_web_view_set_element_style_property (E_WEB_VIEW (display), element_id, "max-width",
max_width);
g_free (element_id);
}
diff --git a/src/web-extensions/ext-utils.js b/src/web-extensions/ext-utils.js
index ab083b2547..321b80b518 100644
--- a/src/web-extensions/ext-utils.js
+++ b/src/web-extensions/ext-utils.js
@@ -44,6 +44,28 @@ Evo.findIFrameDocument = function(iframe_id)
return document;
}
+Evo.findElementInDocument = function(doc, element_id)
+{
+ var elem, iframes, ii;
+
+ if (!doc)
+ return null;
+
+ elem = doc.getElementById(element_id);
+ if (elem)
+ return elem;
+
+ iframes = doc.getElementsByTagName("iframe");
+
+ for (ii = 0; ii < iframes.length; ii++) {
+ elem = Evo.findElementInDocument(iframes[ii].contentDocument, element_id);
+ if (elem)
+ return elem;
+ }
+
+ return null;
+}
+
Evo.findElement = function(iframe_id, element_id)
{
var iframe;
@@ -51,6 +73,10 @@ Evo.findElement = function(iframe_id, element_id)
if (iframe_id == "")
return document.getElementById(element_id);
+ if (iframe_id == "*") {
+ return Evo.findElementInDocument(document, element_id);
+ }
+
iframe = Evo.findIFrame(iframe_id);
if (!iframe)
@@ -136,9 +162,9 @@ Evo.addCSSRuleIntoStyleSheetDocument = function(doc, style_sheet_id, selector, s
return;
}
- for (ii = 0; ii < style.cssRules.length; ii++) {
- if (style.cssRules[ii].selectorText == selector) {
- style.cssRules[ii].style.cssText = style;
+ for (ii = 0; ii < styleobj.sheet.cssRules.length; ii++) {
+ if (styleobj.sheet.cssRules[ii].selectorText == selector) {
+ styleobj.sheet.cssRules[ii].style.cssText = style;
return;
}
}
@@ -421,9 +447,10 @@ Evo.InitializeAndPostContentLoaded = function(elem)
window.webkit.messageHandlers.contentLoaded.postMessage(iframe_id);
}
+
if (this instanceof Window && this.document) {
this.document.onload = function() { Evo.InitializeAndPostContentLoaded(this); };
- if (this.document.body.firstChild)
+ if (this.document.body && this.document.body.firstChild)
Evo.InitializeAndPostContentLoaded(this.document);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]