static GtkWidget* webkit_web_view_create_web_view_cb (GtkWidget* web_view, WebKitNavigationAction* navigationAction, MidoriBrowser* browser) { WebKitURIRequest *naviationRequest = webkit_navigation_action_get_request(navigationAction); gchar *destUri = webkit_uri_request_get_uri(naviationRequest); midori_browser_open_new_tab_from_extension(browser, destUri, false); if(popup_window) { gtk_widget_destroy(popup_window); popup_window = NULL; } return NULL; }
redirect_cb(WebKitWebView* web_view, WebKitPolicyDecision* decision, WebKitPolicyDecisionType type, gpointer udata) #endif { GtTwitchLoginDlg* self = GT_TWITCH_LOGIN_DLG(udata); GtTwitchLoginDlgPrivate* priv = gt_twitch_login_dlg_get_instance_private(self); GMatchInfo* match_info = NULL; const gchar* uri = NULL; #ifdef USE_DEPRECATED_WEBKIT uri = webkit_network_request_get_uri(request); #else if (type == WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION) { WebKitNavigationAction* action = webkit_navigation_policy_decision_get_navigation_action( WEBKIT_NAVIGATION_POLICY_DECISION(decision)); WebKitURIRequest* request = webkit_navigation_action_get_request(action); uri = webkit_uri_request_get_uri(request); } #endif if (uri == NULL || strlen(uri) == 0) return FALSE; MESSAGE("Redirect uri is '%s'", uri); g_regex_match(priv->token_redirect_regex, uri, 0, &match_info); if (g_match_info_matches(match_info)) { g_autofree gchar* token = g_match_info_fetch(match_info, 1); MESSAGEF("Successfully got OAuth token '%s'", token); gt_twitch_fetch_oauth_info_async(main_app->twitch, token, fetch_oauth_info_cb, priv->cancel, self); } else if (g_str_has_prefix(uri, "http://localhost/?error=access_denied")) WARNING("Error logging in or login cancelled"); g_match_info_unref(match_info); return FALSE; }
static gboolean wxgtk_webview_webkit_new_window(WebKitPolicyDecision *decision, wxWebViewWebKit *webKitCtrl) { WebKitNavigationPolicyDecision* navigation_decision = WEBKIT_NAVIGATION_POLICY_DECISION(decision); WebKitNavigationAction* action = webkit_navigation_policy_decision_get_navigation_action(navigation_decision); WebKitURIRequest* request = webkit_navigation_action_get_request(action); const gchar* uri = webkit_uri_request_get_uri(request); wxString target = webkit_navigation_policy_decision_get_frame_name(navigation_decision); wxWebViewEvent event(wxEVT_WEBVIEW_NEWWINDOW, webKitCtrl->GetId(), wxString( uri, wxConvUTF8 ), target); if (webKitCtrl && webKitCtrl->GetEventHandler()) webKitCtrl->GetEventHandler()->ProcessEvent(event); //We always want the user to handle this themselves webkit_policy_decision_ignore(decision); return TRUE; }
static gboolean policy_cb (WebKitWebView *v, WebKitPolicyDecision *pd, WebKitPolicyDecisionType pt, gpointer d) { if (is_loaded && !options.html_data.browser) { WebKitNavigationAction *act = webkit_navigation_policy_decision_get_navigation_action (WEBKIT_NAVIGATION_POLICY_DECISION (pd)); webkit_policy_decision_ignore (pd); if (webkit_navigation_action_get_navigation_type (act) == WEBKIT_NAVIGATION_TYPE_LINK_CLICKED) { WebKitURIRequest *r = webkit_navigation_action_get_request (act); gchar *uri = (gchar *) webkit_uri_request_get_uri (r); if (options.html_data.print_uri) g_printf ("%s\n", uri); else g_app_info_launch_default_for_uri (uri, NULL, NULL); } } else return FALSE; return TRUE; }
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; } }
static gboolean wxgtk_webview_webkit_navigation(WebKitWebView *web_view, WebKitPolicyDecision *decision, wxWebViewWebKit *webKitCtrl) { WebKitNavigationPolicyDecision* navigation_decision = WEBKIT_NAVIGATION_POLICY_DECISION(decision); WebKitNavigationAction* action = webkit_navigation_policy_decision_get_navigation_action(navigation_decision); WebKitURIRequest* request = webkit_navigation_action_get_request(action); const gchar* uri = webkit_uri_request_get_uri(request); wxString target = webkit_navigation_policy_decision_get_frame_name(navigation_decision); //If m_creating is true then we are the result of a new window //and so we need to send the event and veto the load if(webKitCtrl->m_creating) { webKitCtrl->m_creating = false; wxWebViewEvent event(wxEVT_WEBVIEW_NEWWINDOW, webKitCtrl->GetId(), wxString(uri, wxConvUTF8), target); if(webKitCtrl && webKitCtrl->GetEventHandler()) webKitCtrl->GetEventHandler()->ProcessEvent(event); webkit_policy_decision_ignore(decision); return TRUE; } if(webKitCtrl->m_guard) { webKitCtrl->m_guard = false; //We set this to make sure that we don't try to load the page again from //the resource request callback webKitCtrl->m_vfsurl = webkit_web_view_get_uri(web_view); webkit_policy_decision_use(decision); return FALSE; } webKitCtrl->m_busy = true; wxWebViewEvent event(wxEVT_WEBVIEW_NAVIGATING, webKitCtrl->GetId(), wxString( uri, wxConvUTF8 ), target); if (webKitCtrl && webKitCtrl->GetEventHandler()) webKitCtrl->GetEventHandler()->ProcessEvent(event); if (!event.IsAllowed()) { webKitCtrl->m_busy = false; webkit_policy_decision_ignore(decision); return TRUE; } else { wxString wxuri = uri; 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(wxuri.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) { webKitCtrl->m_guard = true; wxFSFile* file = handler->GetFile(wxuri); if(file) { webKitCtrl->SetPage(*file->GetStream(), wxuri); } //We need to throw some sort of error here if file is NULL webkit_policy_decision_ignore(decision); return TRUE; } return FALSE; } }