Changeset 106142 in webkit
- Timestamp:
- Jan 27, 2012 12:15:20 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 9 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r106139 r106142 1 2012-01-27 Martin Robinson <mrobinson@igalia.com> 2 3 [GTK] [WK2] Implement the policy client 4 https://bugs.webkit.org/show_bug.cgi?id=76343 5 6 Reviewed by Gustavo Noronha Silva. 7 8 Implement the abstract WebKitPolicyDecision, WebKitNavigationPolicyDecision, 9 and add the decide-policy signal to WebKitWebView. 10 11 * GNUmakefile.am: Add new files to the source list. 12 * UIProcess/API/gtk/WebKitError.cpp: Use the WebCore namespace because 13 of changes to ASSERT_MATCHING_ENUMS. 14 * UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp: Added. 15 * UIProcess/API/gtk/WebKitNavigationPolicyDecision.h: Added. 16 * UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h: Added. 17 * UIProcess/API/gtk/WebKitPolicyClient.cpp: Added. 18 * UIProcess/API/gtk/WebKitPolicyClientPrivate.h: Added. 19 * UIProcess/API/gtk/WebKitPolicyDecision.cpp: Added. 20 * UIProcess/API/gtk/WebKitPolicyDecision.h: Added. 21 * UIProcess/API/gtk/WebKitPolicyDecisionPrivate.h: Added. 22 * UIProcess/API/gtk/WebKitPrivate.h: Modify ASSERT_MATCHING_ENUMS to make 23 it useful for non-WebCore enums. 24 * UIProcess/API/gtk/WebKitWebView.cpp: 25 (webkitWebViewConstructed): Attach the policy client callbacks to the page. 26 (webkit_web_view_class_init): Add the decide-policy signal definition. 27 (webkitWebViewMakePolicyDecision): Added this private method to fire the signal. 28 * UIProcess/API/gtk/WebKitWebView.h: Added new signal to the list. 29 * UIProcess/API/gtk/WebKitWebViewPrivate.h: Added new method declaration. 30 * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Added new classes to the docs. 31 * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Ditto. 32 * UIProcess/API/gtk/tests/GNUmakefile.am: Added new test to the source list. 33 * UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp: Added. 34 * UIProcess/API/gtk/webkit2marshal.list: decide-policy has a new signature. 35 1 36 2012-01-27 Ada Chan <adachan@apple.com> 2 37 -
trunk/Source/WebKit2/GNUmakefile.am
r106132 r106142 86 86 $(WebKit2)/UIProcess/API/gtk/WebKitDownload.h \ 87 87 $(WebKit2)/UIProcess/API/gtk/WebKitError.h \ 88 $(WebKit2)/UIProcess/API/gtk/WebKitWebContext.h \ 88 $(WebKit2)/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h \ 89 $(WebKit2)/UIProcess/API/gtk/WebKitPolicyDecision.h \ 89 90 $(WebKit2)/UIProcess/API/gtk/WebKitSettings.h \ 90 91 $(WebKit2)/UIProcess/API/gtk/WebKitURIRequest.h \ 91 92 $(WebKit2)/UIProcess/API/gtk/WebKitURIResponse.h \ 93 $(WebKit2)/UIProcess/API/gtk/WebKitWebContext.h \ 92 94 $(WebKit2)/UIProcess/API/gtk/WebKitWebView.h \ 93 95 $(WebKit2)/UIProcess/API/gtk/WebKitWebViewBase.h \ … … 533 535 Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.h \ 534 536 Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp \ 537 Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp \ 538 Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h \ 539 Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h \ 540 Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp \ 541 Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.h \ 542 Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp \ 543 Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.h \ 535 544 Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h \ 536 545 Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp \ -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.cpp
r105708 r106142 24 24 #include "WebKitPrivate.h" 25 25 #include <WebCore/ErrorsGtk.h> 26 27 using namespace WebCore; 26 28 27 29 GQuark webkit_network_error_quark() -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h
r105704 r106142 34 34 #include <wtf/Assertions.h> 35 35 36 G_BEGIN_DECLS37 38 36 #define WEBKIT_PARAM_READABLE (static_cast<GParamFlags>(G_PARAM_READABLE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB)) 39 37 #define WEBKIT_PARAM_WRITABLE (static_cast<GParamFlags>(G_PARAM_WRITABLE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB)) … … 41 39 42 40 #define COMPILE_ASSERT_MATCHING_ENUM(webkitName, webcoreName) \ 43 COMPILE_ASSERT(int(webkitName) == int(WebCore::webcoreName), mismatchingEnums) 44 45 G_END_DECLS 41 COMPILE_ASSERT(int(webkitName) == int(webcoreName), mismatchingEnums) 46 42 47 43 #endif // WebKitPrivate_h -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp
r105854 r106142 27 27 #include "WebKitLoaderClient.h" 28 28 #include "WebKitMarshal.h" 29 #include "WebKitPolicyClient.h" 29 30 #include "WebKitSettingsPrivate.h" 30 31 #include "WebKitUIClient.h" … … 56 57 SCRIPT_PROMPT, 57 58 59 DECIDE_POLICY, 60 58 61 LAST_SIGNAL 59 62 }; … … 145 148 } 146 149 150 static gboolean webkitWebViewDecidePolicy(WebKitWebView*, WebKitPolicyDecision* decision, WebKitPolicyDecisionType) 151 { 152 webkit_policy_decision_use(decision); 153 return TRUE; 154 } 155 147 156 static void webkitWebViewConstructed(GObject* object) 148 157 { … … 158 167 attachLoaderClientToView(webView); 159 168 attachUIClientToView(webView); 169 attachPolicyClientToPage(webView); 160 170 161 171 WebPageProxy* page = webkitWebViewBaseGetPage(webViewBase); … … 244 254 webViewClass->script_confirm = webkitWebViewScriptConfirm; 245 255 webViewClass->script_prompt = webkitWebViewScriptPrompt; 256 webViewClass->decide_policy = webkitWebViewDecidePolicy; 246 257 247 258 g_type_class_add_private(webViewClass, sizeof(WebKitWebViewPrivate)); … … 542 553 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); 543 554 555 /** 556 * WebKitPolicyClient::decide-policy 557 * @web_view: the #WebKitWebView on which the signal is emitted 558 * @decision: the #WebKitNavigationPolicyDecision 559 * @decision_type: a #WebKitPolicyDecisionType denoting the type of @decision 560 * 561 * This signal is emitted when WebKit is requesting the client to decide a policy 562 * decision, such as whether to navigate to a page, open a new window or whether or 563 * not to download a resource. The #WebKitNavigationPolicyDecision passed in the 564 * @decision argument is a generic type, but should be casted to a more 565 * specific type when making the decision. For example: 566 * 567 * <informalexample><programlisting> 568 * static gboolean 569 * decide_policy_cb (WebKitWebView *web_view, 570 * WebKitPolicyDecision *decision, 571 * WebKitPolicyDecisionType type) 572 * { 573 * switch (type) { 574 * case WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION: 575 * WebKitNavigationPolicyDecision *navigation_decision = WEBKIT_NAVIGATION_POLICY_DECISION (decision); 576 * /<!-- -->* Make a policy decision here. *<!-- -->/ 577 * break; 578 * case WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION: 579 * WebKitNavigationPolicyDecision *navigation_decision = WEBKIT_NAVIGATION_POLICY_DECISION (decision); 580 * /<!-- -->* Make a policy decision here. *<!-- -->/ 581 * break; 582 * case WEBKIT_POLICY_DECISION_TYPE_RESPONSE: 583 * WebKitResponsePolicyDecision *response = WEBKIT_RESPONSE_POLICY_DECISION (decision); 584 * /<!-- -->* Make a policy decision here. *<!-- -->/ 585 * break; 586 * default: 587 * /<!-- -->* Making no decision results in webkit_policy_decision_use(). *<!-- -->/ 588 * return FALSE; 589 * } 590 * return TRUE; 591 * } 592 * </programlisting></informalexample> 593 * 594 * It is possible to make policy decision asynchronously, by simply calling g_object_ref() 595 * on the @decision argument and returning %TRUE to block the default signal handler. 596 * If the last reference is removed on a #WebKitPolicyDecision and no decision has been 597 * made explicitly, webkit_policy_decision_use() will be the default policy decision. The 598 * default signal handler will simply call webkit_policy_decision_use(). Only the first 599 * policy decision chosen for a given #WebKitPolicyDecision will have any affect. 600 * 601 * Returns: %TRUE to stop other handlers from being invoked for the event. 602 * %FALSE to propagate the event further. 603 * 604 */ 605 signals[DECIDE_POLICY] = 606 g_signal_new("decide-policy", 607 G_TYPE_FROM_CLASS(webViewClass), 608 G_SIGNAL_RUN_LAST, 609 G_STRUCT_OFFSET(WebKitWebViewClass, decide_policy), 610 g_signal_accumulator_true_handled, 0 /* accumulator data */, 611 webkit_marshal_BOOLEAN__OBJECT_ENUM, 612 G_TYPE_BOOLEAN, 2, /* number of parameters */ 613 WEBKIT_TYPE_POLICY_DECISION, 614 WEBKIT_TYPE_POLICY_DECISION_TYPE); 544 615 } 545 616 … … 645 716 g_signal_emit(webView, signals[SCRIPT_PROMPT], 0, message.data(), defaultText.data(), &text.outPtr(), &returnValue); 646 717 return text ? WKStringCreateWithUTF8CString(text.get()) : 0; 718 } 719 720 void webkitWebViewMakePolicyDecision(WebKitWebView* webView, WebKitPolicyDecisionType type, WebKitPolicyDecision* decision) 721 { 722 gboolean returnValue; 723 g_signal_emit(webView, signals[DECIDE_POLICY], 0, decision, type, &returnValue); 647 724 } 648 725 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h
r104145 r106142 36 36 #include <webkit2/WebKitWebViewBase.h> 37 37 #include <webkit2/WebKitWindowProperties.h> 38 #include <webkit2/WebKitPolicyDecision.h> 38 39 39 40 G_BEGIN_DECLS 41 42 /** 43 * WebKitPolicyDecisionType: 44 * @WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION: This type of policy decision 45 * is requested when WebKit is about to navigate to a new page in either the 46 * main frame or a subframe. Acceptable policy decisions are either 47 * webkit_policy_decision_use() or webkit_policy_decision_ignore(). This 48 * type of policy decision is always a #WebKitNavigationPolicyDecision. 49 * @WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION: This type of policy decision 50 * is requested when WebKit is about to create a new window. Acceptable policy 51 * decisions are either webkit_policy_decision_use() or 52 * webkit_policy_decision_ignore(). This type of policy decision is always 53 * a #WebKitNavigationPolicyDecision. These decisions are useful for implementing 54 * special actions for new windows, such as forcing the new window to open 55 * in a tab when a keyboard modifier is active or handling a special 56 * target attribute on <a> elements. 57 * @WEBKIT_POLICY_DECISION_TYPE_RESPONSE: This type of decision is used when WebKit has 58 * received a response for a network resource and is about to start the load. 59 * Note that these resources include all subresources of a page such as images 60 * and stylesheets as well as main documents. Appropriate policy responses to 61 * this decision are webkit_policy_decision_use(), webkit_policy_decision_ignore(), 62 * or webkit_policy_decision_download(). This type of policy decision is always 63 * a #WebKitResponsePolicyDecision. This decision is useful for forcing 64 * some types of resources to be downloaded rather than rendered in the WebView 65 * or to block the transfer of resources entirely. 66 * 67 * Enum values used for determining the type of a policy decision during 68 * WebKitWebView::decide-policy. 69 */ 70 typedef enum { 71 WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION, 72 WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION, 73 WEBKIT_POLICY_DECISION_TYPE_RESPONSE, 74 } WebKitPolicyDecisionType; 40 75 41 76 #define WEBKIT_TYPE_WEB_VIEW (webkit_web_view_get_type()) … … 82 117 WebKitWebViewBaseClass parent; 83 118 84 void (* load_changed) (WebKitWebView *web_view, 85 WebKitLoadEvent load_event); 86 gboolean (* load_failed) (WebKitWebView *web_view, 87 WebKitLoadEvent load_event, 88 const gchar *failing_uri, 89 GError *error); 90 91 GtkWidget *(* create) (WebKitWebView *web_view); 92 void (* ready_to_show) (WebKitWebView *web_view); 93 void (* close) (WebKitWebView *web_view); 94 95 gboolean (* script_alert) (WebKitWebView *web_view, 96 const gchar *message); 97 gboolean (* script_confirm) (WebKitWebView *web_view, 98 const gchar *message, 99 gboolean *confirmed); 100 gboolean (* script_prompt) (WebKitWebView *web_view, 101 const gchar *message, 102 const gchar *default_text, 103 gchar **text); 119 void (* load_changed) (WebKitWebView *web_view, 120 WebKitLoadEvent load_event); 121 gboolean (* load_failed) (WebKitWebView *web_view, 122 WebKitLoadEvent load_event, 123 const gchar *failing_uri, 124 GError *error); 125 126 GtkWidget *(* create) (WebKitWebView *web_view); 127 void (* ready_to_show) (WebKitWebView *web_view); 128 void (* close) (WebKitWebView *web_view); 129 130 gboolean (* script_alert) (WebKitWebView *web_view, 131 const gchar *message); 132 gboolean (* script_confirm) (WebKitWebView *web_view, 133 const gchar *message, 134 gboolean *confirmed); 135 gboolean (* script_prompt) (WebKitWebView *web_view, 136 const gchar *message, 137 const gchar *default_text, 138 gchar **text); 139 gboolean (* decide_policy) (WebKitWebView *web_view, 140 WebKitPolicyDecision *decision, 141 WebKitPolicyDecisionType type); 104 142 105 143 /* Padding for future expansion */ -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h
r103938 r106142 43 43 bool webkitWebViewRunJavaScriptConfirm(WebKitWebView*, const CString& message); 44 44 WKStringRef webkitWebViewRunJavaScriptPrompt(WebKitWebView*, const CString& message, const CString& defaultText); 45 void webkitWebViewMakePolicyDecision(WebKitWebView*, WebKitPolicyDecisionType, WebKitPolicyDecision*); 45 46 46 47 #endif // WebKitWebViewPrivate_h -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml
r105704 r106142 22 22 <xi:include href="xml/WebKitWindowProperties.xml"/> 23 23 <xi:include href="xml/WebKitDownload.xml"/> 24 <xi:include href="xml/WebKitPolicyDecision.xml"/> 25 <xi:include href="xml/WebKitNavigationPolicyDecision.xml"/> 24 26 <xi:include href="xml/WebKitError.xml"/> 25 27 </chapter> -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt
r105708 r106142 49 49 WebKitWebView 50 50 WebKitLoadEvent 51 WebKitPolicyDecisionType 51 52 webkit_web_view_new 52 53 webkit_web_view_new_with_context … … 313 314 314 315 <SECTION> 316 <FILE>WebKitPolicyDecision</FILE> 317 WebKitPolicyDecision 318 webkit_policy_decision_download 319 webkit_policy_decision_ignore 320 webkit_policy_decision_use 321 322 <SUBSECTION Standard> 323 WebKitPolicyDecisionClass 324 WEBKIT_TYPE_POLICY_DECISION 325 WEBKIT_POLICY_DECISION 326 WEBKIT_IS_POLICY_DECISION 327 WEBKIT_POLICY_DECISION_CLASS 328 WEBKIT_IS_POLICY_DECISION_CLASS 329 WEBKIT_POLICY_DECISION_GET_CLASS 330 331 <SUBSECTION Private> 332 WebKitPolicyDecisionPrivate 333 webkit_policy_decision_get_type 334 </SECTION> 335 336 <SECTION> 337 <FILE>WebKitNavigationPolicyDecision</FILE> 338 WebKitNavigationPolicyDecision 339 WebKitNavigationType 340 webkit_navigation_policy_decision_get_frame_name 341 webkit_navigation_policy_decision_get_modifiers 342 webkit_navigation_policy_decision_get_mouse_button 343 webkit_navigation_policy_decision_get_navigation_type 344 webkit_navigation_policy_decision_get_request 345 346 <SUBSECTION Standard> 347 WebKitNavigationPolicyDecisionClass 348 WEBKIT_TYPE_NAVIGATION_POLICY_DECISION 349 WEBKIT_NAVIGATION_POLICY_DECISION 350 WEBKIT_IS_NAVIGATION_POLICY_DECISION 351 WEBKIT_NAVIGATION_POLICY_DECISION_CLASS 352 WEBKIT_IS_NAVIGATION_POLICY_DECISION_CLASS 353 WEBKIT_NAVIGATION_POLICY_DECISION_GET_CLASS 354 355 <SUBSECTION Private> 356 WebKitNavigationPolicyDecisionPrivate 357 webkit_navigation_policy_decision_get_type 358 </SECTION> 359 360 <SECTION> 315 361 <FILE>WebKitError</FILE> 316 362 WEBKIT_NETWORK_ERROR -
trunk/Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am
r105854 r106142 5 5 Programs/WebKit2APITests/TestWebKitSettings \ 6 6 Programs/WebKit2APITests/TestBackForwardList \ 7 Programs/WebKit2APITests/TestDownloads 7 Programs/WebKit2APITests/TestDownloads \ 8 Programs/WebKit2APITests/TestWebKitPolicyClient 8 9 9 10 noinst_PROGRAMS += $(TEST_PROGS) … … 86 87 Programs_WebKit2APITests_TestBackForwardList_LDFLAGS = $(webkit2_tests_ldflags) 87 88 89 Programs_WebKit2APITests_TestWebKitPolicyClient_SOURCES = \ 90 Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp 91 Programs_WebKit2APITests_TestWebKitPolicyClient_CPPFLAGS = $(webkit2_tests_cppflags) 92 Programs_WebKit2APITests_TestWebKitPolicyClient_LDADD = $(webkit2_tests_ldadd) 93 Programs_WebKit2APITests_TestWebKitPolicyClient_LDFLAGS = $(webkit2_tests_ldflags) 94 88 95 if HAVE_ATSPI2 89 96 Programs_WebKit2APITests_AccessibilityTestServer_SOURCES = \ … … 105 112 Programs_WebKit2APITests_TestDownloads_LDADD = $(webkit2_tests_ldadd) 106 113 Programs_WebKit2APITests_TestDownloads_LDFLAGS = $(webkit2_tests_ldflags) 107 -
trunk/Source/WebKit2/UIProcess/API/gtk/webkit2marshal.list
r105704 r106142 1 1 BOOLEAN:ENUM,STRING,POINTER 2 2 BOOLEAN:OBJECT 3 BOOLEAN:OBJECT,ENUM 3 4 BOOLEAN:OBJECT,STRING,POINTER 4 5 BOOLEAN:POINTER -
trunk/Tools/ChangeLog
r106139 r106142 1 2012-01-27 Martin Robinson <mrobinson@igalia.com> 2 3 [GTK] [WK2] Implement the policy client 4 https://bugs.webkit.org/show_bug.cgi?id=76343 5 6 Reviewed by Gustavo Noronha Silva. 7 8 * gtk/generate-gtkdoc: 9 (get_webkit2_options): Update the list of skipped source files to include all clients. 10 1 11 2012-01-27 Ada Chan <adachan@apple.com> 2 12 -
trunk/Tools/gtk/generate-gtkdoc
r105854 r106142 60 60 ' -I' + src_path(), 61 61 'ignored_files': glob.glob(src_path('*Private.h')) + \ 62 glob.glob(src_path('PageClientImpl.*')) + \ 63 glob.glob(src_path('WebKitDownloadClient.*')) + \ 64 glob.glob(src_path('WebKitUIClient.*')) + \ 65 glob.glob(src_path('WebKitLoaderClient.*')) + \ 62 glob.glob(src_path('*Client*')) + \ 66 63 glob.glob(src_path('WebKitWebViewBaseAccessible.*')) + \ 67 64 glob.glob(src_path('tests/*.h'))
Note: See TracChangeset
for help on using the changeset viewer.