static gboolean sendRequestCallback(WebKitWebPage*, WebKitURIRequest* request, WebKitURIResponse* redirectResponse, gpointer) { gboolean returnValue = FALSE; const char* requestURI = webkit_uri_request_get_uri(request); g_assert(requestURI); if (const char* suffix = g_strrstr(requestURI, "/remove-this/javascript.js")) { GUniquePtr<char> prefix(g_strndup(requestURI, strlen(requestURI) - strlen(suffix))); GUniquePtr<char> newURI(g_strdup_printf("%s/javascript.js", prefix.get())); webkit_uri_request_set_uri(request, newURI.get()); } else if (const char* suffix = g_strrstr(requestURI, "/remove-this/javascript-after-redirection.js")) { // Redirected from /redirected.js, redirectResponse should be nullptr. g_assert(WEBKIT_IS_URI_RESPONSE(redirectResponse)); g_assert(g_str_has_suffix(webkit_uri_response_get_uri(redirectResponse), "/redirected.js")); GUniquePtr<char> prefix(g_strndup(requestURI, strlen(requestURI) - strlen(suffix))); GUniquePtr<char> newURI(g_strdup_printf("%s/javascript-after-redirection.js", prefix.get())); webkit_uri_request_set_uri(request, newURI.get()); } else if (g_str_has_suffix(requestURI, "/redirected.js")) { // Original request, redirectResponse should be nullptr. g_assert(!redirectResponse); } else if (g_str_has_suffix(requestURI, "/add-do-not-track-header")) { SoupMessageHeaders* headers = webkit_uri_request_get_http_headers(request); g_assert(headers); soup_message_headers_append(headers, "DNT", "1"); } else if (g_str_has_suffix(requestURI, "/http-get-method")) { g_assert_cmpstr(webkit_uri_request_get_http_method(request), ==, "GET"); g_assert(webkit_uri_request_get_http_method(request) == SOUP_METHOD_GET); } else if (g_str_has_suffix(requestURI, "/http-post-method")) {
/** * Callback for web pages send-request signal. */ static gboolean on_web_page_send_request(WebKitWebPage *webpage, WebKitURIRequest *request, WebKitURIResponse *response, gpointer extension) { char *name, *value; SoupMessageHeaders *headers; GHashTableIter iter; if (!ext.headers) { return FALSE; } /* Change request headers according to the users preferences. */ headers = webkit_uri_request_get_http_headers(request); if (!headers) { return FALSE; } g_hash_table_iter_init(&iter, ext.headers); while (g_hash_table_iter_next(&iter, (gpointer*)&name, (gpointer*)&value)) { /* Null value is used to indicate that the header should be * removed completely. */ if (value == NULL) { soup_message_headers_remove(headers, name); } else { soup_message_headers_replace(headers, name, value); } } return FALSE; }
static gboolean sendRequestCallback(WebKitWebPage*, WebKitURIRequest* request, WebKitURIResponse*, gpointer) { const char* requestURI = webkit_uri_request_get_uri(request); g_assert(requestURI); if (const char* suffix = g_strrstr(requestURI, "/remove-this/javascript.js")) { GUniquePtr<char> prefix(g_strndup(requestURI, strlen(requestURI) - strlen(suffix))); GUniquePtr<char> newURI(g_strdup_printf("%s/javascript.js", prefix.get())); webkit_uri_request_set_uri(request, newURI.get()); } else if (g_str_has_suffix(requestURI, "/add-do-not-track-header")) { SoupMessageHeaders* headers = webkit_uri_request_get_http_headers(request); g_assert(headers); soup_message_headers_append(headers, "DNT", "1"); } else if (g_str_has_suffix(requestURI, "/cancel-this.js")) return TRUE; return FALSE; }