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")) {
// uri_request_cb is called when a uri request is issued, and determines // whether to allow it to proceed or not. static void uri_request_cb(WebKitWebPage *page, WebKitURIRequest *req, WebKitURIResponse *resp, gpointer exten) { const gchar *uri = webkit_uri_request_get_uri(req); if(uri_is_blocked(uri, ADBLOCK_OTHER, exten)) { webkit_uri_request_set_uri(req, "about:blank"); } }
static void wxgtk_webview_webkit_resource_req(WebKitWebView *, WebKitWebResource *, WebKitURIRequest *request, wxWebViewWebKit *webKitCtrl) { wxString uri = webkit_uri_request_get_uri(request); wxSharedPtr<wxWebViewHandler> handler; wxVector<wxSharedPtr<wxWebViewHandler> > handlers = webKitCtrl->GetHandlers(); //We are not vetoed so see if we match one of the additional handlers for(wxVector<wxSharedPtr<wxWebViewHandler> >::iterator it = handlers.begin(); it != handlers.end(); ++it) { if(uri.substr(0, (*it)->GetName().length()) == (*it)->GetName()) { handler = (*it); } } //If we found a handler we can then use it to load the file directly //ourselves if(handler) { //If it is requsting the page itself then return as we have already //loaded it from the archive if(webKitCtrl->m_vfsurl == uri) return; wxFSFile* file = handler->GetFile(uri); if(file) { //We load the data into a data url to save it being written out again size_t size = file->GetStream()->GetLength(); char *buffer = new char[size]; file->GetStream()->Read(buffer, size); wxString data = wxBase64Encode(buffer, size); delete[] buffer; wxString mime = file->GetMimeType(); wxString path = "data:" + mime + ";base64," + data; //Then we can redirect the call webkit_uri_request_set_uri(request, path.utf8_str()); } } }
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; }