static void testWebViewWebContextLifetime(WebViewTest* test, gconstpointer) { WebKitWebContext* webContext = webkit_web_context_new(); test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webContext)); GtkWidget* webView = webkit_web_view_new_with_context(webContext); test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView)); g_object_ref_sink(webView); g_object_unref(webContext); // Check that the web view still has a valid context. WebKitWebContext* tmpContext = webkit_web_view_get_context(WEBKIT_WEB_VIEW(webView)); g_assert_true(WEBKIT_IS_WEB_CONTEXT(tmpContext)); g_object_unref(webView); WebKitWebContext* webContext2 = webkit_web_context_new(); test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webContext2)); GtkWidget* webView2 = webkit_web_view_new_with_context(webContext2); test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView2)); g_object_ref_sink(webView2); g_object_unref(webView2); // Check that the context is still valid. g_assert_true(WEBKIT_IS_WEB_CONTEXT(webContext2)); g_object_unref(webContext2); }
int makeWindow(RuskWindow *rusk) { GtkWidget *box; if((rusk->window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL))) == NULL) { return -1; } gtk_container_set_border_width(GTK_CONTAINER(rusk->window), BORDER_WIDTH); gtk_widget_override_background_color(GTK_WIDGET(rusk->window), GTK_STATE_FLAG_NORMAL, BORDER_COLOR_NORMAL); box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(rusk->window), box); rusk->addressbar = GTK_ENTRY(gtk_entry_new()); gtk_entry_set_placeholder_text(rusk->addressbar, "URI"); gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(rusk->addressbar), FALSE, FALSE, 0); rusk->globalSearch = GTK_ENTRY(gtk_search_entry_new()); gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(rusk->globalSearch), FALSE, FALSE, 0); rusk->insiteSearch = GTK_ENTRY(gtk_search_entry_new()); gtk_entry_set_placeholder_text(rusk->insiteSearch, "site search"); gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(rusk->insiteSearch), FALSE, FALSE, 0); rusk->progressbar = GTK_PROGRESS_BAR(gtk_progress_bar_new()); gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(rusk->progressbar), FALSE, FALSE, 0); rusk->webview = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(webkit_web_context_new_with_website_data_manager(webkit_website_data_manager_new( "base-cache-directory", g_strdup_printf("%s/rusk", g_get_user_cache_dir()), "disk-cache-directory", g_strdup_printf("%s/rusk", g_get_user_cache_dir()), "base-data-directory", g_strdup_printf("%s/rusk/data", g_get_user_data_dir()), "indexeddb-directory", g_strdup_printf("%s/rusk/indexed", g_get_user_data_dir()), "local-storage-directory", g_strdup_printf("%s/rusk/local-storage", g_get_user_data_dir()), "offline-application-cache-directory", g_strdup_printf("%s/rusk/offline-apps", g_get_user_data_dir()), "websql-directory", g_strdup_printf("%s/rusk/websql", g_get_user_data_dir()), NULL )))); gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(rusk->webview), TRUE, TRUE, 0); g_signal_connect(G_OBJECT(rusk->window), "destroy", G_CALLBACK(closeRusk), rusk); gtk_widget_show_all(GTK_WIDGET(rusk->window)); gtk_widget_set_visible(GTK_WIDGET(rusk->addressbar), FALSE); gtk_widget_set_visible(GTK_WIDGET(rusk->globalSearch), FALSE); gtk_widget_set_visible(GTK_WIDGET(rusk->progressbar), FALSE); gtk_widget_set_visible(GTK_WIDGET(rusk->insiteSearch), FALSE); g_signal_connect(G_OBJECT(rusk->window), "key-press-event", G_CALLBACK(onKeyPress), rusk); g_signal_connect(G_OBJECT(rusk->insiteSearch), "search-changed", G_CALLBACK(onInSiteSearchInput), rusk); g_signal_connect(G_OBJECT(rusk->addressbar), "key-release-event", G_CALLBACK(onAddressbarInput), rusk); g_signal_connect(G_OBJECT(rusk->globalSearch), "activate", G_CALLBACK(onGlobalSearchActivate), rusk); return 0; }
static GtkWidget * _webkit_web_view_new (OAuthAskAuthorizationDialog *self) { WebKitWebContext *context; GtkWidget *view; WebKitSettings *settings; WebKitCookieManager *cookie_manager; GFile *file; char *cookie_filename; context = webkit_web_context_get_default (); view = webkit_web_view_new_with_context (context); settings = webkit_settings_new (); webkit_settings_set_enable_javascript (settings, TRUE); webkit_settings_set_javascript_can_open_windows_automatically (settings, TRUE); webkit_web_view_set_settings (WEBKIT_WEB_VIEW (view), settings); file = gth_user_dir_get_file_for_write (GTH_DIR_CACHE, GTHUMB_DIR, "cookies", NULL); cookie_filename = g_file_get_path (file); cookie_manager = webkit_web_context_get_cookie_manager (context); webkit_cookie_manager_set_accept_policy (cookie_manager, WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS); webkit_cookie_manager_set_persistent_storage (cookie_manager, cookie_filename, WEBKIT_COOKIE_PERSISTENT_STORAGE_TEXT); webkit_web_context_set_cache_model (context, WEBKIT_CACHE_MODEL_DOCUMENT_BROWSER); g_free (cookie_filename); g_object_unref (file); g_signal_connect (view, "create", G_CALLBACK (webkit_view_create_cb), self); g_signal_connect (view, "ready-to-show", G_CALLBACK (webkit_view_ready_to_show_cb), self); return view; }
static gboolean webViewDecidePolicy(WebKitWebView *webView, WebKitPolicyDecision *decision, WebKitPolicyDecisionType decisionType, BrowserWindow *window) { switch (decisionType) { case WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION: { WebKitNavigationAction *navigationAction = webkit_navigation_policy_decision_get_navigation_action(WEBKIT_NAVIGATION_POLICY_DECISION(decision)); if (webkit_navigation_action_get_navigation_type(navigationAction) != WEBKIT_NAVIGATION_TYPE_LINK_CLICKED || webkit_navigation_action_get_mouse_button(navigationAction) != GDK_BUTTON_MIDDLE) return FALSE; // Opening a new window if link clicked with the middle button. WebKitWebView *newWebView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(webkit_web_view_get_context(webView))); GtkWidget *newWindow = browser_window_new(newWebView, GTK_WINDOW(window)); webkit_web_view_load_request(newWebView, webkit_navigation_action_get_request(navigationAction)); gtk_widget_show(newWindow); webkit_policy_decision_ignore(decision); return TRUE; } case WEBKIT_POLICY_DECISION_TYPE_RESPONSE: { WebKitResponsePolicyDecision *responseDecision = WEBKIT_RESPONSE_POLICY_DECISION(decision); if (webkit_response_policy_decision_is_mime_type_supported(responseDecision)) return FALSE; WebKitWebResource *mainResource = webkit_web_view_get_main_resource(webView); WebKitURIRequest *request = webkit_response_policy_decision_get_request(responseDecision); const char *requestURI = webkit_uri_request_get_uri(request); if (g_strcmp0(webkit_web_resource_get_uri(mainResource), requestURI)) return FALSE; webkit_policy_decision_download(decision); return TRUE; } case WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION: default: return FALSE; } }
m_initializeWebExtensionsSignalCount++; } static void loadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, MultiprocessTest* test) { if (loadEvent != WEBKIT_LOAD_FINISHED) return; g_signal_handlers_disconnect_by_func(webView, reinterpret_cast<void*>(loadChanged), test); g_main_loop_quit(test->m_mainLoop); } void loadWebViewAndWaitUntilLoaded(unsigned index) { g_assert_cmpuint(index, <, numViews); m_webViews[index] = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(m_webContext.get())); assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_webViews[index].get())); m_webViewBusNames[index] = GUniquePtr<char>(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); webkit_web_view_load_html(m_webViews[index].get(), "<html></html>", nullptr); g_signal_connect(m_webViews[index].get(), "load-changed", G_CALLBACK(loadChanged), this); g_main_loop_run(m_mainLoop); } unsigned webProcessPid(unsigned index) { g_assert_cmpuint(index, <, numViews); GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(m_webViewBusNames[index].get(), "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", m_mainLoop));