static int initCookieManager(WebKitSettings *webkitSettings) { if(!webkitSettings) return 0; // Enable cooki manager to store cookie message.--- by Jiayu WebKitCookieManager* cookiemanager = webkit_web_context_get_cookie_manager(webkit_web_context_get_default()); int error = 0; gchar* home = getenv("HOME"); gchar cookieDatabasePath[2048]; g_sprintf(cookieDatabasePath, "%s/.cookie", home); if(!g_file_test(cookieDatabasePath, G_FILE_TEST_IS_DIR) || !g_access(cookieDatabasePath, /*S_IWUSR|S_IRUSR*/0755)){ error = g_mkdir_with_parents(cookieDatabasePath, /*S_IWUSR|S_IRUSR*/ 0755); } if(!error){ gchar cookieDatabase[2048]; g_sprintf(cookieDatabase, "%s/cookie_database", cookieDatabasePath); g_printf("cookiedatabase path is %s\n", cookieDatabase); webkit_cookie_manager_set_persistent_storage(cookiemanager, cookieDatabase, WEBKIT_COOKIE_PERSISTENT_STORAGE_SQLITE); }else{ g_printerr("LOG-> Init: Failed to init cookie database\n"); return 0; } //g_mkdir_with_parents(cookieDatabaePath, ); //webkit_cookie_manager_set_persistent_storage(cookiemanager, "cookies_database", WEBKIT_COOKIE_PERSISTENT_STORAGE_SQLITE); WebKitCookieAcceptPolicy cookiePolicy = WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS; int cookieSetting; error = 0; g_object_get(webkitSettings, key[PROP_COOKIE_SETTING], &cookieSetting, NULL); switch(cookieSetting){ case 0: cookiePolicy = WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS; break; case 1: cookiePolicy = WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY; break; case 2: cookiePolicy = WEBKIT_COOKIE_POLICY_ACCEPT_NEVER; break; default: error = 1; g_printerr("LOG-> Settings: Failed to get the correct cookie setting policy\n"); break; } if(error) return 0; else{ webkit_cookie_manager_set_accept_policy(cookiemanager,cookiePolicy); return 1; } }
int setupWebView(RuskWindow *rusk) { WebKitCookieManager *cookieManager; WebKitWebContext *context; context = webkit_web_context_get_default(); cookieManager = webkit_web_context_get_cookie_manager(context); if(cookieManager == NULL) { return -1; } gchar *dbpath = getDatabasePath(); webkit_cookie_manager_set_persistent_storage(cookieManager, dbpath, WEBKIT_COOKIE_PERSISTENT_STORAGE_SQLITE); g_free(dbpath); gchar *favdir = getFaviconDir(); webkit_web_context_set_favicon_database_directory(context, favdir); g_free(favdir); webkit_settings_set_user_agent_with_application_details(webkit_web_view_get_settings(rusk->webview), "rusk", VERSION); g_signal_connect(G_OBJECT(rusk->webview), "notify::title", G_CALLBACK(onTitleChange), rusk); g_signal_connect(G_OBJECT(rusk->webview), "notify::estimated-load-progress", G_CALLBACK(onProgressChange), rusk); g_signal_connect(G_OBJECT(rusk->webview), "load-changed", G_CALLBACK(onLoadChange), rusk); g_signal_connect(G_OBJECT(rusk->webview), "notify::favicon", G_CALLBACK(onFaviconChange), rusk); g_signal_connect(G_OBJECT(rusk->webview), "mouse-target-changed", G_CALLBACK(onMouseTargetChange), rusk); g_signal_connect(G_OBJECT(rusk->webview), "create", G_CALLBACK(onRequestNewWindow), rusk); g_signal_connect(G_OBJECT(context), "download-started", G_CALLBACK(onDownloadStarted), rusk); WebKitUserContentManager *manager = webkit_web_view_get_user_content_manager(rusk->webview); if(addScriptByFileName(manager, SCRIPT_DOCUMENT_START, WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_START) < 0) { return -1; } if(addScriptByFileName(manager, SCRIPT_DOCUMENT_END, WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_END) < 0) { return -1; } 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 void ephy_embed_shell_startup (GApplication* application) { EphyEmbedShell *shell = EPHY_EMBED_SHELL (application); EphyEmbedShellPrivate *priv = ephy_embed_shell_get_instance_private (shell); char *favicon_db_path; WebKitCookieManager *cookie_manager; char *filename; char *cookie_policy; G_APPLICATION_CLASS (ephy_embed_shell_parent_class)->startup (application); /* We're not remoting, setup the Web Context if we are not running in a test. Tests already do this after construction. */ if (priv->mode != EPHY_EMBED_SHELL_MODE_TEST) ephy_embed_shell_create_web_context (embed_shell); ephy_embed_shell_setup_web_extensions_connection (shell); /* User content manager */ if (priv->mode != EPHY_EMBED_SHELL_MODE_TEST) priv->user_content = webkit_user_content_manager_new (); webkit_user_content_manager_register_script_message_handler (priv->user_content, "overview"); g_signal_connect (priv->user_content, "script-message-received::overview", G_CALLBACK (web_extension_overview_message_received_cb), shell); webkit_user_content_manager_register_script_message_handler (priv->user_content, "tlsErrorPage"); g_signal_connect (priv->user_content, "script-message-received::tlsErrorPage", G_CALLBACK (web_extension_tls_error_page_message_received_cb), shell); webkit_user_content_manager_register_script_message_handler (priv->user_content, "formAuthData"); g_signal_connect (priv->user_content, "script-message-received::formAuthData", G_CALLBACK (web_extension_form_auth_data_message_received_cb), shell); webkit_user_content_manager_register_script_message_handler (priv->user_content, "aboutApps"); g_signal_connect (priv->user_content, "script-message-received::aboutApps", G_CALLBACK (web_extension_about_apps_message_received_cb), shell); ephy_embed_shell_setup_process_model (shell); g_signal_connect (priv->web_context, "initialize-web-extensions", G_CALLBACK (initialize_web_extensions), shell); /* Favicon Database */ favicon_db_path = g_build_filename (EPHY_EMBED_SHELL_MODE_HAS_PRIVATE_PROFILE (priv->mode) ? ephy_dot_dir () : g_get_user_cache_dir (), "icondatabase", NULL); webkit_web_context_set_favicon_database_directory (priv->web_context, favicon_db_path); g_free (favicon_db_path); /* Do not ignore TLS errors. */ webkit_web_context_set_tls_errors_policy (priv->web_context, WEBKIT_TLS_ERRORS_POLICY_FAIL); /* about: URIs handler */ priv->about_handler = ephy_about_handler_new (); webkit_web_context_register_uri_scheme (priv->web_context, EPHY_ABOUT_SCHEME, (WebKitURISchemeRequestCallback)about_request_cb, shell, NULL); /* Register about scheme as local so that it can contain file resources */ webkit_security_manager_register_uri_scheme_as_local (webkit_web_context_get_security_manager (priv->web_context), EPHY_ABOUT_SCHEME); /* ephy-resource handler */ webkit_web_context_register_uri_scheme (priv->web_context, "ephy-resource", (WebKitURISchemeRequestCallback)ephy_resource_request_cb, NULL, NULL); /* Store cookies in moz-compatible SQLite format */ cookie_manager = webkit_web_context_get_cookie_manager (priv->web_context); filename = g_build_filename (ephy_dot_dir (), "cookies.sqlite", NULL); webkit_cookie_manager_set_persistent_storage (cookie_manager, filename, WEBKIT_COOKIE_PERSISTENT_STORAGE_SQLITE); g_free (filename); cookie_policy = g_settings_get_string (EPHY_SETTINGS_WEB, EPHY_PREFS_WEB_COOKIES_POLICY); ephy_embed_prefs_set_cookie_accept_policy (cookie_manager, cookie_policy); g_free (cookie_policy); }