From 1212f6f95839c939b6d6fb731b31be768682775d Mon Sep 17 00:00:00 2001 From: Jocelyn Liu Date: Tue, 1 May 2018 17:33:09 -0700 Subject: [PATCH] tests for allow script once --- test/app/actions/shieldsPanelActionsTest.ts | 11 +- test/app/background/api/shieldsAPITest.ts | 29 +++ .../reducers/shieldsPanelReducerTest.ts | 208 +++++++++++++++--- .../braveShields/braveShieldsControlsTest.tsx | 7 + test/app/state/shieldsPanelStateTest.ts | 49 +++-- test/testData.ts | 11 +- 6 files changed, 268 insertions(+), 47 deletions(-) diff --git a/test/app/actions/shieldsPanelActionsTest.ts b/test/app/actions/shieldsPanelActionsTest.ts index 799913a..a7ee411 100644 --- a/test/app/actions/shieldsPanelActionsTest.ts +++ b/test/app/actions/shieldsPanelActionsTest.ts @@ -52,7 +52,8 @@ describe('shieldsPanelActions', () => { it('resourceBlocked action', () => { const details: BlockDetails = { blockType: 'ads', - tabId: 2 + tabId: 2, + subresource: 'https://www.brave.com/test' } assert.deepEqual(actions.resourceBlocked(details), { type: types.RESOURCE_BLOCKED, @@ -91,4 +92,12 @@ describe('shieldsPanelActions', () => { setting }) }) + + it('allowScriptOriginsOnce action', () => { + const origins = ['https://a.com', 'https://b.com'] + assert.deepEqual(actions.allowScriptOriginsOnce(origins), { + type: types.ALLOW_SCRIPT_ORIGINS_ONCE, + origins + }) + }) }) diff --git a/test/app/background/api/shieldsAPITest.ts b/test/app/background/api/shieldsAPITest.ts index a7332cb..7815a0b 100644 --- a/test/app/background/api/shieldsAPITest.ts +++ b/test/app/background/api/shieldsAPITest.ts @@ -321,4 +321,33 @@ describe('Shields API', () => { assert.equal(shieldsAPI.toggleShieldsValue('block'), 'allow') }) }) + + describe('setAllowScriptOriginsOnce', function() { + before(function () { + this.spy = sinon.spy(chrome.braveShields, 'allowScriptsOnce') + this.p = shieldsAPI.setAllowScriptOriginsOnce( + ['https://a.com/', 'https://b.com/'], 2) + }) + after(function () { + this.spy.restore() + }) + it('calls chrome.braveShields.allowScriptsOnce with the correct args', function () { + const arg0 = this.spy.getCall(0).args[0] + assert.deepEqual(arg0, ['https://a.com/', 'https://b.com/']) + const arg1 = this.spy.getCall(0).args[1] + assert.deepEqual(arg1, 2) + }) + it('passes 3 args to chrome.braveShields.allowScriptsOnce', function () { + assert.equal(this.spy.getCall(0).args.length, 3) // include callback + }) + it('resolves the returned promise', function (cb) { + this.p + .then(function() { + cb() + }) + .catch((e: Error) => { + console.error(e.toString()) + }) + }) + }) }) diff --git a/test/app/background/reducers/shieldsPanelReducerTest.ts b/test/app/background/reducers/shieldsPanelReducerTest.ts index a6d9f46..08e4c8d 100644 --- a/test/app/background/reducers/shieldsPanelReducerTest.ts +++ b/test/app/background/reducers/shieldsPanelReducerTest.ts @@ -228,7 +228,7 @@ describe('braveShieldsPanelReducer', () => { httpUpgradableResources: 'block', javascript: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', } assert.deepEqual( shieldsPanelReducer(initialState.shieldsPanel, { @@ -253,7 +253,8 @@ describe('braveShieldsPanelReducer', () => { fingerprinting: 'block', cookies: 'block', controlsOpen: true, - braveShields: 'allow' + braveShields: 'allow', + javascriptBlockedOrigins: [] } }, windows: {} @@ -280,7 +281,8 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: [] } }, windows: { @@ -388,7 +390,8 @@ describe('braveShieldsPanelReducer', () => { type: types.RESOURCE_BLOCKED, details: { blockType: 'javascript', - tabId: 2 + tabId: 2, + subresource: 'https://test.brave.com/index.js' } }) assert.deepEqual(nextState, { @@ -410,7 +413,118 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: ['https://test.brave.com/'] + } + }, + windows: { + 1: 2 + } + }) + }) + + it('increments JS blocking consecutively', function () { + let nextState = shieldsPanelReducer(state, { + type: types.RESOURCE_BLOCKED, + details: { + blockType: 'javascript', + tabId: 2, + subresource: 'https://a.com/index.js' + } + }) + assert.deepEqual(nextState, { + currentWindowId: 1, + tabs: { + 2: { + origin: 'https://brave.com', + hostname: 'brave.com', + adsBlocked: 0, + trackersBlocked: 0, + httpsRedirected: 0, + javascriptBlocked: 1, + fingerprintingBlocked: 0, + controlsOpen: true, + braveShields: 'allow', + httpUpgradableResources: 'block', + id: 2, + javascript: 'block', + trackers: 'block', + ads: 'block', + fingerprinting: 'block', + cookies: 'block', + javascriptBlockedOrigins: ['https://a.com/'] + } + }, + windows: { + 1: 2 + } + }) + + nextState = shieldsPanelReducer(nextState, { + type: types.RESOURCE_BLOCKED, + details: { + blockType: 'javascript', + tabId: 2, + subresource: 'https://b.com/index.js' + } + }) + assert.deepEqual(nextState, { + currentWindowId: 1, + tabs: { + 2: { + origin: 'https://brave.com', + hostname: 'brave.com', + adsBlocked: 0, + trackersBlocked: 0, + httpsRedirected: 0, + javascriptBlocked: 2, + fingerprintingBlocked: 0, + controlsOpen: true, + braveShields: 'allow', + httpUpgradableResources: 'block', + id: 2, + javascript: 'block', + trackers: 'block', + ads: 'block', + fingerprinting: 'block', + cookies: 'block', + javascriptBlockedOrigins: ['https://a.com/', 'https://b.com/'] + } + }, + windows: { + 1: 2 + } + }) + + nextState = shieldsPanelReducer(nextState, { + type: types.RESOURCE_BLOCKED, + details: { + blockType: 'javascript', + tabId: 2, + subresource: 'https://a.com/index.js' + } + }) + assert.deepEqual(nextState, { + currentWindowId: 1, + tabs: { + 2: { + origin: 'https://brave.com', + hostname: 'brave.com', + adsBlocked: 0, + trackersBlocked: 0, + httpsRedirected: 0, + javascriptBlocked: 3, + fingerprintingBlocked: 0, + controlsOpen: true, + braveShields: 'allow', + httpUpgradableResources: 'block', + id: 2, + javascript: 'block', + trackers: 'block', + ads: 'block', + fingerprinting: 'block', + cookies: 'block', + javascriptBlockedOrigins: ['https://a.com/', 'https://b.com/'] } }, windows: { @@ -424,7 +538,8 @@ describe('braveShieldsPanelReducer', () => { type: types.RESOURCE_BLOCKED, details: { blockType: 'fingerprinting', - tabId: 2 + tabId: 2, + subresource: 'https://test.brave.com' } }) assert.deepEqual(nextState, { @@ -446,7 +561,8 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: [] } }, windows: { @@ -460,7 +576,8 @@ describe('braveShieldsPanelReducer', () => { type: types.RESOURCE_BLOCKED, details: { blockType: 'ads', - tabId: 2 + tabId: 2, + subresource: 'https://test.brave.com' } }) assert.deepEqual(nextState, { @@ -482,7 +599,8 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: [] } }, windows: { @@ -494,7 +612,8 @@ describe('braveShieldsPanelReducer', () => { type: types.RESOURCE_BLOCKED, details: { blockType: 'ads', - tabId: 2 + tabId: 2, + subresource: 'https://test.brave.com' } }) assert.deepEqual(nextState, { @@ -516,7 +635,8 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: [] } }, windows: { @@ -529,7 +649,8 @@ describe('braveShieldsPanelReducer', () => { type: types.RESOURCE_BLOCKED, details: { blockType: 'ads', - tabId: 2 + tabId: 2, + subresource: 'https://test.brave.com' } })) assert.deepEqual(nextState, { @@ -551,7 +672,8 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: [] } }, windows: { @@ -563,7 +685,8 @@ describe('braveShieldsPanelReducer', () => { type: types.RESOURCE_BLOCKED, details: { blockType: 'ads', - tabId: 3 + tabId: 3, + subresource: 'https://test.brave.com' } }) @@ -586,14 +709,16 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: [] }, 3: { adsBlocked: 1, trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, - fingerprintingBlocked: 0 + fingerprintingBlocked: 0, + javascriptBlockedOrigins: [] } }, windows: { @@ -606,7 +731,8 @@ describe('braveShieldsPanelReducer', () => { type: types.RESOURCE_BLOCKED, details: { blockType: 'ads', - tabId: 2 + tabId: 2, + subresource: 'https://test.brave.com' } })) assert.deepEqual(nextState, { @@ -628,7 +754,8 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: [] } }, windows: { @@ -640,7 +767,8 @@ describe('braveShieldsPanelReducer', () => { type: types.RESOURCE_BLOCKED, details: { blockType: 'trackers', - tabId: 2 + tabId: 2, + subresource: 'https://test.brave.com' } }) assert.deepEqual(nextState, { @@ -662,7 +790,8 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: [] } }, windows: { @@ -673,7 +802,8 @@ describe('braveShieldsPanelReducer', () => { type: types.RESOURCE_BLOCKED, details: { blockType: 'httpUpgradableResources', - tabId: 2 + tabId: 2, + subresource: 'https://test.brave.com' } }) assert.deepEqual(nextState, { @@ -695,7 +825,8 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: [] } }, windows: { @@ -706,7 +837,8 @@ describe('braveShieldsPanelReducer', () => { type: types.RESOURCE_BLOCKED, details: { blockType: 'javascript', - tabId: 2 + tabId: 2, + subresource: 'https://test.brave.com/index.js' } }) assert.deepEqual(nextState, { @@ -728,7 +860,8 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: ['https://test.brave.com/'] } }, windows: { @@ -739,7 +872,8 @@ describe('braveShieldsPanelReducer', () => { type: types.RESOURCE_BLOCKED, details: { blockType: 'fingerprinting', - tabId: 2 + tabId: 2, + subresource: 'https://test.brave.com' } }) assert.deepEqual(nextState, { @@ -761,7 +895,8 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', ads: 'block', fingerprinting: 'block', - cookies: 'block' + cookies: 'block', + javascriptBlockedOrigins: ['https://test.brave.com/'] } }, windows: { @@ -811,4 +946,25 @@ describe('braveShieldsPanelReducer', () => { assert.equal(this.spy.getCall(0).args[2].controlsOpen, true) }) }) + + describe('ALLOW_SCRIPT_ORIGINS_ONCE', function() { + before(function () { + this.reloadTabSpy = sinon.spy(tabsAPI, 'reloadTab') + this.setAllowScriptOriginsOnceSpy = sinon.spy(shieldsAPI, 'setAllowScriptOriginsOnce') + }) + after(function () { + this.reloadTabSpy.restore() + this.setAllowScriptOriginsOnceSpy.restore() + }) + it('should call setAllowScriptOriginsOnce', function () { + const origins = ['https://a.com/', 'https://b.com/'] + const tabId = 2 + assert.deepEqual( + shieldsPanelReducer(state, { + type: types.ALLOW_SCRIPT_ORIGINS_ONCE, + origins + }), state) + assert.equal(this.setAllowScriptOriginsOnceSpy.withArgs(origins, tabId).calledOnce, true) + }) + }) }) diff --git a/test/app/components/braveShields/braveShieldsControlsTest.tsx b/test/app/components/braveShields/braveShieldsControlsTest.tsx index df5178e..47da88b 100644 --- a/test/app/components/braveShields/braveShieldsControlsTest.tsx +++ b/test/app/components/braveShields/braveShieldsControlsTest.tsx @@ -22,6 +22,7 @@ function setup () { javascript: 'block', fingerprinting: 'block', cookies: 'block', + blockedScriptOrigins: [], blockAdsTrackers: (setting: BlockOptions) => { return { type: actionTypes.BLOCK_ADS_TRACKERS, @@ -55,6 +56,12 @@ function setup () { type: actionTypes.BLOCK_COOKIES, setting } + }, + allowScriptOriginsOnce: (origins: string[]) => { + return { + type: actionTypes.ALLOW_SCRIPT_ORIGINS_ONCE, + origins, + } } } diff --git a/test/app/state/shieldsPanelStateTest.ts b/test/app/state/shieldsPanelStateTest.ts index 8f9fc90..7431658 100644 --- a/test/app/state/shieldsPanelStateTest.ts +++ b/test/app/state/shieldsPanelStateTest.ts @@ -214,7 +214,8 @@ describe('shieldsPanelState test', () => { trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, - fingerprintingBlocked: 0 + fingerprintingBlocked: 0, + javascriptBlockedOrigins: [] }, 3: { id: 3 @@ -253,7 +254,8 @@ describe('shieldsPanelState test', () => { hostname: 'https://brave.com', origin: 'https://brave.com', braveShields: 'block', - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: ['https://a.com', 'https://b.com'] }, 3: { ads: 'block', @@ -272,7 +274,8 @@ describe('shieldsPanelState test', () => { fingerprinting: 'block', cookies: 'block', fingerprintingBlocked: 0, - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: ['https://a.com', 'https://b.com'] }, 4: { ads: 'block', @@ -291,7 +294,8 @@ describe('shieldsPanelState test', () => { fingerprinting: 'block', cookies: 'block', fingerprintingBlocked: 0, - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: ['https://a.com', 'https://b.com'] } }, windows: { @@ -325,7 +329,8 @@ describe('shieldsPanelState test', () => { hostname: 'https://brave.com', origin: 'https://brave.com', braveShields: 'block', - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: [] }, 3: { ads: 'block', @@ -344,7 +349,8 @@ describe('shieldsPanelState test', () => { fingerprinting: 'block', cookies: 'block', fingerprintingBlocked: 0, - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: ['https://a.com', 'https://b.com'] }, 4: { ads: 'block', @@ -363,7 +369,8 @@ describe('shieldsPanelState test', () => { fingerprinting: 'block', cookies: 'block', fingerprintingBlocked: 0, - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: ['https://a.com', 'https://b.com'] } }, windows: { @@ -394,7 +401,8 @@ describe('shieldsPanelState test', () => { fingerprinting: 'block', cookies: 'block', fingerprintingBlocked: 0, - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: ['https://a.com', 'https://b.com'] }, 3: { ads: 'block', @@ -413,7 +421,8 @@ describe('shieldsPanelState test', () => { fingerprinting: 'block', cookies: 'block', fingerprintingBlocked: 0, - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: ['https://a.com', 'https://b.com'] }, 4: { ads: 'block', @@ -432,7 +441,8 @@ describe('shieldsPanelState test', () => { fingerprinting: 'block', cookies: 'block', fingerprintingBlocked: 5, - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: ['https://a.com', 'https://b.com'] } }, windows: { @@ -461,7 +471,8 @@ describe('shieldsPanelState test', () => { fingerprinting: 'block', cookies: 'block', fingerprintingBlocked: 0, - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: ['https://a.com', 'https://b.com'] }, 3: { ads: 'block', @@ -480,7 +491,8 @@ describe('shieldsPanelState test', () => { fingerprinting: 'block', cookies: 'block', fingerprintingBlocked: 0, - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: ['https://a.com', 'https://b.com'] }, 4: { ads: 'block', @@ -499,7 +511,8 @@ describe('shieldsPanelState test', () => { fingerprinting: 'block', cookies: 'block', fingerprintingBlocked: 0, - url: 'https://brave.com' + url: 'https://brave.com', + javascriptBlockedOrigins: [] } }, windows: { @@ -512,7 +525,7 @@ describe('shieldsPanelState test', () => { describe('updateResourceBlocked', () => { it('can update ads blocked count', function () { this.tabId = 2 - assert.deepEqual(shieldsPanelState.updateResourceBlocked(state, this.tabId, 'ads'), { + assert.deepEqual(shieldsPanelState.updateResourceBlocked(state, this.tabId, 'ads', 'https://test.brave.com'), { currentWindowId: 1, tabs: { 2: { @@ -527,7 +540,8 @@ describe('shieldsPanelState test', () => { trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, - fingerprintingBlocked: 0 + fingerprintingBlocked: 0, + javascriptBlockedOrigins: [] }, 3: { id: 3 @@ -544,7 +558,7 @@ describe('shieldsPanelState test', () => { }) it('can update tracking protection blocked count', function () { this.tabId = 2 - assert.deepEqual(shieldsPanelState.updateResourceBlocked(state, this.tabId, 'ads'), { + assert.deepEqual(shieldsPanelState.updateResourceBlocked(state, this.tabId, 'ads', 'https://test.brave.com'), { currentWindowId: 1, tabs: { 2: { @@ -559,7 +573,8 @@ describe('shieldsPanelState test', () => { trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, - fingerprintingBlocked: 0 + fingerprintingBlocked: 0, + javascriptBlockedOrigins: [] }, 3: { id: 3 diff --git a/test/testData.ts b/test/testData.ts index db9f0b8..dae2dac 100644 --- a/test/testData.ts +++ b/test/testData.ts @@ -31,7 +31,8 @@ export const tabs: Tabs = { javascriptBlocked: 0, fingerprintingBlocked: 0, braveShields: 'block', - trackersBlocked: 0 + trackersBlocked: 0, + javascriptBlockedOrigins: [] } } @@ -39,7 +40,8 @@ export const activeTabData = tabs[2] export const blockedResource: BlockDetails = { blockType: 'ads', - tabId: 2 + tabId: 2, + subresource: 'https://www.brave.com/test' } export class ChromeEvent { @@ -94,7 +96,10 @@ export const getMockChrome = () => { } }, braveShields: { - onBlocked: new ChromeEvent() + onBlocked: new ChromeEvent(), + allowScriptsOnce: function(origins: Array, tabId: number, cb: () => void) { + setImmediate(cb) + } }, contentSettings: { plugins: {