[evolution/wip/webkit2] Bug 744401 - Many WebKitDom objects leaked for every message viewed



commit 61b820f2f73006473564c790809b429493861bfc
Author: Tomas Popela <tpopela redhat com>
Date:   Wed Mar 25 16:44:37 2015 +0100

    Bug 744401 - Many WebKitDom objects leaked for every message viewed
    
    Follow-up fix that fixes the leak of two strings introduced with
    previous fix to this bug. Also unref all the used objects from various
    lists that WebKit returns after they are used.

 web-extensions/e-composer-private-dom-functions.c  |    3 +
 web-extensions/e-dom-utils.c                       |   21 +++++-
 .../e-html-editor-cell-dialog-dom-functions.c      |    4 +-
 .../e-html-editor-selection-dom-functions.c        |   47 +++++++++---
 web-extensions/e-html-editor-view-dom-functions.c  |   76 ++++++++++++++++---
 web-extensions/e-msg-composer-dom-functions.c      |    2 +
 6 files changed, 124 insertions(+), 29 deletions(-)
---
diff --git a/web-extensions/e-composer-private-dom-functions.c 
b/web-extensions/e-composer-private-dom-functions.c
index d549867..2d29412 100644
--- a/web-extensions/e-composer-private-dom-functions.c
+++ b/web-extensions/e-composer-private-dom-functions.c
@@ -73,11 +73,13 @@ dom_remove_signatures (WebKitDOMDocument *document,
                        }
                        /* We have to remove the div containing the span with signature */
                        remove_node (wrapper);
+                       g_object_unref (wrapper);
 
                        g_free (id);
                        break;
                }
 
+               g_object_unref (wrapper);
                g_free (id);
        }
        g_object_unref (signatures);
@@ -203,6 +205,7 @@ composer_move_caret (WebKitDOMDocument *document,
                } else
                        element = WEBKIT_DOM_ELEMENT (body);
 
+               g_object_unref (list);
                goto move_caret;
        }
 
diff --git a/web-extensions/e-dom-utils.c b/web-extensions/e-dom-utils.c
index e94693c..0c6928b 100644
--- a/web-extensions/e-dom-utils.c
+++ b/web-extensions/e-dom-utils.c
@@ -210,6 +210,7 @@ get_frame_selection_html (WebKitDOMElement *iframe)
                text = get_frame_selection_html (
                        WEBKIT_DOM_ELEMENT (node));
 
+               g_object_unref (node);
                if (text != NULL) {
                        g_object_unref (frames);
                        return text;
@@ -242,8 +243,11 @@ e_dom_utils_get_selection_content_html (WebKitDOMDocument *document)
                text = get_frame_selection_html (
                        WEBKIT_DOM_ELEMENT (node));
 
-               if (text != NULL)
+               g_object_unref (node);
+               if (text != NULL) {
+                       g_object_unref (frames);
                        return text;
+               }
        }
 
        g_object_unref (frames);
@@ -287,6 +291,7 @@ get_frame_selection_content_text (WebKitDOMElement *iframe)
                text = get_frame_selection_content_text (
                        WEBKIT_DOM_ELEMENT (node));
 
