[GTK] Do not use WebKitDOMHTMLFormElement as argument of signal WebKitWebPage::will...
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 9 Mar 2018 14:41:01 +0000 (14:41 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 9 Mar 2018 14:41:01 +0000 (14:41 +0000)
https://bugs.webkit.org/show_bug.cgi?id=183510

Reviewed by Michael Catanzaro.

Source/WebKit:

In 2.22 WebKitDOMHTMLFormElement will be deprecated in GTK+ port and won't still exist in WPE. The new
JavaScript GLib API will be used to replace most of the DOM API, but a few classes will remain with a minimal
API for things that can't be done with JavaScript. WebKitDOMElement will stay and will be added to WPE as well,
so if we change the signal parameter to WebKitDOMElement we will be able to keep using
WebKitWebPage::will-submit-form without any changes. WPE will gain this signal and the rest of the API that uses
DOM.

* WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
(webkit_web_page_class_init):

Tools:

Update the test to use WebKitDOMElement instead and fix a memory leak.

* TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
(handleFormSubmissionCallback):
(willSubmitFormCallback):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@229461 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp
Tools/ChangeLog
Tools/TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp

index 987ca28..4940f98 100644 (file)
@@ -1,5 +1,22 @@
 2018-03-09  Carlos Garcia Campos  <cgarcia@igalia.com>
 
+        [GTK] Do not use WebKitDOMHTMLFormElement as argument of signal WebKitWebPage::will-submit-form
+        https://bugs.webkit.org/show_bug.cgi?id=183510
+
+        Reviewed by Michael Catanzaro.
+
+        In 2.22 WebKitDOMHTMLFormElement will be deprecated in GTK+ port and won't still exist in WPE. The new
+        JavaScript GLib API will be used to replace most of the DOM API, but a few classes will remain with a minimal
+        API for things that can't be done with JavaScript. WebKitDOMElement will stay and will be added to WPE as well,
+        so if we change the signal parameter to WebKitDOMElement we will be able to keep using
+        WebKitWebPage::will-submit-form without any changes. WPE will gain this signal and the rest of the API that uses
+        DOM.
+
+        * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp:
+        (webkit_web_page_class_init):
+
+2018-03-09  Carlos Garcia Campos  <cgarcia@igalia.com>
+
         Unreviewed. [GTK][WPE] Bump Since tags of resource load stats API.
 
         The functionality hasn't been properly tested to be released in WebKitGTK+ 2.20.
index 4f03b41..693ff75 100644 (file)
@@ -417,7 +417,7 @@ private:
             g_ptr_array_add(textFieldValues.get(), g_strdup(pair.second.utf8().data()));
         }
 
-        g_signal_emit(m_webPage, signals[WILL_SUBMIT_FORM], 0, WebKit::kit(formElement), step, webkitSourceFrame, webkitTargetFrame, textFieldNames.get(), textFieldValues.get());
+        g_signal_emit(m_webPage, signals[WILL_SUBMIT_FORM], 0, WEBKIT_DOM_ELEMENT(WebKit::kit(formElement)), step, webkitSourceFrame, webkitTargetFrame, textFieldNames.get(), textFieldValues.get());
     }
 
     WebKitWebPage* m_webPage;
