diff --git a/src/css/popup.css b/src/css/popup.css index 3560732..5a9c8bd 100644 --- a/src/css/popup.css +++ b/src/css/popup.css @@ -340,7 +340,7 @@ body.tScopeNarrow #scopeCell { .matrix .matGroup.g0 .matSection:first-child { margin-top: 0; } -.matrix .matGroup.g3 .matSection:first-child { +.matrix .matGroup.g4 .matSection:first-child { margin-top: 0; } /* Collapsing of domains */ @@ -358,7 +358,7 @@ body.tScopeNarrow #scopeCell { } /* Collapsing of blacklisted */ -.matrix .g3Meta { +.matrix .g4Meta { margin: 0; padding: 0; border: 0; @@ -368,29 +368,29 @@ body.tScopeNarrow #scopeCell { opacity: 0.2; cursor: pointer; } -.matrix .g3Meta:hover { +.matrix .g4Meta:hover { opacity: 0.4; } -.matrix .g3Meta.g3Collapsed { +.matrix .g4Meta.g4Collapsed { background: url('/img/matrix-group-show.png') no-repeat center top, url('/img/matrix-group-hline.png') repeat-x center top 3px; } -.matrix .g3Meta.g3Collapsed ~ .matSection { +.matrix .g4Meta.g4Collapsed ~ .matSection { display: none; } -body.powerOff .matrix .g3Meta.g3Collapsed ~ .matSection { +body.powerOff .matrix .g4Meta.g4Collapsed ~ .matSection { display: block; } -.matrix .g3Meta ~ .matRow.ro { +.matrix .g4Meta ~ .matRow.ro { display: none; } -.matrix .g3Meta.g3Collapsed ~ .matRow.ro { +.matrix .g4Meta.g4Collapsed ~ .matRow.ro { display: block; } -body.powerOff .matrix .g3Meta.g3Collapsed ~ .matRow.ro { +body.powerOff .matrix .g4Meta.g4Collapsed ~ .matRow.ro { display: none; } -.matrix .matGroup .g3Meta + *,.matrix .matGroup .g3Meta + * + * { +.matrix .matGroup .g4Meta + *,.matrix .matGroup .g4Meta + * + * { margin-top: 0; padding-top: 0; } diff --git a/src/js/background.js b/src/js/background.js index 576c4cf..e6b663a 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -45,7 +45,6 @@ return { manifest: chrome.runtime.getManifest(), userSettings: { - autoWhitelistPageDomain: false, clearBrowserCache: true, clearBrowserCacheAfter: 60, colorBlindFriendly: false, @@ -67,7 +66,6 @@ return { spoofUserAgentEvery: 5, spoofUserAgentWith: getDefaultUserAgentStrings(), statsFilters: {}, - strictBlocking: true, subframeColor: '#cc0000', subframeOpacity: 100 }, diff --git a/src/js/commands.js b/src/js/commands.js index c880d50..0fbcbbf 100644 --- a/src/js/commands.js +++ b/src/js/commands.js @@ -25,22 +25,6 @@ /******************************************************************************/ -var whitelistPageDomain = function(tabs) { - if ( tabs.length === 0 ) { - return; - } - var tab = tabs[0]; - if ( !tab.url ) { - return; - } - var µm = µMatrix; - if ( µm.autoWhitelist1stPartyTemporarily(tab.url) ) { - µm.smartReloadTab(tab.id); - } -}; - -/******************************************************************************/ - var whitelistAll = function(tabs) { if ( tabs.length === 0 ) { return; @@ -62,9 +46,6 @@ var onCommand = function(command) { case 'revert-all': µMatrix.revertAllRules(); break; - case 'whitelist-page-domain': - chrome.tabs.query({ active: true }, whitelistPageDomain); - break; case 'whitelist-all': chrome.tabs.query({ active: true }, whitelistAll); break; diff --git a/src/js/httpsb.js b/src/js/httpsb.js index b572946..89af978 100644 --- a/src/js/httpsb.js +++ b/src/js/httpsb.js @@ -26,6 +26,7 @@ (function() { var µm = µMatrix; µm.pMatrix = new µm.Matrix(); + µm.pMatrix.setSwitch('localhost', false); µm.pMatrix.setSwitch('chrome-extension-scheme', false); µm.pMatrix.setSwitch('chrome-scheme', false); µm.pMatrix.setSwitch(µm.behindTheSceneScope, false); @@ -34,6 +35,8 @@ µm.pMatrix.setCell('*', '*', 'css', µm.Matrix.Green); µm.pMatrix.setCell('*', '*', 'image', µm.Matrix.Green); µm.pMatrix.setCell('*', '*', 'frame', µm.Matrix.Red); + µm.pMatrix.setCell('*', '1st-party', '*', µm.Matrix.Green); + µm.pMatrix.setCell('*', '1st-party', 'frame', µm.Matrix.Green); µm.tMatrix = new µm.Matrix(); µm.tMatrix.assign(µm.pMatrix); @@ -90,15 +93,6 @@ } }; -µMatrix.autoWhitelist1stPartyTemporarily = function(pageURL) { - var srcDomain = this.URI.domainFromURI(pageURL); - if ( this.tMatrix.evaluateCellZXY(srcDomain, srcDomain, '*') !== this.Matrix.RedIndirect ) { - return false; - } - this.tMatrix.whitelistCell(srcDomain, srcDomain, '*'); - return true; -}; - /******************************************************************************/ // Auto-whitelisting the `all` cell is a serious action, hence this will be diff --git a/src/js/matrix.js b/src/js/matrix.js index 3878378..841d132 100644 --- a/src/js/matrix.js +++ b/src/js/matrix.js @@ -122,6 +122,36 @@ Matrix.toBroaderHostname = toBroaderHostname; /******************************************************************************/ +// Find out src-des relationship, using coarse-to-fine grained tests for +// speed. If desHostname is 1st-party to srcHostname, the domain is returned, +// otherwise the empty string. + +var extractFirstPartyDesDomain = function(srcHostname, desHostname) { + if ( srcHostname === '*' || desHostname === '*' || desHostname === '1st-party' ) { + return ''; + } + var srcLength = srcHostname.length; + var desLength = desHostname.length; + var len = srcLength < desLength ? srcLength : desLength; + if ( srcHostname.slice(-len) !== desHostname.slice(-len) ) { + return ''; + } + var desDomain = µm.URI.domainFromHostname(desHostname); + if ( desDomain === '' ) { + return ''; + } + var pos = srcLength - desDomain.length; + if ( pos < 0 || srcHostname.slice(pos) !== desDomain ) { + return ''; + } + if ( pos !== 0 && srcHostname.charAt(pos - 1) !== '.' ) { + return ''; + } + return desDomain; +}; + +/******************************************************************************/ + Matrix.prototype.reset = function() { this.switchedOn = {}; this.rules = {}; @@ -274,12 +304,9 @@ Matrix.prototype.evaluateCell = function(srcHostname, desHostname, type) { /******************************************************************************/ Matrix.prototype.evaluateCellZ = function(srcHostname, desHostname, type) { - if ( this.evaluateSwitchZ(srcHostname) !== true ) { - return Matrix.Transparent; - } var bitOffset = typeBitOffsets[type]; var s = srcHostname; - var v, pos; + var v; for (;;) { v = this.rules[s + ' ' + desHostname]; if ( v !== undefined ) { @@ -304,37 +331,91 @@ Matrix.prototype.evaluateCellZ = function(srcHostname, desHostname, type) { /******************************************************************************/ Matrix.prototype.evaluateCellZXY = function(srcHostname, desHostname, type) { + // Matrix filtering switch + if ( this.evaluateSwitchZ(srcHostname) !== true ) { + return Matrix.GreenIndirect; + } + + // Specific-hostname specific-type cell var r = this.evaluateCellZ(srcHostname, desHostname, type); if ( r === 1 ) { return Matrix.RedDirect; } if ( r === 2 ) { return Matrix.GreenDirect; } + + // Specific-hostname any-type cell var rl = this.evaluateCellZ(srcHostname, desHostname, '*'); if ( rl === 1 ) { return Matrix.RedIndirect; } - var d = desHostname; + var pos; + var d = desHostname; + var firstPartDesDomain = extractFirstPartyDesDomain(srcHostname, desHostname); + + // Ancestor cells, up to 1st-party destination domain + if ( firstPartDesDomain !== '' ) { + for (;;) { + if ( d === firstPartDesDomain ) { + break; + } + d = d.slice(d.indexOf('.') + 1); + + // specific-hostname specific-type cell + r = this.evaluateCellZ(srcHostname, d, type); + if ( r === 1 ) { return Matrix.RedIndirect; } + if ( r === 2 ) { return Matrix.GreenIndirect; } + // Do not override narrower rule + if ( rl !== 2 ) { + rl = this.evaluateCellZ(srcHostname, d, '*'); + if ( rl === 1 ) { return Matrix.RedIndirect; } + } + } + + // 1st-party specific-type cell: it's a special row, it exists only in + // global scope. + r = this.evaluateCellZ('*', '1st-party', type); + if ( r === 1 ) { return Matrix.RedIndirect; } + if ( r === 2 ) { return Matrix.GreenIndirect; } + // Do not override narrower rule + if ( rl !== 2 ) { + rl = this.evaluateCellZ('*', '1st-party', '*'); + if ( rl === 1 ) { return Matrix.RedIndirect; } + } + } + + // Keep going, up to root for (;;) { pos = d.indexOf('.'); if ( pos === -1 ) { break; } d = d.slice(pos + 1); + + // specific-hostname specific-type cell r = this.evaluateCellZ(srcHostname, d, type); if ( r === 1 ) { return Matrix.RedIndirect; } if ( r === 2 ) { return Matrix.GreenIndirect; } + // Do not override narrower rule if ( rl !== 2 ) { rl = this.evaluateCellZ(srcHostname, d, '*'); if ( rl === 1 ) { return Matrix.RedIndirect; } } } + + // Any-hostname specific-type cells r = this.evaluateCellZ(srcHostname, '*', type); + // Line below is strict-blocking if ( r === 1 ) { return Matrix.RedIndirect; } + // Narrower rule wins if ( rl === 2 ) { return Matrix.GreenIndirect; } if ( r === 2 ) { return Matrix.GreenIndirect; } + + // Any-hostname any-type cell r = this.evaluateCellZ(srcHostname, '*', '*'); if ( r === 1 ) { return Matrix.RedIndirect; } if ( r === 2 ) { return Matrix.GreenIndirect; } return this.rootValue; }; +// https://www.youtube.com/watch?v=4C5ZkwrnVfM + /******************************************************************************/ Matrix.prototype.evaluateRowZXY = function(srcHostname, desHostname) { @@ -368,24 +449,6 @@ Matrix.prototype.desHostnameFromRule = function(rule) { /******************************************************************************/ -Matrix.prototype.extractZRules = function(srcHostname, desHostname, out) { - var s = srcHostname; - var rule, bitmap, pos; - for (;;) { - rule = s + ' ' + desHostname; - bitmap = this.rules[rule]; - if ( bitmap !== undefined ) { - out[rule] = bitmap; - } - s = toBroaderHostname(s); - if ( s === '' ) { - break; - } - } -}; - -/******************************************************************************/ - Matrix.prototype.toggleSwitch = function(srcHostname, newState) { if ( newState === undefined ) { newState = !this.evaluateSwitchZ(srcHostname); @@ -414,7 +477,6 @@ Matrix.prototype.evaluateSwitch = function(srcHostname) { Matrix.prototype.evaluateSwitchZ = function(srcHostname) { var b; var s = srcHostname; - var pos; for (;;) { b = this.switchedOn[s]; if ( b !== undefined ) { @@ -639,7 +701,7 @@ Matrix.prototype.fromSelfie = function(selfie) { Matrix.prototype.diff = function(other, srcHostname, desHostnames) { var out = []; var desHostname, type; - var i, pos, thisVal, otherVal; + var i, thisVal, otherVal; for (;;) { thisVal = this.evaluateSwitch(srcHostname); otherVal = other.evaluateSwitch(srcHostname); diff --git a/src/js/messaging-handlers.js b/src/js/messaging-handlers.js index 0a725a3..9f12d22 100644 --- a/src/js/messaging-handlers.js +++ b/src/js/messaging-handlers.js @@ -118,8 +118,9 @@ var matrixSnapshot = function(details) { r.tSwitch = µm.tMatrix.evaluateSwitchZ(r.scope); r.pSwitch = µm.pMatrix.evaluateSwitchZ(r.scope); - // This one always exist + // These rows always exist r.rows['*'] = new RowSnapshot(r.scope, '*', '*'); + r.rows['1st-party'] = new RowSnapshot('*', '1st-party', '1st-party'); r.rowCount += 1; var µmuri = µm.URI; diff --git a/src/js/popup.js b/src/js/popup.js index ef42e90..4a3959f 100644 --- a/src/js/popup.js +++ b/src/js/popup.js @@ -111,6 +111,7 @@ function updateMatrixSnapshot() { /******************************************************************************/ // For display purpose, create four distinct groups of rows: +// 0th: literal "1st-party" row // 1st: page domain's related // 2nd: whitelisted // 3rd: graylisted @@ -147,36 +148,41 @@ function getGroupStats() { } row = rows[hostname]; domain = row.domain; - // 1st-party always into group 0 - if ( domain === pageDomain ) { + // literal "1st-party" row always into group 0 + if ( hostname === '1st-party' ) { domainToGroupMap[domain] = 0; continue; } - color = row.temporary[anyTypeOffset]; - groupIndex = domainToGroupMap[domain] || 2; // anything overrides 2 - // group 1: whitelisted (does not override 0) - if ( color === DarkGreen ) { + // 1st-party hostnames always into group 1 + if ( domain === pageDomain ) { domainToGroupMap[domain] = 1; continue; } - // group 3: blacklisted (does not override 0, 1) + color = row.temporary[anyTypeOffset]; + groupIndex = domainToGroupMap[domain] || 3; // anything overrides 3 + // group 2: whitelisted (does not override 0, 1) + if ( color === DarkGreen ) { + domainToGroupMap[domain] = 2; + continue; + } + // group 4: blacklisted (does not override 0, 1, 2) if ( color === DarkRed ) { - if ( groupIndex === 2 ) { - domainToGroupMap[domain] = 3; + if ( groupIndex === 3 ) { + domainToGroupMap[domain] = 4; } continue; } - // group 2: graylisted (does not override 0, 1, 3) - if ( groupIndex !== 2 ) { + // group 3: graylisted (does not override 0, 1, 2, 4) + if ( groupIndex !== 3 ) { continue; } - domainToGroupMap[domain] = 2; + domainToGroupMap[domain] = 3; } // Second pass: put each domain in a group - var groups = [ {}, {}, {}, {} ]; + var groups = [ {}, {}, {}, {}, {} ]; var group; for ( hostname in rows ) { if ( rows.hasOwnProperty(hostname) === false ) { @@ -305,7 +311,7 @@ function updateMatrixBehavior() { var section, subdomainRows, j, subdomainRow; while ( i-- ) { section = sections.at(i); - subdomainRows = section.descendants('.l2:not(.g3)'); + subdomainRows = section.descendants('.l2:not(.g4)'); j = subdomainRows.length; while ( j-- ) { subdomainRow = subdomainRows.at(j); @@ -338,11 +344,12 @@ function handleFilter(button, leaning) { // our parent cell knows who we are var cell = button.ancestors('div.matCell'); var type = cell.prop('reqType'); - var hostname = cell.prop('hostname'); + var desHostname = cell.prop('hostname'); + var srcHostname = desHostname !== '1st-party' ? matrixSnapshot.scope : '*'; var request = { - what: getCellAction(hostname, type, leaning), - srcHostname: matrixSnapshot.scope, - desHostname: hostname, + what: getCellAction(desHostname, type, leaning), + srcHostname: srcHostname, + desHostname: desHostname, type: type }; messaging.ask(request, updateMatrixSnapshot); @@ -614,50 +621,20 @@ function hostnameCompare(a,b) { /******************************************************************************/ -function makeMatrixGroup0SectionDomain(domain) { - return makeMatrixRowDomain(domain) - .addClass('g0 l1'); -} - -function makeMatrixGroup0SectionSubomain(domain, subdomain) { - return makeMatrixRowSubdomain(domain, subdomain) - .addClass('g0 l2'); -} - -function makeMatrixGroup0SectionMetaDomain(domain) { - return makeMatrixMetaRowDomain(domain).addClass('g0 l1 meta'); +function makeMatrixGroup0SectionDomain() { + return makeMatrixRowDomain('1st-party').addClass('g0 l1'); } function makeMatrixGroup0Section(hostnames) { - var domain = hostnames[0]; - var domainDiv = createMatrixSection() - .toggleClass('collapsed', getCollapseState(domain)) - .prop('domain', domain); - if ( hostnames.length > 1 ) { - makeMatrixGroup0SectionMetaDomain(domain) - .appendTo(domainDiv); - } - makeMatrixGroup0SectionDomain(domain) - .appendTo(domainDiv); - for ( var i = 1; i < hostnames.length; i++ ) { - makeMatrixGroup0SectionSubomain(domain, hostnames[i]) - .appendTo(domainDiv); - } + var domainDiv = createMatrixSection().prop('domain', '1st-party'); + makeMatrixGroup0SectionDomain().appendTo(domainDiv); return domainDiv; } function makeMatrixGroup0(group) { - var domains = Object.keys(group).sort(hostnameCompare); - if ( domains.length ) { - var groupDiv = createMatrixGroup().addClass('g0'); - makeMatrixGroup0Section(Object.keys(group[domains[0]]).sort(hostnameCompare)) - .appendTo(groupDiv); - for ( var i = 1; i < domains.length; i++ ) { - makeMatrixGroup0Section(Object.keys(group[domains[i]]).sort(hostnameCompare)) - .appendTo(groupDiv); - } - groupDiv.appendTo(matrixList); - } + var groupDiv = createMatrixGroup().addClass('g0'); + makeMatrixGroup0Section().appendTo(groupDiv); + groupDiv.appendTo(matrixList); } /******************************************************************************/ @@ -682,7 +659,8 @@ function makeMatrixGroup1Section(hostnames) { .toggleClass('collapsed', getCollapseState(domain)) .prop('domain', domain); if ( hostnames.length > 1 ) { - makeMatrixGroup1SectionMetaDomain(domain).appendTo(domainDiv); + makeMatrixGroup1SectionMetaDomain(domain) + .appendTo(domainDiv); } makeMatrixGroup1SectionDomain(domain) .appendTo(domainDiv); @@ -695,9 +673,8 @@ function makeMatrixGroup1Section(hostnames) { function makeMatrixGroup1(group) { var domains = Object.keys(group).sort(hostnameCompare); - if ( domains.length) { - var groupDiv = createMatrixGroup() - .addClass('g1'); + if ( domains.length ) { + var groupDiv = createMatrixGroup().addClass('g1'); makeMatrixGroup1Section(Object.keys(group[domains[0]]).sort(hostnameCompare)) .appendTo(groupDiv); for ( var i = 1; i < domains.length; i++ ) { @@ -768,10 +745,18 @@ function makeMatrixGroup3SectionSubomain(domain, subdomain) { .addClass('g3 l2'); } +function makeMatrixGroup3SectionMetaDomain(domain) { + return makeMatrixMetaRowDomain(domain).addClass('g3 l1 meta'); +} + function makeMatrixGroup3Section(hostnames) { var domain = hostnames[0]; var domainDiv = createMatrixSection() + .toggleClass('collapsed', getCollapseState(domain)) .prop('domain', domain); + if ( hostnames.length > 1 ) { + makeMatrixGroup3SectionMetaDomain(domain).appendTo(domainDiv); + } makeMatrixGroup3SectionDomain(domain) .appendTo(domainDiv); for ( var i = 1; i < hostnames.length; i++ ) { @@ -782,21 +767,61 @@ function makeMatrixGroup3Section(hostnames) { } function makeMatrixGroup3(group) { + var domains = Object.keys(group).sort(hostnameCompare); + if ( domains.length) { + var groupDiv = createMatrixGroup() + .addClass('g3'); + makeMatrixGroup3Section(Object.keys(group[domains[0]]).sort(hostnameCompare)) + .appendTo(groupDiv); + for ( var i = 1; i < domains.length; i++ ) { + makeMatrixGroup3Section(Object.keys(group[domains[i]]).sort(hostnameCompare)) + .appendTo(groupDiv); + } + groupDiv.appendTo(matrixList); + } +} + +/******************************************************************************/ + +function makeMatrixGroup4SectionDomain(domain) { + return makeMatrixRowDomain(domain) + .addClass('g4 l1'); +} + +function makeMatrixGroup4SectionSubomain(domain, subdomain) { + return makeMatrixRowSubdomain(domain, subdomain) + .addClass('g4 l2'); +} + +function makeMatrixGroup4Section(hostnames) { + var domain = hostnames[0]; + var domainDiv = createMatrixSection() + .prop('domain', domain); + makeMatrixGroup4SectionDomain(domain) + .appendTo(domainDiv); + for ( var i = 1; i < hostnames.length; i++ ) { + makeMatrixGroup4SectionSubomain(domain, hostnames[i]) + .appendTo(domainDiv); + } + return domainDiv; +} + +function makeMatrixGroup4(group) { var domains = Object.keys(group).sort(hostnameCompare); if ( domains.length === 0 ) { return; } - var groupDiv = createMatrixGroup().addClass('g3'); + var groupDiv = createMatrixGroup().addClass('g4'); createMatrixSection() - .addClass('g3Meta') - .toggleClass('g3Collapsed', !!getUserSetting('popupHideBlacklisted')) + .addClass('g4Meta') + .toggleClass('g4Collapsed', !!getUserSetting('popupHideBlacklisted')) .appendTo(groupDiv); - makeMatrixMetaRow(computeMatrixGroupMetaStats(group), 'g3') + makeMatrixMetaRow(computeMatrixGroupMetaStats(group), 'g4') .appendTo(groupDiv); - makeMatrixGroup3Section(Object.keys(group[domains[0]]).sort(hostnameCompare)) + makeMatrixGroup4Section(Object.keys(group[domains[0]]).sort(hostnameCompare)) .appendTo(groupDiv); for ( var i = 1; i < domains.length; i++ ) { - makeMatrixGroup3Section(Object.keys(group[domains[i]]).sort(hostnameCompare)) + makeMatrixGroup4Section(Object.keys(group[domains[i]]).sort(hostnameCompare)) .appendTo(groupDiv); } groupDiv.appendTo(matrixList); @@ -823,6 +848,7 @@ var makeMenu = function() { makeMatrixGroup1(groupStats[1]); makeMatrixGroup2(groupStats[2]); makeMatrixGroup3(groupStats[3]); + makeMatrixGroup4(groupStats[4]); endMatrixUpdate(); initScopeCell(); @@ -1120,10 +1146,10 @@ uDom.onLoad(function() { uDom('body').on('click', '.dropdown-menu-button', dropDownMenuShow); uDom('body').on('click', '.dropdown-menu-capture', dropDownMenuHide); - uDom('#matList').on('click', '.g3Meta', function() { + uDom('#matList').on('click', '.g4Meta', function() { var collapsed = uDom(this) - .toggleClass('g3Collapsed') - .hasClassName('g3Collapsed'); + .toggleClass('g4Collapsed') + .hasClassName('g4Collapsed'); setUserSetting('popupHideBlacklisted', collapsed); }); }); diff --git a/src/js/profiler.js b/src/js/profiler.js index 6fd3e29..8e66771 100644 --- a/src/js/profiler.js +++ b/src/js/profiler.js @@ -22,61 +22,41 @@ /******************************************************************************/ var quickProfiler = (function() { - -/******************************************************************************/ - -var timer = performance; -var time = 0; -var count = -3; -var tstart = 0; -var lastlog = timer.now(); -var prompt = ''; - -/******************************************************************************/ - -var reset = function() { - time = 0; - count = -3; - tstart = 0; -}; - -/******************************************************************************/ - -var avg = function() { - return count > 0 ? time / count : 0; -}; - -/******************************************************************************/ - -var start = function(s) { - prompt = s || ''; - tstart = timer.now(); -}; - -/******************************************************************************/ - -var stop = function() { - count += 1; - if ( count > 0 ) { + var timer = performance; + var time = 0; + var count = 0; + var tstart = 0; + var lastlog = timer.now(); + var prompt = ''; + var reset = function() { + time = 0; + count = 0; + tstart = 0; + }; + var avg = function() { + return count > 0 ? time / count : 0; + }; + var start = function(s) { + prompt = s || ''; + tstart = timer.now(); + }; + var stop = function(period) { + if ( period === undefined ) { + period = 10000; + } var now = timer.now(); + count += 1; time += (now - tstart); - if ( (now - lastlog) > 10000 ) { - console.log('HTTP Switchboard() > %s: %s ms', prompt, avg().toFixed(3)); + if ( (now - lastlog) >= period ) { + console.log('µMatrix> %s: %s ms (%d samples)', prompt, avg().toFixed(3), count); lastlog = now; } - } -}; - -/******************************************************************************/ - -return { - reset: reset, - start: start, - stop: stop -}; - -/******************************************************************************/ - + }; + return { + reset: reset, + start: start, + stop: stop + }; })(); /******************************************************************************/ diff --git a/src/js/traffic.js b/src/js/traffic.js index 69dfd57..c886431 100644 --- a/src/js/traffic.js +++ b/src/js/traffic.js @@ -227,7 +227,6 @@ var onBeforeRootFrameRequestHandler = function(details) { if ( tabId !== µm.behindTheSceneTabId ) { µm.cookieHunter.recordPageCookies(pageStats); } - // quickProfiler.stop(); return; } @@ -250,8 +249,6 @@ var onBeforeRootFrameRequestHandler = function(details) { html = html.replace('{{now}}', String(Date.now())); var dataURI = 'data:text/html;base64,' + btoa(html); - // quickProfiler.stop(); - return { 'redirectUrl': dataURI }; }; @@ -342,8 +339,6 @@ var onBeforeRequestHandler = function(details) { return; } - // quickProfiler.start('onBeforeRequest'); - // console.debug('onBeforeRequestHandler()> "%s": %o', details.url, details); var requestType = requestTypeNormalizer[details.type]; @@ -699,14 +694,9 @@ var onMainDocHeadersReceived = function(details) { // console.debug('onMainDocHeadersReceived()> redirect "%s" to "%s"', requestURL, headers[i].value); } - // rhill 2014-01-11: Auto-scope and/or auto-whitelist only when the - // `main_frame` object is really received (status = 200 OK), i.e. avoid - // redirection, because the final URL might differ. This ensures proper - // scope is looked-up before auto-site-scoping and/or auto-whitelisting. - // https://github.com/gorhill/httpswitchboard/issues/119 + // rhill 2014-01-15: Report redirects if any. + // https://github.com/gorhill/httpswitchboard/issues/112 if ( details.statusLine.indexOf(' 200') > 0 ) { - // rhill 2014-01-15: Report redirects if any. - // https://github.com/gorhill/httpswitchboard/issues/112 var mainFrameStack = [requestURL]; var destinationURL = requestURL; var sourceURL; @@ -719,11 +709,6 @@ var onMainDocHeadersReceived = function(details) { while ( destinationURL = mainFrameStack.pop() ) { pageStats.recordRequest('doc', destinationURL, false); } - - // rhill 2013-12-23: Auto-whitelist page domain? - if ( µm.userSettings.autoWhitelistPageDomain ) { - µm.autoWhitelist1stPartyTemporarily(requestURL); - } } // Evaluate @@ -871,6 +856,12 @@ var requestTypeNormalizer = { /******************************************************************************/ chrome.webRequest.onBeforeRequest.addListener( + //function(details) { + // quickProfiler.start('onBeforeRequest'); + // var r = onBeforeRequestHandler(details); + // quickProfiler.stop(); + // return r; + //}, onBeforeRequestHandler, { "urls": [ diff --git a/src/settings.html b/src/settings.html index 3c88921..46bcd95 100644 --- a/src/settings.html +++ b/src/settings.html @@ -52,23 +52,6 @@ ul > li {    -

- - -

- -