Changeset 163781 in webkit
- Timestamp:
- Feb 10, 2014 5:46:59 AM (10 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r163779 r163781 1 2014-02-10 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Add API to create a webview related to another one 4 https://bugs.webkit.org/show_bug.cgi?id=128498 5 6 Reviewed by Gustavo Noronha Silva. 7 8 Add webkit_web_view_new_with_related_view() to create a new 9 WebView sharing the same web process as the given one. 10 11 * UIProcess/API/gtk/WebKitWebContext.cpp: 12 (webkitWebContextCreatePageForWebView): Use the given related 13 WebView to pass a related WebPageProxy to webkitWebViewBaseCreateWebPage(). 14 * UIProcess/API/gtk/WebKitWebContextPrivate.h: 15 * UIProcess/API/gtk/WebKitWebView.cpp: 16 (webkitWebViewConstructed): Pass the related web view to webkitWebContextCreatePageForWebView(). 17 (webkitWebViewSetProperty): 18 (webkit_web_view_class_init): Add related-view construct-only property. 19 (webkit_web_view_new_with_related_view): New public method to 20 create a web view with a related one. 21 * UIProcess/API/gtk/WebKitWebView.h: 22 * UIProcess/API/gtk/WebKitWebViewBase.cpp: 23 (webkitWebViewBaseCreate): Pass nullptr as related page to webkitWebViewBaseCreateWebPage(). 24 (webkitWebViewBaseCreateWebPage): Use the given related 25 WebPageProxy to initialize the web page configuration. 26 * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: 27 * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol. 28 1 29 2014-02-10 Lukasz Bialek <l.bialek@samsung.com> 2 30 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp
r163698 r163781 1039 1039 } 1040 1040 1041 void webkitWebContextCreatePageForWebView(WebKitWebContext* context, WebKitWebView* webView, WebKitWebViewGroup* webViewGroup )1041 void webkitWebContextCreatePageForWebView(WebKitWebContext* context, WebKitWebView* webView, WebKitWebViewGroup* webViewGroup, WebKitWebView* relatedView) 1042 1042 { 1043 1043 WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(webView); 1044 1044 WebPageGroup* pageGroup = webViewGroup ? webkitWebViewGroupGetPageGroup(webViewGroup) : 0; 1045 webkitWebViewBaseCreateWebPage(webViewBase, context->priv->context.get(), pageGroup); 1045 WebPageProxy* relatedPage = relatedView ? webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(relatedView)) : nullptr; 1046 webkitWebViewBaseCreateWebPage(webViewBase, context->priv->context.get(), pageGroup, relatedPage); 1046 1047 1047 1048 WebPageProxy* page = webkitWebViewBaseGetPage(webViewBase); -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h
r162835 r163781 43 43 void webkitWebContextStopLoadingCustomProtocol(WebKitWebContext*, uint64_t customProtocolID); 44 44 void webkitWebContextDidFinishLoadingCustomProtocol(WebKitWebContext*, uint64_t customProtocolID); 45 void webkitWebContextCreatePageForWebView(WebKitWebContext*, WebKitWebView*, WebKitWebViewGroup* );45 void webkitWebContextCreatePageForWebView(WebKitWebContext*, WebKitWebView*, WebKitWebViewGroup*, WebKitWebView*); 46 46 void webkitWebContextWebViewDestroyed(WebKitWebContext*, WebKitWebView*); 47 47 WebKitWebView* webkitWebContextGetWebViewForPage(WebKitWebContext*, WebKit::WebPageProxy*); -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp
r163074 r163781 133 133 134 134 PROP_WEB_CONTEXT, 135 PROP_RELATED_VIEW, 135 136 PROP_GROUP, 136 137 PROP_TITLE, … … 158 159 159 160 WebKitWebContext* context; 161 WebKitWebView* relatedView; 160 162 CString title; 161 163 CString customTextEncoding; … … 503 505 WebKitWebView* webView = WEBKIT_WEB_VIEW(object); 504 506 WebKitWebViewPrivate* priv = webView->priv; 505 webkitWebContextCreatePageForWebView(priv->context, webView, priv->group.get()); 507 webkitWebContextCreatePageForWebView(priv->context, webView, priv->group.get(), priv->relatedView); 508 // The related view is only valid during the construction. 509 priv->relatedView = nullptr; 506 510 507 511 webkitWebViewBaseSetDownloadRequestHandler(WEBKIT_WEB_VIEW_BASE(webView), webkitWebViewHandleDownloadRequest); … … 530 534 gpointer webContext = g_value_get_object(value); 531 535 webView->priv->context = webContext ? WEBKIT_WEB_CONTEXT(webContext) : webkit_web_context_get_default(); 536 break; 537 } 538 case PROP_RELATED_VIEW: { 539 gpointer relatedView = g_value_get_object(value); 540 webView->priv->relatedView = relatedView ? WEBKIT_WEB_VIEW(relatedView) : nullptr; 532 541 break; 533 542 } … … 637 646 WEBKIT_TYPE_WEB_CONTEXT, 638 647 static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY))); 648 /** 649 * WebKitWebView:related-view: 650 * 651 * The related #WebKitWebView used when creating the view to share the 652 * same web process. This property is not readable because the related 653 * web view is only valid during the object construction. 654 * 655 * Since: 2.4 656 */ 657 g_object_class_install_property( 658 gObjectClass, 659 PROP_RELATED_VIEW, 660 g_param_spec_object( 661 "related-view", 662 _("Related WebView"), 663 _("The related WebKitWebView used when creating the view to share the same web process"), 664 WEBKIT_TYPE_WEB_VIEW, 665 static_cast<GParamFlags>(WEBKIT_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY))); 666 639 667 /** 640 668 * WebKitWebView:group: … … 891 919 * newly created #WebKitWebView. 892 920 * 921 * When using %WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES 922 * process model, the new #WebKitWebView should be related to 923 * @web_view to share the same web process, see webkit_web_view_new_with_related_view 924 * for more details. 925 * 893 926 * The new #WebKitWebView should not be displayed to the user 894 927 * until the #WebKitWebView::ready-to-show signal is emitted. … … 1880 1913 1881 1914 return GTK_WIDGET(g_object_new(WEBKIT_TYPE_WEB_VIEW, "web-context", context, NULL)); 1915 } 1916 1917 /** 1918 * webkit_web_view_new_with_related_view: 1919 * @web_view: the related #WebKitWebView 1920 * 1921 * Creates a new #WebKitWebView sharing the same web process with @web_view. 1922 * This method doesn't have any effect when %WEBKIT_PROCESS_MODEL_SHARED_SECONDARY_PROCESS 1923 * process model is used, because a single web process is shared for all the web views in the 1924 * same #WebKitWebContext. When using %WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES process model, 1925 * this method should always be used when creating the #WebKitWebView in the #WebKitWebView::create signal. 1926 * You can also use this method to implement other process models based on %WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES, 1927 * like for example, sharing the same web process for all the views in the same security domain. 1928 * 1929 * Returns: (transfer full): The newly created #WebKitWebView widget 1930 * 1931 * Since: 2.4 1932 */ 1933 GtkWidget* webkit_web_view_new_with_related_view(WebKitWebView* webView) 1934 { 1935 g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), nullptr); 1936 1937 return GTK_WIDGET(g_object_new(WEBKIT_TYPE_WEB_VIEW, "related-view", webView, nullptr)); 1882 1938 } 1883 1939 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h
r157781 r163781 267 267 268 268 WEBKIT_API GtkWidget * 269 webkit_web_view_new_with_related_view (WebKitWebView *web_view); 270 271 WEBKIT_API GtkWidget * 269 272 webkit_web_view_new_with_group (WebKitWebViewGroup *group); 270 273 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp
r163749 r163781 940 940 { 941 941 WebKitWebViewBase* webkitWebViewBase = WEBKIT_WEB_VIEW_BASE(g_object_new(WEBKIT_TYPE_WEB_VIEW_BASE, NULL)); 942 webkitWebViewBaseCreateWebPage(webkitWebViewBase, context, pageGroup );942 webkitWebViewBaseCreateWebPage(webkitWebViewBase, context, pageGroup, nullptr); 943 943 return webkitWebViewBase; 944 944 } … … 966 966 } 967 967 968 void webkitWebViewBaseCreateWebPage(WebKitWebViewBase* webkitWebViewBase, WebContext* context, WebPageGroup* pageGroup )968 void webkitWebViewBaseCreateWebPage(WebKitWebViewBase* webkitWebViewBase, WebContext* context, WebPageGroup* pageGroup, WebPageProxy* relatedPage) 969 969 { 970 970 WebKitWebViewBasePrivate* priv = webkitWebViewBase->priv; … … 972 972 WebPageConfiguration webPageConfiguration; 973 973 webPageConfiguration.pageGroup = pageGroup; 974 webPageConfiguration.relatedPage = relatedPage; 974 975 priv->pageProxy = context->createWebPage(*priv->pageClient, std::move(webPageConfiguration)); 975 976 priv->pageProxy->initializeWebPage(); -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h
r162724 r163781 38 38 GtkIMContext* webkitWebViewBaseGetIMContext(WebKitWebViewBase*); 39 39 WebKit::WebPageProxy* webkitWebViewBaseGetPage(WebKitWebViewBase*); 40 void webkitWebViewBaseCreateWebPage(WebKitWebViewBase*, WebKit::WebContext*, WebKit::WebPageGroup* );40 void webkitWebViewBaseCreateWebPage(WebKitWebViewBase*, WebKit::WebContext*, WebKit::WebPageGroup*, WebKit::WebPageProxy*); 41 41 void webkitWebViewBaseSetTooltipText(WebKitWebViewBase*, const char*); 42 42 void webkitWebViewBaseSetTooltipArea(WebKitWebViewBase*, const WebCore::IntRect&); -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt
r162928 r163781 96 96 webkit_web_view_new 97 97 webkit_web_view_new_with_context 98 webkit_web_view_new_with_related_view 98 99 webkit_web_view_new_with_group 99 100 webkit_web_view_get_context -
trunk/Tools/ChangeLog
r163780 r163781 1 2014-02-10 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Add API to create a webview related to another one 4 https://bugs.webkit.org/show_bug.cgi?id=128498 5 6 Reviewed by Gustavo Noronha Silva. 7 8 * MiniBrowser/gtk/BrowserWindow.c: 9 (webViewCreate): Use webkit_web_view_new_with_related_view() when 10 creating a new web view for window.open(). 11 * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp: 12 (testMultiprocessWebViewCreateReadyClose): Add test case to check 13 that window.open() works when creating the new WebView related to 14 the existing one, and that no new web process is spawned when 15 using webkit_web_view_new_with_related_view(). 16 (beforeAll): 17 1 18 2014-02-10 Eva Balazsfalvi <balazsfalvi.eva@stud.u-szeged.hu> 2 19 -
trunk/Tools/MiniBrowser/gtk/BrowserWindow.c
r162122 r163781 347 347 static GtkWidget *webViewCreate(WebKitWebView *webView, BrowserWindow *window) 348 348 { 349 WebKitWebView *newWebView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_ context(webkit_web_view_get_context(webView)));349 WebKitWebView *newWebView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_related_view(webView)); 350 350 webkit_web_view_set_settings(newWebView, webkit_web_view_get_settings(webView)); 351 351 -
trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp
r163698 r163781 22 22 #include "TestMain.h" 23 23 #include "WebKitTestBus.h" 24 #include "WebViewTest.h" 24 25 #include <webkit2/webkit2.h> 25 26 #include <wtf/Vector.h> … … 105 106 } 106 107 108 class UIClientMultiprocessTest: public WebViewTest { 109 public: 110 MAKE_GLIB_TEST_FIXTURE(UIClientMultiprocessTest); 111 112 enum WebViewEvents { 113 Create, 114 ReadyToShow, 115 Close 116 }; 117 118 static GtkWidget* viewCreateCallback(WebKitWebView* webView, UIClientMultiprocessTest* test) 119 { 120 return test->viewCreate(webView); 121 } 122 123 static void viewReadyToShowCallback(WebKitWebView* webView, UIClientMultiprocessTest* test) 124 { 125 test->viewReadyToShow(webView); 126 } 127 128 static void viewCloseCallback(WebKitWebView* webView, UIClientMultiprocessTest* test) 129 { 130 test->viewClose(webView); 131 } 132 133 UIClientMultiprocessTest() 134 { 135 webkit_settings_set_javascript_can_open_windows_automatically(webkit_web_view_get_settings(m_webView), TRUE); 136 g_signal_connect(m_webView, "create", G_CALLBACK(viewCreateCallback), this); 137 } 138 139 ~UIClientMultiprocessTest() 140 { 141 g_signal_handlers_disconnect_matched(m_webView, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this); 142 } 143 144 GtkWidget* viewCreate(WebKitWebView* webView) 145 { 146 g_assert(webView == m_webView); 147 148 GtkWidget* newWebView = webkit_web_view_new_with_related_view(webView); 149 g_object_ref_sink(newWebView); 150 assertObjectIsDeletedWhenTestFinishes(G_OBJECT(newWebView)); 151 m_webViewEvents.append(Create); 152 153 g_signal_connect(newWebView, "ready-to-show", G_CALLBACK(viewReadyToShowCallback), this); 154 g_signal_connect(newWebView, "close", G_CALLBACK(viewCloseCallback), this); 155 156 return newWebView; 157 } 158 159 void viewReadyToShow(WebKitWebView* webView) 160 { 161 g_assert(m_webView != webView); 162 m_webViewEvents.append(ReadyToShow); 163 } 164 165 void viewClose(WebKitWebView* webView) 166 { 167 g_assert(m_webView != webView); 168 169 m_webViewEvents.append(Close); 170 g_object_unref(webView); 171 g_main_loop_quit(m_mainLoop); 172 } 173 174 void waitUntilNewWebViewClose() 175 { 176 g_main_loop_run(m_mainLoop); 177 } 178 179 Vector<WebViewEvents> m_webViewEvents; 180 }; 181 182 static void testMultiprocessWebViewCreateReadyClose(UIClientMultiprocessTest* test, gconstpointer) 183 { 184 // At this point the web process of the current view has already been created. 185 // We save it here to check that after window.open() the number of processes 186 // is the same. 187 guint32 processCountBefore = nextInitializationId - 1; 188 test->loadHtml("<html><body onLoad=\"window.open().close();\"></html>", nullptr); 189 test->waitUntilNewWebViewClose(); 190 191 Vector<UIClientMultiprocessTest::WebViewEvents>& events = test->m_webViewEvents; 192 g_assert_cmpint(events.size(), ==, 3); 193 g_assert_cmpint(events[0], ==, UIClientMultiprocessTest::Create); 194 g_assert_cmpint(events[1], ==, UIClientMultiprocessTest::ReadyToShow); 195 g_assert_cmpint(events[2], ==, UIClientMultiprocessTest::Close); 196 197 guint32 processesCountAfter = nextInitializationId - 1; 198 g_assert_cmpuint(processesCountAfter, ==, processCountBefore); 199 } 200 107 201 static void initializeWebExtensions(WebKitWebContext* context, gpointer) 108 202 { … … 134 228 135 229 MultiprocessTest::add("WebKitWebContext", "process-per-web-view", testProcessPerWebView); 230 UIClientMultiprocessTest::add("WebKitWebView", "multiprocess-create-ready-close", testMultiprocessWebViewCreateReadyClose); 136 231 } 137 232
Note: See TracChangeset
for help on using the changeset viewer.