+               g_object_unref (node);
                if (text != NULL) {
                        g_object_unref (frames);
                        return text;
@@ -315,6 +320,7 @@ e_dom_utils_get_selection_content_text (WebKitDOMDocument *document)
                text = get_frame_selection_content_text (
                        WEBKIT_DOM_ELEMENT (node));
 
+               g_object_unref (node);
                if (text != NULL) {
                        g_object_unref (frames);
                        return text;
@@ -388,7 +394,7 @@ add_css_rule_into_style_sheet (WebKitDOMDocument *document,
                rule = webkit_dom_css_rule_list_item (rules_list, ii);
 
                if (!WEBKIT_DOM_IS_CSS_RULE (rule))
-                       continue;
+                       goto next;
 
                rule_text = webkit_dom_css_rule_get_css_text (rule);
 
@@ -396,7 +402,7 @@ add_css_rule_into_style_sheet (WebKitDOMDocument *document,
                selector_end = g_strstr_len (rule_text, -1, " {");
                if (!selector_end) {
                        g_free (rule_text);
-                       continue;
+                       goto next;
                }
 
                rule_selector =
@@ -411,11 +417,16 @@ add_css_rule_into_style_sheet (WebKitDOMDocument *document,
                                WEBKIT_DOM_CSS_STYLE_SHEET (sheet),
                                ii, NULL);
                        length--;
+                       g_free (rule_selector);
+                       g_free (rule_text);
+                       g_object_unref (rule);
                        break;
                }
 
                g_free (rule_selector);
+ next:
                g_free (rule_text);
+               g_object_unref (rule);
        }
 
        g_object_unref (rules_list);
@@ -462,6 +473,7 @@ add_css_rule_into_style_sheet_recursive (WebKitDOMDocument *document,
                        style_sheet_id,
                        selector,
                        style);
+               g_object_unref (node);
        }
        g_object_unref (frames);
 }
@@ -658,6 +670,7 @@ e_dom_utils_bind_dom (WebKitDOMDocument *document,
                webkit_dom_event_target_add_event_listener (
                        WEBKIT_DOM_EVENT_TARGET (node), event,
                        G_CALLBACK (callback), FALSE, user_data);
+               g_object_unref (node);
        }
        g_object_unref (nodes);
 }
