Skip to content

Commit

Permalink
Improve compatibility with private browsing
Browse files Browse the repository at this point in the history
  • Loading branch information
Synzvato committed May 28, 2018
1 parent b23a87a commit 6b5c34e
Show file tree
Hide file tree
Showing 6 changed files with 135 additions and 30 deletions.
1 change: 1 addition & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"helpers": true,
"interceptor": true,
"mappings": true,
"MessageResponse": true,
"requestAnalyzer": true,
"requestSanitizer": true,
"Resource": true,
Expand Down
5 changes: 5 additions & 0 deletions core/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ const Header = {
'REFERER': 'Referer'
};

const MessageResponse = {
'ASYNCHRONOUS': true,
'SYNCHRONOUS': false
};

const Resource = {
'MAPPING_EXPRESSION': /\.map$/i,
'VERSION_EXPRESSION': /(?:\d{1,2}\.){1,3}\d{1,2}/,
Expand Down
70 changes: 70 additions & 0 deletions core/messenger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/**
* Messenger
* Belongs to Decentraleyes.
*
* @author Thomas Rientjes
* @since 2018-05-28
* @license MPL 2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/

'use strict';

/**
* Messenger
*/

var messenger = {};

/**
* Private Methods
*/

messenger._handleMessageReceived = function (message, sender, sendResponse) {

let topic, value;

topic = message.topic;
value = message.value;

if (topic === 'tab:fetch-injections') {

sendResponse({'value': stateManager.tabs[value].injections});
return MessageResponse.SYNCHRONOUS;
}

if (topic === 'domain:fetch-is-whitelisted') {

let whitelistRecord = requestAnalyzer.whitelistedDomains[value];
sendResponse({'value': Boolean(whitelistRecord)});

return MessageResponse.SYNCHRONOUS;
}

if (topic === 'whitelist:add-domain') {

stateManager.addDomainToWhitelist(value).then(function () {
sendResponse({'value': true});
});

return MessageResponse.ASYNCHRONOUS;
}

if (topic === 'whitelist:remove-domain') {

stateManager.removeDomainFromWhitelist(value).then(function () {
sendResponse({'value': true});
});

return MessageResponse.ASYNCHRONOUS;
}
};

/**
* Event Handlers
*/

chrome.runtime.onMessage.addListener(messenger._handleMessageReceived);
2 changes: 1 addition & 1 deletion core/state-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ stateManager.addDomainToWhitelist = function (domain) {
});
};

stateManager.deleteDomainFromWhitelist = function (domain) {
stateManager.removeDomainFromWhitelist = function (domain) {

return new Promise((resolve) => {

Expand Down
1 change: 1 addition & 0 deletions pages/background/background.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<script src="../../core/state-manager.js"></script>
<script src="../../core/request-analyzer.js"></script>
<script src="../../core/file-guard.js"></script>
<script src="../../core/messenger.js"></script>
<script src="../../core/interceptor.js"></script>
<script src="../../core/main.js"></script>

Expand Down
86 changes: 57 additions & 29 deletions pages/popup/popup.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,10 @@ popup._renderContents = function () {

popup._renderNonContextualContents();

if (popup._backgroundPage !== null) {

popup._determineTargetTab()
.then(popup._renderContextualContents);
}
popup._determineTargetTab()
.then(popup._determineDomainWhitelistStatus)
.then(popup._determineResourceInjections)
.then(popup._renderContextualContents);
};

popup._renderNonContextualContents = function () {
Expand All @@ -55,24 +54,12 @@ popup._renderNonContextualContents = function () {

popup._renderContextualContents = function () {

let injections, groupedInjections;

popup._domain = helpers.extractDomainFromUrl(popup._targetTab.url);

popup._requestAnalyzer = popup._backgroundPage.requestAnalyzer;
popup._stateManager = popup._backgroundPage.stateManager;

if (popup._domain !== null) {

popup._domain = helpers.normalizeDomain(popup._domain);
popup._renderDomainWhitelistPanel();
}

injections = popup._stateManager.tabs[popup._targetTab.id].injections;
groupedInjections = popup._groupResourceInjections(injections);

if (Object.keys(groupedInjections).length > 0) {
popup._renderInjectionPanel(groupedInjections);
if (Object.keys(popup._resourceInjections).length > 0) {
popup._renderInjectionPanel(popup._resourceInjections);
}
};

Expand All @@ -87,7 +74,7 @@ popup._renderDomainWhitelistPanel = function () {
protectionToggleElement.setAttribute('dir', popup._scriptDirection);
domainIndicatorElement.innerText = popup._domain;

if (popup._requestAnalyzer.whitelistedDomains[popup._domain]) {
if (popup._domainIsWhitelisted === true) {

let enableProtectionTitle = chrome.i18n.getMessage('enableProtectionTitle');

Expand Down Expand Up @@ -119,23 +106,59 @@ popup._renderInjectionPanel = function (groupedInjections) {

popup._enableProtection = function () {

popup._stateManager.deleteDomainFromWhitelist(popup._domain)
.then(popup._onProtectionToggled);
let message = {
'topic': 'whitelist:remove-domain',
'value': popup._domain
};

chrome.runtime.sendMessage(message, function () {
popup._onProtectionToggled();
});
};

popup._disableProtection = function () {

popup._stateManager.addDomainToWhitelist(popup._domain)
.then(popup._onProtectionToggled);
let message = {
'topic': 'whitelist:add-domain',
'value': popup._domain
};

chrome.runtime.sendMessage(message, function () {
popup._onProtectionToggled();
});
};

popup._determineBackgroundPage = function () {
popup._determineDomainWhitelistStatus = function () {

return new Promise((resolve) => {

chrome.runtime.getBackgroundPage(function (backgroundPage) {
let message = {
'topic': 'domain:fetch-is-whitelisted',
'value': popup._domain
};

chrome.runtime.sendMessage(message, function (response) {

popup._domainIsWhitelisted = response.value;
resolve();
});
});
};

popup._determineResourceInjections = function () {

return new Promise((resolve) => {

let message = {
'topic': 'tab:fetch-injections',
'value': popup._targetTab.id
};

chrome.runtime.sendMessage(message, function (response) {

let groupedInjections = popup._groupResourceInjections(response.value);
popup._resourceInjections = groupedInjections;

popup._backgroundPage = backgroundPage;
resolve();
});
});
Expand All @@ -148,6 +171,12 @@ popup._determineTargetTab = function () {
chrome.tabs.query({'active': true, 'currentWindow': true}, function (tabs) {

popup._targetTab = tabs[0];
popup._domain = helpers.extractDomainFromUrl(tabs[0].url);

if (popup._domain !== null) {
popup._domain = helpers.normalizeDomain(popup._domain);
}

resolve();
});
});
Expand Down Expand Up @@ -292,8 +321,7 @@ popup._onDocumentLoaded = function () {
popup._version = helpers.formatVersion(manifest.version);
popup._scriptDirection = helpers.determineScriptDirection(language);

popup._determineBackgroundPage()
.then(popup._determineAmountInjected)
popup._determineAmountInjected()
.then(popup._renderContents);
};

Expand Down

0 comments on commit 6b5c34e

Please sign in to comment.