WebKitWebView *view;
WebKitWebInspector *inspector;
WebKitHitTestResult *mousepos;
+ GTlsCertificateFlags tlsflags;
const char *title, *targeturi;
const char *needle;
gint progress;
struct Client *next;
- gboolean zoomed, fullscreen, isinspecting, sslfailed;
+ gboolean zoomed, fullscreen, isinspecting;
} Client;
typedef struct {
static void handleplumb(Client *c, WebKitWebView *w, const gchar *uri);
-static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c);
+static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d,
+ Client *c);
+static void responsereceived(WebKitDownload *d, GParamSpec *ps, Client *c);
+static void download(Client *c, WebKitURIResponse *r);
static void inspector(Client *c, const Arg *arg);
static WebKitWebView *inspector_new(WebKitWebInspector *i, WebKitWebView *v,
GdkModifierType mods, Client *c);
static void mousetargetchanged(WebKitWebView *v, WebKitHitTestResult *h,
guint modifiers, Client *c);
-static void loadstatuschange(WebKitWebView *view, GParamSpec *pspec,
- Client *c);
+static void loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c);
static void loaduri(Client *c, const Arg *arg);
static void navigate(Client *c, const Arg *arg);
static Client *newclient(Client *c);
static void print(Client *c, const Arg *arg);
static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event,
gpointer d);
-static void progresschange(WebKitWebView *view, GParamSpec *pspec, Client *c);
+static void progresschanged(WebKitWebView *v, GParamSpec *ps, Client *c);
static void linkopen(Client *c, const Arg *arg);
static void linkopenembed(Client *c, const Arg *arg);
static void reload(Client *c, const Arg *arg);
spawn(c, &arg);
}
-gboolean
-initdownload(WebKitWebView *view, WebKitDownload *o, Client *c)
+void
+downloadstarted(WebKitWebContext *wc, WebKitDownload *d, Client *c)
{
- Arg arg;
+ g_signal_connect(G_OBJECT(d), "notify::response",
+ G_CALLBACK(responsereceived), c);
+}
- updatewinid(c);
- arg = (Arg)DOWNLOAD((char *)webkit_download_get_uri(o), geturi(c));
- spawn(c, &arg);
- return FALSE;
+void
+responsereceived(WebKitDownload *d, GParamSpec *ps, Client *c)
+{
+ download(c, webkit_download_get_response(d));
+ webkit_download_cancel(d);
+}
+
+void
+download(Client *c, WebKitURIResponse *r)
+{
+ Arg a;
+
+ a = (Arg)DOWNLOAD(webkit_uri_response_get_uri(r), geturi(c));
+ spawn(c, &a);
}
void
}
void
-loadstatuschange(WebKitWebView *view, GParamSpec *pspec, Client *c)
+loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c)
{
- WebKitWebFrame *frame;
- WebKitWebDataSource *src;
- WebKitNetworkRequest *request;
- SoupMessage *msg;
- char *uri;
-
- switch (webkit_web_view_get_load_status (c->view)) {
+ switch (e) {
+ case WEBKIT_LOAD_STARTED:
+ c->tlsflags = G_TLS_CERTIFICATE_VALIDATE_ALL + 1;
+ break;
+ case WEBKIT_LOAD_REDIRECTED:
+ setatom(c, AtomUri, geturi(c));
+ break;
case WEBKIT_LOAD_COMMITTED:
- 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);
+ if (!webkit_web_view_get_tls_info(c->view, NULL, &(c->tlsflags)))
+ c->tlsflags = G_TLS_CERTIFICATE_VALIDATE_ALL + 1;
+
+ setatom(c, AtomUri, geturi(c));
if (enablestyle)
- setstyle(c, getstyle(uri));
+ setstyle(c, getstyle(geturi(c)));
break;
case WEBKIT_LOAD_FINISHED:
- c->progress = 100;
- updatetitle(c);
- break;
- default:
+ /* Disabled until we write some WebKitWebExtension for
+ * manipulating the DOM directly.
+ evalscript(c, "document.documentElement.style.overflow = '%s'",
+ enablescrollbars ? "auto" : "hidden");
+ */
+ runscript(c);
break;
}
+ updatetitle(c);
}
void
clients = c;
c->view = newview(c, rc ? rc->view : NULL);
+ c->tlsflags = G_TLS_CERTIFICATE_VALIDATE_ALL + 1;
return c;
}
webkit_web_context_get_cookie_manager(context),
cookiepolicy_get());
+ g_signal_connect(G_OBJECT(context), "download-started",
+ G_CALLBACK(downloadstarted), c);
+
v = g_object_new(WEBKIT_TYPE_WEB_VIEW,
"settings", settings,
"user-content-manager", contentmanager,
"window-object-cleared",
G_CALLBACK(windowobjectcleared), c);
g_signal_connect(G_OBJECT(v),
- "notify::load-status",
- G_CALLBACK(loadstatuschange), c);
+ "load-changed",
+ G_CALLBACK(loadchanged), c);
g_signal_connect(G_OBJECT(v),
- "notify::progress",
- G_CALLBACK(progresschange), c);
- g_signal_connect(G_OBJECT(v),
- "download-requested",
- G_CALLBACK(initdownload), c);
+ "notify::estimated-load-progress",
+ G_CALLBACK(progresschanged), c);
g_signal_connect(G_OBJECT(v),
"button-release-event",
G_CALLBACK(buttonrelease), c);
}
void
-progresschange(WebKitWebView *view, GParamSpec *pspec, Client *c)
+progresschanged(WebKitWebView *v, GParamSpec *ps, Client *c)
{
- c->progress = webkit_web_view_get_progress(c->view) * 100;
+ c->progress = webkit_web_view_get_estimated_load_progress(c->view) *
+ 100;
updatetitle(c);
}
{
const char *uri = geturi(c);
- if (strstr(uri, "https://") == uri)
- pagestat[0] = c->sslfailed ? 'U' : 'T';
- else
- pagestat[0] = '-';
-
+ pagestats[0] = c->tlsflags > G_TLS_CERTIFICATE_VALIDATE_ALL ? '-' :
+ c->tlsflags > 0 ? 'U' : 'T';
pagestat[1] = '\0';
}