@@ -844,6 +857,7 @@ e_dom_utils_find_element_by_selector (WebKitDOMDocument *document,
 
                element = e_dom_utils_find_element_by_id (content_document, selector);
 
+               g_object_unref (iframe);
                if (element != NULL) {
                        g_object_unref (frames);
                        return element;
@@ -886,6 +900,7 @@ e_dom_utils_find_element_by_id (WebKitDOMDocument *document,
 
                element = e_dom_utils_find_element_by_id (content_document, id);
 
+               g_object_unref (iframe);
                if (element != NULL) {
                        g_object_unref (frames);
                        return element;
diff --git a/web-extensions/e-html-editor-cell-dialog-dom-functions.c 
b/web-extensions/e-html-editor-cell-dialog-dom-functions.c
index d23a7c1..9404fa9 100644
--- a/web-extensions/e-html-editor-cell-dialog-dom-functions.c
+++ b/web-extensions/e-html-editor-cell-dialog-dom-functions.c
@@ -200,7 +200,9 @@ cell_set_header_style (WebKitDOMHTMLTableCellElement *cell,
                node = webkit_dom_node_list_item (nodes, ii);
                webkit_dom_node_append_child (
                        WEBKIT_DOM_NODE (new_cell), node, NULL);
+               g_object_unref (node);
        }
+       g_object_unref (nodes);
 
        /* Insert new_cell before cell and remove cell */
        webkit_dom_node_insert_before (
@@ -213,8 +215,6 @@ cell_set_header_style (WebKitDOMHTMLTableCellElement *cell,
                webkit_dom_node_get_parent_node (WEBKIT_DOM_NODE (cell)),
                WEBKIT_DOM_NODE (cell), NULL);
 
-       g_object_unref (nodes);
-
        g_free (tagname);
 }
 
diff --git a/web-extensions/e-html-editor-selection-dom-functions.c 
b/web-extensions/e-html-editor-selection-dom-functions.c
index f292d26..698e2b4 100644
--- a/web-extensions/e-html-editor-selection-dom-functions.c
+++ b/web-extensions/e-html-editor-selection-dom-functions.c
@@ -1094,8 +1094,10 @@ dom_selection_indent (WebKitDOMDocument *document,
                                after_selection_start = webkit_dom_node_contains (
                                        block_to_process,
                                        WEBKIT_DOM_NODE (selection_start_marker));
-                               if (!after_selection_start)
+                               if (!after_selection_start) {
+                                       g_object_unref (block_to_process);
                                        continue;
+                               }
                        }
 
                        level = get_indentation_level (
@@ -1103,11 +1105,14 @@ dom_selection_indent (WebKitDOMDocument *document,
 
                        final_width = word_wrap_length - SPACES_PER_INDENTATION * (level + 1);
                        if (final_width < MINIMAL_PARAGRAPH_WIDTH &&
-                           !e_html_editor_web_extension_get_html_mode (extension))
+                           !e_html_editor_web_extension_get_html_mode (extension)) {
+                               g_object_unref (block_to_process);
                                continue;
+                       }
 
                        indent_block (document, extension, block_to_process, final_width);
 
+                       g_object_unref (block_to_process);
                        if (after_selection_end)
                                break;
                }
@@ -1397,12 +1402,15 @@ dom_selection_unindent (WebKitDOMDocument *document,
                                after_selection_start = webkit_dom_node_contains (
                                        block_to_process,
                                        WEBKIT_DOM_NODE (selection_start_marker));
-                               if (!after_selection_start)
+                               if (!after_selection_start) {
+                                       g_object_unref (block_to_process);
                                        continue;
+                               }
                        }
 
                        unindent_block (document, extension, block_to_process);
 
+                       g_object_unref (block_to_process);
                        if (after_selection_end)
                                break;
                }
@@ -1997,7 +2005,6 @@ wrap_lines (WebKitDOMDocument *document,
        WebKitDOMNode *paragraph_clone;
        WebKitDOMDocumentFragment *fragment;
        WebKitDOMElement *element;
-       WebKitDOMNodeList *wrap_br;
        gboolean has_selection;
        gint len, ii, br_count;
        gulong length_left;
@@ -2008,6 +2015,7 @@ wrap_lines (WebKitDOMDocument *document,
 
        if (has_selection) {
                const gchar *selection_content;
+               WebKitDOMNodeList *wrap_br;
 
                selection_content = e_html_editor_web_extension_get_selection_text (extension);
                paragraph_char_count = g_utf8_strlen (selection_content, -1);
@@ -2024,8 +2032,11 @@ wrap_lines (WebKitDOMDocument *document,
                        NULL);
                br_count = webkit_dom_node_list_get_length (wrap_br);
                /* And remove them */
-               for (ii = 0; ii < br_count; ii++)
-                       remove_node (webkit_dom_node_list_item (wrap_br, ii));
+               for (ii = 0; ii < br_count; ii++) {
+                       WebKitDOMNode *node = webkit_dom_node_list_item (wrap_br, ii);
+                       remove_node (node);
+                       g_object_unref (node);
+               }
                g_object_unref (wrap_br);
        } else {
                if (!webkit_dom_node_has_child_nodes (paragraph))
@@ -2414,8 +2425,11 @@ dom_remove_wrapping_from_element (WebKitDOMElement *element)
        list = webkit_dom_element_query_selector_all (
                element, "br.-x-evo-wrap-br", NULL);
        length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++)
-               remove_node (webkit_dom_node_list_item (list, ii));
+       for (ii = 0; ii < length; ii++) {
+               WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
+               remove_node (node);
+               g_object_unref (node);
+       }
 
        webkit_dom_node_normalize (WEBKIT_DOM_NODE (element));
 
@@ -2431,8 +2445,11 @@ dom_remove_quoting_from_element (WebKitDOMElement *element)
        list = webkit_dom_element_query_selector_all (
                element, "span.-x-evo-quoted", NULL);
        length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++)
-               remove_node (webkit_dom_node_list_item (list, ii));
+       for (ii = 0; ii < length; ii++) {
+               WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
+               remove_node (node);
+               g_object_unref (node);
+       }
        g_object_unref (list);
 
        list = webkit_dom_element_query_selector_all (
@@ -2450,14 +2467,18 @@ dom_remove_quoting_from_element (WebKitDOMElement *element)
                                NULL);
 
                remove_node (node);
+               g_object_unref (node);
        }
        g_object_unref (list);
 
        list = webkit_dom_element_query_selector_all (
                element, "br.-x-evo-temp-br", NULL);
        length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++)
-               remove_node (webkit_dom_node_list_item (list, ii));
+       for (ii = 0; ii < length; ii++) {
+               WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
+               remove_node (node);
+               g_object_unref (node);
+       }
        g_object_unref (list);
 
        webkit_dom_node_normalize (WEBKIT_DOM_NODE (element));
@@ -2684,6 +2705,7 @@ dom_wrap_paragraphs_in_document (WebKitDOMDocument *document,
                        dom_wrap_paragraph_length (
                                document, extension, WEBKIT_DOM_ELEMENT (node), word_wrap_length - quote);
                }
+               g_object_unref (node);
        }
        g_object_unref (list);
 }