@@ -591,7 +591,7 @@ static void webkit_web_page_class_init(WebKitWebPageClass* klass)
     /**
      * WebKitWebPage::will-submit-form:
      * @web_page: the #WebKitWebPage on which the signal is emitted
-     * @form: the #WebKitDOMHTMLFormElement to be submitted
+     * @form: the #WebKitDOMElement to be submitted, which will always correspond to an HTMLFormElement
      * @step: a #WebKitFormSubmissionEventType indicating the current
      * stage of form submission
      * @source_frame: the #WebKitFrame containing the form to be
@@ -640,7 +640,7 @@ static void webkit_web_page_class_init(WebKitWebPageClass* klass)
         0, 0, nullptr,
         g_cclosure_marshal_generic,
         G_TYPE_NONE, 6,
-        WEBKIT_DOM_TYPE_HTML_FORM_ELEMENT,
+        WEBKIT_DOM_TYPE_ELEMENT,
         WEBKIT_TYPE_FORM_SUBMISSION_STEP,
         WEBKIT_TYPE_FRAME,
         WEBKIT_TYPE_FRAME,
index a573d15..9cf330e 100644 (file)
@@ -1,3 +1,16 @@
+2018-03-09  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        [GTK] Do not use WebKitDOMHTMLFormElement as argument of signal WebKitWebPage::will-submit-form
+        https://bugs.webkit.org/show_bug.cgi?id=183510
+
+        Reviewed by Michael Catanzaro.
+
+        Update the test to use WebKitDOMElement instead and fix a memory leak.
+
+        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
+        (handleFormSubmissionCallback):
+        (willSubmitFormCallback):
+
 2018-03-08  Stephan Szabo  <stephan.szabo@sony.com>
 
         WebKitTestRunner: Don't use accessibility controller when !HAVE(ACCESSIBILITY)
index d3a12ab..ed49184 100644 (file)
@@ -354,7 +354,7 @@ static void emitFormSubmissionEvent(GDBusConnection* connection, const char* met
     g_assert(ok);
 }
 
-static void handleFormSubmissionCallback(WebKitWebPage* webPage, DelayedSignalType delayedSignalType, const char* methodName, WebKitDOMHTMLFormElement* formElement, WebKitFrame* sourceFrame, WebKitFrame* targetFrame, GPtrArray* textFieldNames, GPtrArray* textFieldValues, WebKitWebExtension* extension)
+static void handleFormSubmissionCallback(WebKitWebPage* webPage, DelayedSignalType delayedSignalType, const char* methodName, const char* formID, WebKitFrame* sourceFrame, WebKitFrame* targetFrame, GPtrArray* textFieldNames, GPtrArray* textFieldValues, WebKitWebExtension* extension)
 {
     GString* namesBuilder = g_string_new(nullptr);
     for (guint i = 0; i < textFieldNames->len; ++i) {
@@ -374,19 +374,21 @@ static void handleFormSubmissionCallback(WebKitWebPage* webPage, DelayedSignalTy
 
     gpointer data = g_object_get_data(G_OBJECT(extension), "dbus-connection");
     if (data)
-        emitFormSubmissionEvent(G_DBUS_CONNECTION(data), methodName, webkit_dom_element_get_id(WEBKIT_DOM_ELEMENT(formElement)), names.get(), values.get(), webkit_frame_is_main_frame(targetFrame), webkit_frame_is_main_frame(sourceFrame));
+        emitFormSubmissionEvent(G_DBUS_CONNECTION(data), methodName, formID, names.get(), values.get(), webkit_frame_is_main_frame(targetFrame), webkit_frame_is_main_frame(sourceFrame));
     else
-        delayedSignalsQueue.append(DelayedSignal(delayedSignalType, webkit_dom_element_get_id(WEBKIT_DOM_ELEMENT(formElement)), names.get(), values.get(), webkit_frame_is_main_frame(targetFrame), webkit_frame_is_main_frame(sourceFrame)));
+        delayedSignalsQueue.append(DelayedSignal(delayedSignalType, formID, names.get(), values.get(), webkit_frame_is_main_frame(targetFrame), webkit_frame_is_main_frame(sourceFrame)));
 }
 
-static void willSubmitFormCallback(WebKitWebPage* webPage, WebKitDOMHTMLFormElement* formElement, WebKitFormSubmissionStep step, WebKitFrame* sourceFrame, WebKitFrame* targetFrame, GPtrArray* textFieldNames, GPtrArray* textFieldValues, WebKitWebExtension* extension)
+static void willSubmitFormCallback(WebKitWebPage* webPage, WebKitDOMElement* formElement, WebKitFormSubmissionStep step, WebKitFrame* sourceFrame, WebKitFrame* targetFrame, GPtrArray* textFieldNames, GPtrArray* textFieldValues, WebKitWebExtension* extension)
 {
+    g_assert(WEBKIT_DOM_IS_HTML_FORM_ELEMENT(formElement));
+    GUniquePtr<char> formID(webkit_dom_element_get_id(formElement));
     switch (step) {
     case WEBKIT_FORM_SUBMISSION_WILL_SEND_DOM_EVENT:
-        handleFormSubmissionCallback(webPage, FormSubmissionWillSendDOMEventSignal, "FormSubmissionWillSendDOMEvent", formElement, sourceFrame, targetFrame, textFieldNames, textFieldValues, extension);
+        handleFormSubmissionCallback(webPage, FormSubmissionWillSendDOMEventSignal, "FormSubmissionWillSendDOMEvent", formID.get(), sourceFrame, targetFrame, textFieldNames, textFieldValues, extension);
         break;
     case WEBKIT_FORM_SUBMISSION_WILL_COMPLETE:
-        handleFormSubmissionCallback(webPage, FormSubmissionWillCompleteSignal, "FormSubmissionWillComplete", formElement, sourceFrame, targetFrame, textFieldNames, textFieldValues, extension);
+        handleFormSubmissionCallback(webPage, FormSubmissionWillCompleteSignal, "FormSubmissionWillComplete", formID.get(), sourceFrame, targetFrame, textFieldNames, textFieldValues, extension);
         break;
     default:
         g_assert_not_reached();