[epiphany] Clear various WebKit DOM objects after using them
- From: Tomas Popela <tpopela src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany] Clear various WebKit DOM objects after using them
- Date: Wed, 27 Jul 2016 14:27:44 +0000 (UTC)
commit d82b3eca7a408df42b8b1f483a4e8cb060e5d3e3
Author: Tomas Popela <tpopela redhat com>
Date: Wed Jul 27 16:16:00 2016 +0200
Clear various WebKit DOM objects after using them
embed/web-extension/ephy-web-dom-utils.c | 33 +++++++++++++++++++++++------
embed/web-extension/ephy-web-extension.c | 1 +
embed/web-extension/ephy-web-overview.c | 10 +++++++-
3 files changed, 35 insertions(+), 9 deletions(-)
---
diff --git a/embed/web-extension/ephy-web-dom-utils.c b/embed/web-extension/ephy-web-dom-utils.c
index df8408e..cc79509 100644
--- a/embed/web-extension/ephy-web-dom-utils.c
+++ b/embed/web-extension/ephy-web-dom-utils.c
@@ -41,6 +41,7 @@ ephy_web_dom_utils_has_modified_forms (WebKitDOMDocument *document)
WebKitDOMHTMLCollection *forms;
gulong forms_n;
guint i;
+ gboolean modified_forms = FALSE;
forms = webkit_dom_document_get_forms (document);
forms_n = webkit_dom_html_collection_get_length (forms);
@@ -69,8 +70,11 @@ ephy_web_dom_utils_has_modified_forms (WebKitDOMDocument *document)
has_data = text && *text;
g_free (text);
- if (has_data)
- return TRUE;
+ if (has_data) {
+ g_object_unref (elements);
+ modified_forms = TRUE;
+ goto out;
+ }
}
if (WEBKIT_DOM_IS_HTML_INPUT_ELEMENT (element))
@@ -82,8 +86,11 @@ ephy_web_dom_utils_has_modified_forms (WebKitDOMDocument *document)
* modified and it does not have a lot of text the user is
* likely not very interested in saving this work, so do
* nothing (eg, google search input). */
- if (modified_input_element)
- return TRUE;
+ if (modified_input_element) {
+ g_object_unref (elements);
+ modified_forms = TRUE;
+ goto out;
+ }
modified_input_element = TRUE;
@@ -91,13 +98,19 @@ ephy_web_dom_utils_has_modified_forms (WebKitDOMDocument *document)
length = g_utf8_strlen (text, -1);
g_free (text);
- if (length > 50)
- return TRUE;
+ if (length > 50) {
+ g_object_unref (elements);
+ modified_forms = TRUE;
+ goto out;
+ }
}
}
+ g_object_unref (elements);
}
- return FALSE;
+ out:
+ g_object_unref (forms);
+ return modified_forms;
}
/**
@@ -138,6 +151,7 @@ ephy_web_dom_utils_get_application_title (WebKitDOMDocument *document)
g_free (property);
g_free (name);
}
+ g_object_unref (metas);
return title;
}
@@ -226,6 +240,7 @@ get_icon_from_html_icon (WebKitDOMDocument *document,
else
g_free (rel);
}
+ g_object_unref (links);
ret = (image != NULL && *image != '\0');
@@ -268,6 +283,7 @@ get_icon_from_mstile (WebKitDOMDocument *document,
}
}
}
+ g_object_unref (metas);
ret = (image != NULL && *image != '\0');
@@ -306,6 +322,7 @@ get_icon_from_ogp (WebKitDOMDocument *document,
g_free (property);
g_free (itemprop);
}
+ g_object_unref (metas);
ret = (image != NULL && *image != '\0');
@@ -345,6 +362,7 @@ get_icon_from_touch_icon (WebKitDOMDocument *document,
}
g_free (rel);
}
+ g_object_unref (links);
/* TODO: Try to retrieve /apple-touch-icon.png, and return it if it exist. */
@@ -382,6 +400,7 @@ get_icon_from_favicon (WebKitDOMDocument *document,
}
g_free (rel);
}
+ g_object_unref (links);
/* Last ditch effort: just fallback to the default favicon location. */
if (image == NULL)
diff --git a/embed/web-extension/ephy-web-extension.c b/embed/web-extension/ephy-web-extension.c
index 0ea5cf0..75524fc 100644
--- a/embed/web-extension/ephy-web-extension.c
+++ b/embed/web-extension/ephy-web-extension.c
@@ -266,6 +266,7 @@ request_decision_on_storing (EphyEmbedFormAuth *form_auth)
g_warning ("Error sending formAuthData message");
}
+ g_object_unref (dom_window);
g_free (message);
g_object_unref (form_auth);
}
diff --git a/embed/web-extension/ephy-web-overview.c b/embed/web-extension/ephy-web-overview.c
index 379a51c..0557a5a 100644
--- a/embed/web-extension/ephy-web-overview.c
+++ b/embed/web-extension/ephy-web-overview.c
@@ -161,6 +161,7 @@ ephy_web_overview_model_urls_changed (EphyWebOverviewModel *model,
} else {
webkit_dom_element_remove_attribute (item->thumbnail, "style");
}
+ g_clear_object (&class_list);
} else {
WebKitDOMDocument *document;
WebKitDOMElement *item_list, *anchor;
@@ -308,12 +309,16 @@ ephy_web_overview_update_thumbnail_in_model_from_element (EphyWebOverview *over
char *thumbnail_path;
style = webkit_dom_element_get_style (thumbnail);
- if (webkit_dom_css_style_declaration_is_property_implicit (style, "background"))
+ if (webkit_dom_css_style_declaration_is_property_implicit (style, "background")) {
+ g_object_unref (style);
return;
+ }
background = webkit_dom_css_style_declaration_get_property_value (style, "background");
- if (!background)
+ if (!background) {
+ g_object_unref (style);
return;
+ }
thumbnail_path = g_strrstr (background, "file://");
if (thumbnail_path) {
@@ -337,6 +342,7 @@ ephy_web_overview_update_thumbnail_in_model_from_element (EphyWebOverview *over
update_thumbnail_element_style (thumbnail, path);
}
g_free (background);
+ g_object_unref (style);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]