@@ -4825,6 +4847,7 @@ dom_selection_set_alignment (WebKitDOMDocument *document,
 
                                        after_selection_end = webkit_dom_node_contains (
                                                item, WEBKIT_DOM_NODE (selection_end_marker));
+                                       g_object_unref (item);
                                        if (after_selection_end)
                                                break;
                                }
diff --git a/web-extensions/e-html-editor-view-dom-functions.c 
b/web-extensions/e-html-editor-view-dom-functions.c
index ddccdad..b80d326 100644
--- a/web-extensions/e-html-editor-view-dom-functions.c
+++ b/web-extensions/e-html-editor-view-dom-functions.c
@@ -495,6 +495,7 @@ quote_plain_text_element_after_wrapping (WebKitDOMDocument *document,
                        webkit_dom_node_clone_node (quoted_node, TRUE),
                        webkit_dom_node_get_next_sibling (br),
                        NULL);
+               g_object_unref (br);
        }
 
        g_object_unref (list);
@@ -780,6 +781,7 @@ move_elements_to_body (WebKitDOMDocument *document)
                }
 
                remove_node (node);
+               g_object_unref (node);
        }
        g_object_unref (list);
 
@@ -803,6 +805,7 @@ move_elements_to_body (WebKitDOMDocument *document)
                        NULL);
 
                remove_node (node);
+               g_object_unref (node);
        }
        g_object_unref (list);
 }
@@ -822,6 +825,7 @@ repair_gmail_blockquotes (WebKitDOMDocument *document)
                webkit_dom_element_remove_attribute (WEBKIT_DOM_ELEMENT (node), "class");
                webkit_dom_element_remove_attribute (WEBKIT_DOM_ELEMENT (node), "style");
                webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (node), "type", "cite", NULL);
+               g_object_unref (node);
        }
        g_object_unref (list);
 }
@@ -1566,6 +1570,7 @@ mark_node_as_paragraph_after_ending_list (WebKitDOMDocument *document,
                        webkit_dom_node_list_item (list, ii));
 
                dom_set_paragraph_style (document, extension, WEBKIT_DOM_ELEMENT (node), -1, 0, "");
+               g_object_unref (node);
        }
        g_object_unref (list);
 }
@@ -1911,8 +1916,11 @@ remove_empty_blocks (WebKitDOMDocument *document)
        document, "blockquote[type=cite] > :empty", NULL);
 
        length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++)
-               remove_node (webkit_dom_node_list_item (list, ii));
+       for (ii = 0; ii < length; ii++) {
+               WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
+               remove_node (node);
+               g_object_unref (node);
+       }
 
        g_object_unref (list);
 }
