X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=a3508bfce60ca3ac8510aa2e8b30139b9c7e5f8f;hb=7c7a3b58cfd096ec546011df316828211adf6631;hp=60d1b14e5d6896216524e334d1abf6396776620d;hpb=2e62372969239285705504187b0211039b5ae619;p=surf.git diff --git a/surf.c b/surf.c index 60d1b14..a3508bf 100644 --- a/surf.c +++ b/surf.c @@ -37,6 +37,7 @@ typedef struct Client { char *title, *linkhover; const char *uri, *needle; gint progress; + gboolean sslfailed; struct Client *next; gboolean zoomed; } Client; @@ -260,8 +261,11 @@ drawindicator(Client *c) { w = c->indicator; width = c->progress * w->allocation.width / 100; gc = gdk_gc_new(w->window); - gdk_color_parse(strstr(uri, "https://") == uri ? - progress_trust : progress, &fg); + if(strstr(uri, "https://") == uri) + gdk_color_parse(c->sslfailed ? + progress_untrust : progress_trust, &fg); + else + gdk_color_parse(progress, &fg); gdk_gc_set_rgb_fg_color(gc, &fg); gdk_draw_rectangle(w->window, w->style->bg_gc[GTK_WIDGET_STATE(w)], @@ -377,9 +381,24 @@ linkhover(WebKitWebView *v, const char* t, const char* l, Client *c) { void loadstatuschange(WebKitWebView *view, GParamSpec *pspec, Client *c) { + WebKitWebFrame *frame; + WebKitWebDataSource *src; + WebKitNetworkRequest *request; + SoupMessage *msg; + char *uri; + switch(webkit_web_view_get_load_status (c->view)) { case WEBKIT_LOAD_COMMITTED: - setatom(c, AtomUri, geturi(c)); + uri = geturi(c); + if(strstr(uri, "https://") == uri) { + frame = webkit_web_view_get_main_frame(c->view); + src = webkit_web_frame_get_data_source(frame); + request = webkit_web_data_source_get_request(src); + msg = webkit_network_request_get_message(request); + c->sslfailed = soup_message_get_flags(msg) + ^ SOUP_MESSAGE_CERTIFICATE_TRUSTED; + } + setatom(c, AtomUri, uri); break; case WEBKIT_LOAD_FINISHED: c->progress = 0; @@ -442,7 +461,7 @@ newclient(void) { * window class (WM_CLASS) is capped, while the resource is in * lowercase. Both these values come as a pair. */ - gtk_window_set_wmclass(GTK_WINDOW(c->win), "surf", "surf"); + gtk_window_set_wmclass(GTK_WINDOW(c->win), "surf", "Surf"); /* TA: 20091214: And set the role here as well -- so that * sessions can pick this up. @@ -510,7 +529,7 @@ newclient(void) { g_object_set(G_OBJECT(settings), "auto-load-images", loadimage, NULL); g_object_set(G_OBJECT(settings), "enable-plugins", plugin, NULL); g_object_set(G_OBJECT(settings), "enable-scripts", script, NULL); - g_object_set(G_OBJECT(settings), "enable-spatial-navigation", true, NULL); + g_object_set(G_OBJECT(settings), "enable-spatial-navigation", SPATIAL_BROWSING, NULL); g_free(uri); @@ -708,6 +727,10 @@ setup(void) { soup_session_remove_feature_by_type(s, soup_cookie_jar_get_type()); g_signal_connect_after(G_OBJECT(s), "request-started", G_CALLBACK(newrequest), NULL); + /* ssl */ + g_object_set(G_OBJECT(s), "ssl-ca-file", cafile, NULL); + g_object_set(G_OBJECT(s), "ssl-strict", strictssl, NULL); + /* proxy */ if((proxy = getenv("http_proxy")) && strcmp(proxy, "")) { new_proxy = g_strrstr(proxy, "http://") ? g_strdup(proxy) : @@ -770,10 +793,10 @@ void update(Client *c) { char *t; - if(c->progress != 100) - t = g_strdup_printf("[%i%%] %s", c->progress, c->title); - else if(c->linkhover) + if(c->linkhover) t = g_strdup(c->linkhover); + else if(c->progress != 100) + t = g_strdup_printf("[%i%%] %s", c->progress, c->title); else t = g_strdup(c->title); drawindicator(c);