Changeset 122961 in webkit
- Timestamp:
- Jul 18, 2012 6:39:26 AM (12 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 5 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r122960 r122961 1 2012-07-18 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Add WebKitWebView::submit-form signal to WebKit2 GTK+ API 4 https://bugs.webkit.org/show_bug.cgi?id=91605 5 6 Reviewed by Gustavo Noronha Silva. 7 8 The signal is emitted when a form is about to submitted, with a 9 form submission request that can be used to get the text fields 10 and to continue the form submission wheh done. 11 12 * GNUmakefile.list.am: Add new files to compilation. 13 * UIProcess/API/gtk/WebKitFormClient.cpp: Added. 14 (willSubmitForm): Create a WebKitFormSubmissionRequest and call 15 webkitWebViewSubmitFormRequest() with the request. 16 (attachFormClientToView): Add impementation for willSubmitForm 17 callback. 18 * UIProcess/API/gtk/WebKitFormClient.h: Added. 19 * UIProcess/API/gtk/WebKitFormSubmissionRequest.cpp: Added. 20 (webkit_form_submission_request_init): 21 (webkitFormSubmissionRequestFinalize): 22 (webkit_form_submission_request_class_init): 23 (webkitFormSubmissionRequestCreate): Create a new 24 WebKitFormSubmissionRequest for the given values dictionary and 25 submission listener. 26 (webkit_form_submission_request_get_text_fields): Create a 27 GHashTable with the text fields values and return it. 28 (webkit_form_submission_request_submit): Continue the form 29 submission. 30 * UIProcess/API/gtk/WebKitFormSubmissionRequest.h: Added. 31 * UIProcess/API/gtk/WebKitFormSubmissionRequestPrivate.h: Added. 32 * UIProcess/API/gtk/WebKitWebView.cpp: 33 (webkitWebViewConstructed): Attach web view to form client. 34 (webkit_web_view_class_init): Add WebKitWebView::submit-form 35 signal. 36 (webkitWebViewSubmitFormRequest): Emit WebKitWebView::submit-form 37 signal. 38 * UIProcess/API/gtk/WebKitWebView.h: 39 * UIProcess/API/gtk/WebKitWebViewPrivate.h: 40 * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section for 41 WebKitFormSubmissionRequest. 42 * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols. 43 * UIProcess/API/gtk/tests/TestWebKitWebView.cpp: 44 (testWebViewSubmitForm): 45 (beforeAll): 46 * UIProcess/API/gtk/webkit2.h: Include 47 WebKitFormSubmissionRequest.h. 48 1 49 2012-07-18 Carlos Garcia Campos <cgarcia@igalia.com> 2 50 -
trunk/Source/WebKit2/GNUmakefile.list.am
r122547 r122961 105 105 $(WebKit2)/UIProcess/API/gtk/WebKitFileChooserRequest.h \ 106 106 $(WebKit2)/UIProcess/API/gtk/WebKitFindController.h \ 107 $(WebKit2)/UIProcess/API/gtk/WebKitFormSubmissionRequest.h \ 107 108 $(WebKit2)/UIProcess/API/gtk/WebKitGeolocationPermissionRequest.h \ 108 109 $(WebKit2)/UIProcess/API/gtk/WebKitHitTestResult.h \ … … 638 639 Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequest.h \ 639 640 Source/WebKit2/UIProcess/API/gtk/WebKitFileChooserRequestPrivate.h \ 641 Source/WebKit2/UIProcess/API/gtk/WebKitFormSubmissionRequest.cpp \ 642 Source/WebKit2/UIProcess/API/gtk/WebKitFormSubmissionRequest.h \ 643 Source/WebKit2/UIProcess/API/gtk/WebKitFormSubmissionRequestPrivate.h \ 644 Source/WebKit2/UIProcess/API/gtk/WebKitFormClient.cpp \ 645 Source/WebKit2/UIProcess/API/gtk/WebKitFormClient.h \ 640 646 Source/WebKit2/UIProcess/API/gtk/WebKitFullscreenClient.cpp \ 641 647 Source/WebKit2/UIProcess/API/gtk/WebKitFullscreenClient.h \ -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp
r122960 r122961 30 30 #include "WebKitEnumTypes.h" 31 31 #include "WebKitError.h" 32 #include "WebKitFormClient.h" 32 33 #include "WebKitFullscreenClient.h" 33 34 #include "WebKitHitTestResultPrivate.h" … … 91 92 CONTEXT_MENU_DISMISSED, 92 93 94 SUBMIT_FORM, 95 93 96 LAST_SIGNAL 94 97 }; … … 326 329 attachFullScreenClientToView(webView); 327 330 attachContextMenuClientToView(webView); 331 attachFormClientToView(webView); 328 332 329 333 WebPageProxy* page = webkitWebViewBaseGetPage(webViewBase); … … 1061 1065 g_cclosure_marshal_VOID__VOID, 1062 1066 G_TYPE_NONE, 0); 1067 1068 /** 1069 * WebKitWebView::submit-form: 1070 * @web_view: the #WebKitWebView on which the signal is emitted 1071 * @request: a #WebKitFormSubmissionRequest 1072 * 1073 * This signal is emitted when a form is about to be submitted. The @request 1074 * argument passed contains information about the text fields of the form. This 1075 * is typically used to store login information that can be used later to 1076 * pre-fill the form. 1077 * The form will not be submitted until webkit_form_submission_request_submit() is called. 1078 * 1079 * It is possible to handle the form submission request asynchronously, by 1080 * simply calling g_object_ref() on the @request argument and calling 1081 * webkit_form_submission_request_submit() when done to continue with the form submission. 1082 * If the last reference is removed on a #WebKitFormSubmissionRequest and the 1083 * form has not been submitted, webkit_form_submission_request_submit() will be called. 1084 */ 1085 signals[SUBMIT_FORM] = 1086 g_signal_new("submit-form", 1087 G_TYPE_FROM_CLASS(webViewClass), 1088 G_SIGNAL_RUN_LAST, 1089 G_STRUCT_OFFSET(WebKitWebViewClass, submit_form), 1090 0, 0, 1091 g_cclosure_marshal_VOID__OBJECT, 1092 G_TYPE_NONE, 1, 1093 WEBKIT_TYPE_FORM_SUBMISSION_REQUEST); 1063 1094 } 1064 1095 … … 1387 1418 // Clear the menu to make sure it's useless after signal emission. 1388 1419 webkit_context_menu_remove_all(contextMenu.get()); 1420 } 1421 1422 void webkitWebViewSubmitFormRequest(WebKitWebView* webView, WebKitFormSubmissionRequest* request) 1423 { 1424 g_signal_emit(webView, signals[SUBMIT_FORM], 0, request); 1389 1425 } 1390 1426 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h
r121771 r122961 34 34 #include <webkit2/WebKitFileChooserRequest.h> 35 35 #include <webkit2/WebKitFindController.h> 36 #include <webkit2/WebKitFormSubmissionRequest.h> 36 37 #include <webkit2/WebKitHitTestResult.h> 37 38 #include <webkit2/WebKitJavascriptResult.h> … … 128 129 WebKitWebViewBaseClass parent; 129 130 130 void (* load_changed) (WebKitWebView *web_view, 131 WebKitLoadEvent load_event); 132 gboolean (* load_failed) (WebKitWebView *web_view, 133 WebKitLoadEvent load_event, 134 const gchar *failing_uri, 135 GError *error); 136 137 GtkWidget *(* create) (WebKitWebView *web_view); 138 void (* ready_to_show) (WebKitWebView *web_view); 139 void (* run_as_modal) (WebKitWebView *web_view); 140 void (* close) (WebKitWebView *web_view); 141 142 gboolean (* script_dialog) (WebKitWebView *web_view, 143 WebKitScriptDialog *dialog); 144 145 gboolean (* decide_policy) (WebKitWebView *web_view, 146 WebKitPolicyDecision *decision, 147 WebKitPolicyDecisionType type); 148 gboolean (* permission_request) (WebKitWebView *web_view, 149 WebKitPermissionRequest *permission_request); 150 void (* mouse_target_changed) (WebKitWebView *web_view, 151 WebKitHitTestResult *hit_test_result, 152 guint modifiers); 153 gboolean (* print_requested) (WebKitWebView *web_view, 154 WebKitPrintOperation *print_operation); 155 void (* resource_load_started) (WebKitWebView *web_view, 156 WebKitWebResource *resource, 157 WebKitURIRequest *request); 158 gboolean (* enter_fullscreen) (WebKitWebView *web_view); 159 gboolean (* leave_fullscreen) (WebKitWebView *web_view); 160 gboolean (* run_file_chooser) (WebKitWebView *web_view, 161 WebKitFileChooserRequest *request); 162 gboolean (* context_menu) (WebKitWebView *web_view, 163 WebKitContextMenu *context_menu, 164 GdkEvent *event, 165 WebKitHitTestResult *hit_test_result); 166 void (* context_menu_dismissed) (WebKitWebView *web_view); 131 void (* load_changed) (WebKitWebView *web_view, 132 WebKitLoadEvent load_event); 133 gboolean (* load_failed) (WebKitWebView *web_view, 134 WebKitLoadEvent load_event, 135 const gchar *failing_uri, 136 GError *error); 137 138 GtkWidget *(* create) (WebKitWebView *web_view); 139 void (* ready_to_show) (WebKitWebView *web_view); 140 void (* run_as_modal) (WebKitWebView *web_view); 141 void (* close) (WebKitWebView *web_view); 142 143 gboolean (* script_dialog) (WebKitWebView *web_view, 144 WebKitScriptDialog *dialog); 145 146 gboolean (* decide_policy) (WebKitWebView *web_view, 147 WebKitPolicyDecision *decision, 148 WebKitPolicyDecisionType type); 149 gboolean (* permission_request) (WebKitWebView *web_view, 150 WebKitPermissionRequest *permission_request); 151 void (* mouse_target_changed) (WebKitWebView *web_view, 152 WebKitHitTestResult *hit_test_result, 153 guint modifiers); 154 gboolean (* print_requested) (WebKitWebView *web_view, 155 WebKitPrintOperation *print_operation); 156 void (* resource_load_started) (WebKitWebView *web_view, 157 WebKitWebResource *resource, 158 WebKitURIRequest *request); 159 gboolean (* enter_fullscreen) (WebKitWebView *web_view); 160 gboolean (* leave_fullscreen) (WebKitWebView *web_view); 161 gboolean (* run_file_chooser) (WebKitWebView *web_view, 162 WebKitFileChooserRequest *request); 163 gboolean (* context_menu) (WebKitWebView *web_view, 164 WebKitContextMenu *context_menu, 165 GdkEvent *event, 166 WebKitHitTestResult *hit_test_result); 167 void (* context_menu_dismissed) (WebKitWebView *web_view); 168 void (* submit_form) (WebKitWebView *web_view, 169 WebKitFormSubmissionRequest *request); 167 170 168 171 /* Padding for future expansion */ -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h
r120908 r122961 56 56 bool webkitWebViewLeaveFullScreen(WebKitWebView*); 57 57 void webkitWebViewPopulateContextMenu(WebKitWebView*, WKArrayRef proposedMenu, WKHitTestResultRef); 58 void webkitWebViewSubmitFormRequest(WebKitWebView*, WebKitFormSubmissionRequest*); 58 59 59 60 #endif // WebKitWebViewPrivate_h -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml
r121093 r122961 40 40 <xi:include href="xml/WebKitContextMenu.xml"/> 41 41 <xi:include href="xml/WebKitContextMenuItem.xml"/> 42 <xi:include href="xml/WebKitFormSubmissionRequest.xml"/> 42 43 </chapter> 43 44 -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt
r122547 r122961 815 815 webkit_context_menu_item_get_type 816 816 </SECTION> 817 818 <SECTION> 819 <FILE>WebKitFormSubmissionRequest</FILE> 820 WebKitFormSubmissionRequest 821 webkit_form_submission_request_get_text_fields 822 webkit_form_submission_request_submit 823 824 <SUBSECTION Standard> 825 WebKitFormSubmissionRequestClass 826 WEBKIT_TYPE_FORM_SUBMISSION_REQUEST 827 WEBKIT_FORM_SUBMISSION_REQUEST 828 WEBKIT_IS_FORM_SUBMISSION_REQUEST 829 WEBKIT_FORM_SUBMISSION_REQUEST_CLASS 830 WEBKIT_IS_FORM_SUBMISSION_REQUEST_CLASS 831 WEBKIT_FORM_SUBMISSION_REQUEST_GET_CLASS 832 833 <SUBSECTION Private> 834 WebKitFormSubmissionRequestPrivate 835 webkit_form_submission_request_get_type 836 </SECTION> -
trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp
r121143 r122961 866 866 } 867 867 868 class FormClientTest: public WebViewTest { 869 public: 870 MAKE_GLIB_TEST_FIXTURE(FormClientTest); 871 872 static void submitFormCallback(WebKitWebView*, WebKitFormSubmissionRequest* request, FormClientTest* test) 873 { 874 test->submitForm(request); 875 } 876 877 FormClientTest() 878 : m_submitPositionX(0) 879 , m_submitPositionY(0) 880 { 881 g_signal_connect(m_webView, "submit-form", G_CALLBACK(submitFormCallback), this); 882 } 883 884 ~FormClientTest() 885 { 886 g_signal_handlers_disconnect_matched(m_webView, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this); 887 } 888 889 void submitForm(WebKitFormSubmissionRequest* request) 890 { 891 assertObjectIsDeletedWhenTestFinishes(G_OBJECT(request)); 892 m_request = request; 893 webkit_form_submission_request_submit(request); 894 quitMainLoop(); 895 } 896 897 GHashTable* waitUntilFormSubmittedAndGetTextFields() 898 { 899 g_main_loop_run(m_mainLoop); 900 return webkit_form_submission_request_get_text_fields(m_request.get()); 901 } 902 903 static gboolean doClickIdleCallback(FormClientTest* test) 904 { 905 test->clickMouseButton(test->m_submitPositionX, test->m_submitPositionY, 1); 906 return FALSE; 907 } 908 909 void submitFormAtPosition(int x, int y) 910 { 911 m_submitPositionX = x; 912 m_submitPositionY = y; 913 g_idle_add(reinterpret_cast<GSourceFunc>(doClickIdleCallback), this); 914 } 915 916 int m_submitPositionX; 917 int m_submitPositionY; 918 GRefPtr<WebKitFormSubmissionRequest> m_request; 919 }; 920 921 static void testWebViewSubmitForm(FormClientTest* test, gconstpointer) 922 { 923 test->showInWindowAndWaitUntilMapped(); 924 925 const char* formHTML = 926 "<html><body>" 927 " <form action='#'>" 928 " <input type='text' name='text1' value='value1'>" 929 " <input type='text' name='text2' value='value2'>" 930 " <input type='password' name='password' value='secret'>" 931 " <textarea cols='5' rows='5' name='textarea'>Text</textarea>" 932 " <input type='hidden' name='hidden1' value='hidden1'>" 933 " <input type='submit' value='Submit' style='position:absolute; left:1; top:1' size='10'>" 934 " </form>" 935 "</body></html>"; 936 937 test->loadHtml(formHTML, "file:///"); 938 test->waitUntilLoadFinished(); 939 940 test->submitFormAtPosition(5, 5); 941 GHashTable* values = test->waitUntilFormSubmittedAndGetTextFields(); 942 g_assert(values); 943 g_assert_cmpuint(g_hash_table_size(values), ==, 3); 944 g_assert_cmpstr(static_cast<char*>(g_hash_table_lookup(values, "text1")), ==, "value1"); 945 g_assert_cmpstr(static_cast<char*>(g_hash_table_lookup(values, "text2")), ==, "value2"); 946 g_assert_cmpstr(static_cast<char*>(g_hash_table_lookup(values, "password")), ==, "secret"); 947 } 948 868 949 void beforeAll() 869 950 { … … 884 965 FullScreenClientTest::add("WebKitWebView", "fullscreen", testWebViewFullScreen); 885 966 WebViewTest::add("WebKitWebView", "can-show-mime-type", testWebViewCanShowMIMEType); 967 FormClientTest::add("WebKitWebView", "submit-form", testWebViewSubmitForm); 886 968 } 887 969 -
trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h
r121093 r122961 37 37 #include <webkit2/WebKitFileChooserRequest.h> 38 38 #include <webkit2/WebKitFindController.h> 39 #include <webkit2/WebKitFormSubmissionRequest.h> 39 40 #include <webkit2/WebKitGeolocationPermissionRequest.h> 40 41 #include <webkit2/WebKitHitTestResult.h>
Note: See TracChangeset
for help on using the changeset viewer.