@@ -2862,8 +2870,12 @@ dom_quote_plain_text_element (WebKitDOMDocument *document,
        list = webkit_dom_element_query_selector_all (
                WEBKIT_DOM_ELEMENT (element_clone), "span.-x-evo-quoted", NULL);
        length = webkit_dom_node_list_get_length (list);
-       for  (ii = 0; ii < length; ii++)
-               remove_node (webkit_dom_node_list_item (list, ii));
+       for (ii = 0; ii < length; ii++) {
+               WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
+               remove_node (node);
+               g_object_unref (node);
+       }
+       g_object_unref (list);
 
        webkit_dom_node_normalize (element_clone);
        quote_plain_text_recursive (
@@ -2882,7 +2894,6 @@ dom_quote_plain_text_element (WebKitDOMDocument *document,
                WEBKIT_DOM_NODE (element),
                NULL);
 
-       g_object_unref (list);
        return WEBKIT_DOM_ELEMENT (element_clone);
 }
 
@@ -2935,6 +2946,7 @@ dom_quote_plain_text (WebKitDOMDocument *document)
                        if (WEBKIT_DOM_IS_HTML_BR_ELEMENT (child))
                                remove_node (child);
                }
+               g_object_unref (blockquote);
        }
        g_object_unref (list);
 
@@ -2954,6 +2966,7 @@ dom_quote_plain_text (WebKitDOMDocument *document)
                webkit_dom_element_set_attribute (
                        WEBKIT_DOM_ELEMENT (body_clone), name, value, NULL);
 
+               g_object_unref (node);
                g_free (name);
                g_free (value);
        }
@@ -2995,6 +3008,7 @@ dom_dequote_plain_text (WebKitDOMDocument *document)
                        element_remove_class (element, "-x-evo-plaintext-quoted");
                        dom_remove_quoting_from_element (element);
                }
+               g_object_unref (element);
        }
        g_object_unref (paragraphs);
 }
@@ -3604,6 +3618,7 @@ quote_plain_text_elements_after_wrapping_in_document (WebKitDOMDocument *documen
                citation_level = get_citation_level (child, TRUE);
                quote_plain_text_element_after_wrapping (
                        document, WEBKIT_DOM_ELEMENT (child), citation_level);
+               g_object_unref (child);
        }
        g_object_unref (list);
 }
@@ -3626,6 +3641,7 @@ clear_attributes (WebKitDOMDocument *document)
 
                webkit_dom_element_remove_attribute_node (
                        document_element, WEBKIT_DOM_ATTR (node), NULL);
+               g_object_unref (node);
        }
        g_object_unref (attributes);
 
@@ -3651,6 +3667,7 @@ clear_attributes (WebKitDOMDocument *document)
                                WEBKIT_DOM_ATTR (node),
                                NULL);
 
+               g_object_unref (node);
                g_free (name);
        }
        g_object_unref (attributes);
@@ -3726,8 +3743,11 @@ dom_convert_content (WebKitDOMDocument *document,
        list = webkit_dom_document_query_selector_all (
                document, ".-x-evo-paragraph", NULL);
        length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++)
-               remove_node (webkit_dom_node_list_item (list, ii));
+       for (ii = 0; ii < length; ii++) {
+               WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
+               remove_node (node);
+               g_object_unref (node);
+       }
        g_object_unref (list);
 
        /* Insert the paragraph where the caret will be. */
@@ -3798,6 +3818,7 @@ dom_convert_content (WebKitDOMDocument *document,
                        NULL);
 
                remove_node (node);
+               g_object_unref (node);
        }
        g_object_unref (list);
 
@@ -4334,6 +4355,7 @@ process_blockquote (WebKitDOMElement *blockquote)
                        WEBKIT_DOM_HTML_ELEMENT (quoted_node), text_content, NULL);
 
                g_free (text_content);
+               g_object_unref (quoted_node);
        }
        g_object_unref (list);
 
@@ -4351,6 +4373,7 @@ process_blockquote (WebKitDOMElement *blockquote)
                        WEBKIT_DOM_HTML_ELEMENT (quoted_node), text_content, NULL);
 
                g_free (text_content);
+               g_object_unref (quoted_node);
        }
        g_object_unref (list);
 
@@ -4788,6 +4811,7 @@ process_elements (EHTMLEditorWebExtension *extension,
 
                                g_free (name);
                                g_free (value);
+                               g_object_unref (node);
                        }
                        g_string_append (buffer, ">");
                        g_object_unref (attributes);
