surf

surf browser, a WebKit based browser
git clone git://git.suckless.org/surf
Log | Files | Refs | README | LICENSE

commit 70c1b548abea41411b2dd2c91832a4212a25385c
parent 2223417c91569f8314205d8f34c3cdf4d96d6e1a
Author: Quentin Rameau <quinq@fifth.space>
Date:   Fri, 19 May 2017 01:10:30 +0200

Only apply parameters when needed

Specify which parameter should be applied on which load state.

Diffstat:
surf.c | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 60 insertions(+), 14 deletions(-)

diff --git a/surf.c b/surf.c @@ -92,7 +92,7 @@ typedef enum { StrictTLS, Style, ZoomLevel, - ParameterLast, + ParameterLast } ParamName; typedef union { @@ -170,7 +170,7 @@ static void gettogglestats(Client *c); static void getpagestats(Client *c); static WebKitCookieAcceptPolicy cookiepolicy_get(void); static char cookiepolicy_set(const WebKitCookieAcceptPolicy p); -static void seturiparameters(Client *c, const char *uri); +static void seturiparameters(Client *c, const char *uri, ParamName *params); static void setparameter(Client *c, int refresh, ParamName p, const Arg *a); static const char *getcert(const char *uri); static void setcert(Client *c, const char *file); @@ -256,6 +256,50 @@ static const char *useragent; static Parameter *curconfig; char *argv0; +static ParamName loadtransient[] = { + Certificate, + CookiePolicies, + DiskCache, + DNSPrefetch, + FileURLsCrossAccess, + JavaScript, + LoadImages, + PreferredLanguages, + ShowIndicators, + StrictTLS, + ParameterLast +}; + +static ParamName loadcommitted[] = { + AcceleratedCanvas, +// AccessMicrophone, +// AccessWebcam, + CaretBrowsing, + DefaultCharset, + FontSize, + FrameFlattening, + Geolocation, + HideBackground, + Inspector, + Java, +// KioskMode, + MediaManualPlay, + Plugins, + RunInFullscreen, + ScrollBars, + SiteQuirks, + SmoothScrolling, + SpellChecking, + SpellLanguages, + Style, + ZoomLevel, + ParameterLast +}; + +static ParamName loadfinished[] = { + ParameterLast +}; + /* configuration, allows nested code to access above variables */ #include "config.h" @@ -641,10 +685,10 @@ cookiepolicy_set(const WebKitCookieAcceptPolicy p) } void -seturiparameters(Client *c, const char *uri) +seturiparameters(Client *c, const char *uri, ParamName *params) { Parameter *config, *newconfig = NULL; - int i; + int i, p; for (i = 0; i < LENGTH(uriparams); ++i) { if (uriparams[i].uri && @@ -657,25 +701,25 @@ seturiparameters(Client *c, const char *uri) if (!newconfig) newconfig = defconfig; - for (i = 0; i < ParameterLast; ++i) { - switch(i) { + for (i = 0; (p = params[i]) != ParameterLast; ++i) { + switch(p) { case Certificate: case CookiePolicies: case Style: - config = defconfig[i].force ? defconfig : - newconfig[i].force ? newconfig : + config = defconfig[p].force ? defconfig : + newconfig[p].force ? newconfig : defconfig; break; default: - if (newconfig == curconfig || defconfig[i].force) + if (defconfig[p].force) continue; - config = newconfig[i].force ? newconfig : - curconfig[i].force ? defconfig : + config = newconfig[p].force ? newconfig : + curconfig[p].force ? defconfig : NULL; } if (config) - setparameter(c, 0, i, &config[i].val); + setparameter(c, 0, p, &config[p].val); } curconfig = newconfig; @@ -1405,7 +1449,7 @@ loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c) setatom(c, AtomUri, uri); c->title = uri; c->https = c->insecure = 0; - seturiparameters(c, uri); + seturiparameters(c, uri, loadtransient); if (c->errorpage) c->errorpage = 0; else @@ -1414,13 +1458,15 @@ loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c) case WEBKIT_LOAD_REDIRECTED: setatom(c, AtomUri, uri); c->title = uri; - seturiparameters(c, uri); + seturiparameters(c, uri, loadtransient); break; case WEBKIT_LOAD_COMMITTED: + seturiparameters(c, uri, loadcommitted); c->https = webkit_web_view_get_tls_info(c->view, &c->cert, &c->tlserr); break; case WEBKIT_LOAD_FINISHED: + seturiparameters(c, uri, loadfinished); /* Disabled until we write some WebKitWebExtension for * manipulating the DOM directly. evalscript(c, "document.documentElement.style.overflow = '%s'",