void cb_wv_notify_load_status(WebKitWebView *view, GParamSpec *pspec, Browser *b) { WebKitWebFrame *frame; WebKitWebDataSource *source; WebKitNetworkRequest *request; SoupMessage *message; char *uri; switch (webkit_web_view_get_load_status(b->UI.view)) { case WEBKIT_LOAD_COMMITTED: uri = browser_get_uri(b); if (strstr(uri, "https://") == uri) { /* get ssl state */ frame = webkit_web_view_get_main_frame(b->UI.view); source = webkit_web_frame_get_data_source(frame); request = webkit_web_data_source_get_request(source); message = webkit_network_request_get_message(request); b->State.ssl = soup_message_get_flags(message) ^ SOUP_MESSAGE_CERTIFICATE_TRUSTED; } break; case WEBKIT_LOAD_FINISHED: /* add uri to history */ if (!private_browsing && (uri = (char *)webkit_web_view_get_uri(b->UI.view))) { history_add(uri); } b->State.progress = 100; break; default: break; } /* update browser (statusbar, progress, position) */ browser_update(b); }
/* ghtml_get_security */ SurferSecurity ghtml_get_security(GtkWidget * widget) { SurferSecurity security = SS_NONE; #if WEBKIT_CHECK_VERSION(1, 1, 0) GHtml * ghtml; WebKitWebFrame * frame; char const * location; WebKitWebDataSource *source; WebKitNetworkRequest *request; SoupMessage * message; #endif #if WEBKIT_CHECK_VERSION(1, 1, 0) ghtml = g_object_get_data(G_OBJECT(widget), "ghtml"); frame = webkit_web_view_get_main_frame(WEBKIT_WEB_VIEW(ghtml->view)); if((location = webkit_web_frame_get_uri(frame)) != NULL && strncmp(location, "https://", 8) == 0) { security = SS_UNTRUSTED; source = webkit_web_frame_get_data_source(frame); request = webkit_web_data_source_get_request(source); message = webkit_network_request_get_message(request); if(ghtml->ssl == TRUE && message != NULL && soup_message_get_flags(message) & SOUP_MESSAGE_CERTIFICATE_TRUSTED) security = SS_TRUSTED; } #endif return security; }
static void notify_load_status_cb(WebKitWebView* view, GParamSpec* pspec, GMainLoop* loop) { WebKitLoadStatus status = webkit_web_view_get_load_status (view); WebKitWebFrame* frame = webkit_web_view_get_main_frame(view); WebKitWebDataSource* dataSource = webkit_web_frame_get_data_source(frame); if (status == WEBKIT_LOAD_COMMITTED) { g_assert(webkit_web_data_source_is_loading(dataSource)); return; } else if (status != WEBKIT_LOAD_FINISHED) return; /* Test get_request */ g_test_message("Testing webkit_web_data_source_get_request"); WebKitNetworkRequest* request = webkit_web_data_source_get_request(dataSource); g_assert_cmpstr(webkit_network_request_get_uri(request), ==, "http://www.webkit.org/"); /* Test get_main_resource */ g_test_message("Testing webkit_web_data_source_get_main_resource"); WebKitWebResource* resource = webkit_web_data_source_get_main_resource(dataSource); g_assert_cmpstr("text/html", ==, webkit_web_resource_get_mime_type(resource)); g_assert_cmpstr("http://www.webkit.org/", ==, webkit_web_resource_get_uri(resource)); /* Test get_data. We just test if data has certain size for the mean time */ g_test_message("Testing webkit_web_data_source_get_data has certain size"); GString* data = webkit_web_data_source_get_data(dataSource); g_assert(data->len > 100); /* FIXME: Add test for get_encoding */ g_main_loop_quit(loop); }
GSList * domain_get_cookie_domains(WebKitWebView *wv) { GSList *ret = NULL; WebKitWebFrame *frame = webkit_web_view_get_main_frame(wv); WebKitWebDataSource *data = webkit_web_frame_get_data_source(frame); if (data == NULL) return NULL; WebKitNetworkRequest *request = webkit_web_data_source_get_request(data); if (request == NULL) return NULL; SoupMessage *msg = webkit_network_request_get_message(request); if (msg == NULL) return NULL; SoupURI *uri = soup_message_get_uri(msg); if (uri == NULL) return NULL; const char *host = soup_uri_get_host(uri); char *base_host = g_strconcat(".", host, NULL); const char *base_domain = domain_get_base_for_host(base_host); char *cur = base_host; char *nextdot; while (cur != base_domain) { nextdot = strchr(cur, '.'); ret = g_slist_append(ret, nextdot); cur = nextdot+1; ret = g_slist_append(ret, cur); } return ret; }