@@ -5193,6 +5217,7 @@ process_elements (EHTMLEditorWebExtension *extension,
                if (webkit_dom_node_has_child_nodes (child) && !skip_node)
                        process_elements (
                                extension, child, to_html, changing_mode, to_plain_text, buffer);
+               g_object_unref (child);
        }
 
        if (to_plain_text && (
@@ -5239,8 +5264,11 @@ remove_wrapping_from_document (WebKitDOMDocument *document)
        list = webkit_dom_document_query_selector_all (document, "br.-x-evo-wrap-br", NULL);
 
        length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++)
-               remove_node (webkit_dom_node_list_item (list, ii));
+       for (ii = 0; ii < length; ii++) {
+               WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
+               remove_node (node);
+               g_object_unref (node);
+       }
 
        g_object_unref (list);
 }
@@ -5269,6 +5297,7 @@ remove_background_images_in_document (WebKitDOMDocument *document)
                        webkit_dom_node_list_item (elements, ii));
 
                remove_image_attributes_from_element (element);
+               g_object_unref (element);
        }
 
        g_object_unref (elements);
@@ -5284,8 +5313,11 @@ remove_images_in_element (WebKitDOMElement *element)
                element, "img:not(.-x-evo-smiley-img)", NULL);
 
        length = webkit_dom_node_list_get_length (images);
-       for (ii = 0; ii < length; ii++)
-               remove_node (webkit_dom_node_list_item (images, ii));
+       for (ii = 0; ii < length; ii++) {
+               WebKitDOMNode *node = webkit_dom_node_list_item (images, ii);
+               remove_node (node);
+               g_object_unref (node);
+       }
 
        g_object_unref (images);
 }
@@ -5330,6 +5362,7 @@ toggle_smileys (WebKitDOMDocument *document,
                        element_add_class (parent, "-x-evo-resizable-wrapper");
                else
                        element_remove_class (parent, "-x-evo-resizable-wrapper");
+               g_object_unref (img);
        }
 
        g_object_unref (smileys);
@@ -5397,6 +5430,7 @@ toggle_paragraphs_style_in_element (WebKitDOMDocument *document,
                                g_free (style);
                        }
                }
+               g_object_unref (node);
        }
        g_object_unref (paragraphs);
 }
@@ -5672,6 +5706,7 @@ dom_process_content_for_plain_text (WebKitDOMDocument *document,
                        dom_wrap_paragraph (
                                document, extension, WEBKIT_DOM_ELEMENT (paragraph));
                }
+               g_object_unref (paragraph);
        }
        g_object_unref (paragraphs);
 
@@ -5686,6 +5721,7 @@ dom_process_content_for_plain_text (WebKitDOMDocument *document,
                WebKitDOMNode *parent = webkit_dom_node_get_parent_node (node);
 
                remove_node (node);
+               g_object_unref (node);
                webkit_dom_node_normalize (parent);
        }
        g_object_unref (paragraphs);
@@ -5721,6 +5757,7 @@ restore_image (WebKitDOMDocument *document,
                        webkit_dom_node_list_item (list, ii));
 
                webkit_dom_element_set_attribute (element, "background", element_src, NULL);
+               g_object_unref (element);
        }
        g_free (selector);
        g_object_unref (list);
@@ -5733,6 +5770,7 @@ restore_image (WebKitDOMDocument *document,
                        webkit_dom_node_list_item (list, ii));
 
                webkit_dom_element_set_attribute (element, "src", element_src, NULL);
+               g_object_unref (element);
        }
        g_free (selector);
        g_object_unref (list);
@@ -5856,6 +5894,8 @@ wrap_paragraphs_in_quoted_content (WebKitDOMDocument *document,
                paragraph = webkit_dom_node_list_item (paragraphs, ii);
 
                dom_wrap_paragraph (document, extension, WEBKIT_DOM_ELEMENT (paragraph));
+
+               g_object_unref (paragraph);
        }
        g_object_unref (paragraphs);
 }
@@ -5908,6 +5948,7 @@ change_cid_images_src_to_base64 (WebKitDOMDocument *document,
                WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
 
                set_base64_to_element_attribute (inline_images, WEBKIT_DOM_ELEMENT (node), "src");
+               g_object_unref (node);
        }
        g_object_unref (list);
 
@@ -5934,12 +5975,14 @@ change_cid_images_src_to_base64 (WebKitDOMDocument *document,
 
                                set_base64_to_element_attribute (
                                        inline_images, WEBKIT_DOM_ELEMENT (node), attribute_ns);
+                               g_object_unref (node);
                        }
 
                        g_object_unref (list);
                        g_free (attribute_ns);
                        g_free (selector);
                }
+               g_object_unref (node);
                g_free (name);
        }
        g_object_unref (attributes);
@@ -5952,6 +5995,7 @@ change_cid_images_src_to_base64 (WebKitDOMDocument *document,
 
                set_base64_to_element_attribute (
                        inline_images, WEBKIT_DOM_ELEMENT (node), "background");
+               g_object_unref (node);
        }
        g_object_unref (list);
        g_hash_table_remove_all (inline_images);
@@ -6037,8 +6081,10 @@ dom_get_inline_images_data (WebKitDOMDocument *document,
        list = webkit_dom_document_query_selector_all (document, "img[data-inline]", NULL);
 
        length = webkit_dom_node_list_get_length (list);
-       if (length == 0)
+       if (length == 0) {
+               g_object_unref (list);
                goto background;
+       }
 
        builder = g_variant_builder_new (G_VARIANT_TYPE ("asss"));
 
@@ -6068,6 +6114,7 @@ dom_get_inline_images_data (WebKitDOMDocument *document,
                }
                webkit_dom_element_set_attribute (
                        WEBKIT_DOM_ELEMENT (node), "src", cid, NULL);
+               g_object_unref (node);
                g_free (cid);
        }
        g_object_unref (list);
@@ -6110,6 +6157,7 @@ dom_get_inline_images_data (WebKitDOMDocument *document,
                                WEBKIT_DOM_ELEMENT (node), "background", cid, NULL);
                }
                g_free (cid);
+               g_object_unref (node);
        }
  out:
        g_object_unref (list);
@@ -6462,12 +6510,14 @@ dom_get_caret_position (WebKitDOMDocument *document)
                if (webkit_dom_node_is_same_node (
                        node, webkit_dom_dom_selection_get_anchor_node (selection))) {
 
+                       g_object_unref (node);
                        break;
                } else if (WEBKIT_DOM_IS_TEXT (node)) {
                        gchar *text = webkit_dom_node_get_text_content (node);
                        range_count += strlen (text);
                        g_free (text);
                }
+               g_object_unref (node);
        }
 
        g_object_unref (nodes);
@@ -6501,7 +6551,9 @@ dom_drag_and_drop_end (WebKitDOMDocument *document,
                        NULL);
 
                webkit_dom_node_append_child (WEBKIT_DOM_NODE (element), node, NULL);
+               g_object_unref (node);
        }
+       g_object_unref (list);
 
        /* When the image is moved the new selection is created after after it, so
         * lets collapse the selection to have the caret right after the image. */
diff --git a/web-extensions/e-msg-composer-dom-functions.c b/web-extensions/e-msg-composer-dom-functions.c
index 14807ff..3a3d33d 100644
--- a/web-extensions/e-msg-composer-dom-functions.c
+++ b/web-extensions/e-msg-composer-dom-functions.c
@@ -40,9 +40,11 @@ dom_get_active_signature_uid (WebKitDOMDocument *document)
                        uid = webkit_dom_element_get_attribute (
                                WEBKIT_DOM_ELEMENT (node), "name");
                        g_free (id);
+                       g_object_unref (node);
                        break;
                }
                g_free (id);
+               g_object_unref (node);
        }
 
        g_object_unref (nodes);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]