add and move permission logic into separate file for all pages (#1274)

This commit is contained in:
nobody 2022-12-30 08:07:11 +01:00
parent 27747f6588
commit 4affa7ad76
No known key found for this signature in database
GPG Key ID: 8F6DE3D614FCFD7A
8 changed files with 452 additions and 412 deletions

View File

@ -0,0 +1,50 @@
/**
* Internal permission Module
* Belongs to LocalCDN (since 2020-02-26)
*
* @author nobody
* @since 2022-12-30
*
* @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';
var permission = {};
permission._onDocumentLoaded = function () {
chrome.permissions.getAll(({origins}) => {
if (origins.includes('<all_urls>')) {
document.getElementById('div-permission').hidden = true;
document.getElementById('div-content').hidden = false;
} else {
document.getElementById('div-permission').hidden = false;
document.getElementById('div-content').hidden = true;
console.log('[ LocalCDN ] missing permission');
document.getElementById('grant-permission').addEventListener('click', function () {
chrome.permissions.request({'origins': ['<all_urls>']});
});
}
});
};
permission._added = function (e) {
if (e.permissions.includes('<all_urls>')) {
document.getElementById('div-permission').hidden = true;
document.getElementById('div-content').hidden = false;
}
};
permission._removed = function () {
document.getElementById('div-permission').hidden = false;
document.getElementById('div-content').hidden = true;
};
chrome.permissions.onAdded.addListener(permission._added);
chrome.permissions.onRemoved.addListener(permission._removed);
document.addEventListener('DOMContentLoaded', permission._onDocumentLoaded);

View File

@ -245,6 +245,16 @@ textarea {
padding: 14px 16px;
}
.permission-banner {
background-color: #ffcccc;
border: 1px solid red;
border-radius: 3px;
font-weight: bold;
margin-top: 20px;
padding: 0.8em;
text-align: center;
}
@media (prefers-color-scheme: dark) {
a {
background: url('../../icons/link-light.svg') no-repeat right center;

View File

@ -18,6 +18,7 @@
<script src="../../modules/internal/helpers.js"></script>
<script src="../../modules/internal/rule-generator.js"></script>
<script src="../../modules/internal/wrappers.js"></script>
<script src="../../modules/internal/permission.js"></script>
<script defer src="../../core/resources.js"></script>
<script defer src="../../core/mappings.js"></script>
@ -28,6 +29,15 @@
<script src="options.js"></script>
<div id ="div-permission" class="permission-banner notice" hidden>
<p class="bold">
<span>Missing permission</span>:
<span>Access your data for all websites</span>
</p>
<button id="grant-permission">Grant permission</button>
</div>
<div id="div-content" hidden>
<div class="btn-group">
<input type="button" id="btn-general-tab" class="option-buttons option-buttons-active" data-option-tab="general-tab" data-i18n-content="btnGeneral" value="General">
<input type="button" id="btn-advanced-tab" class="option-buttons" data-option-tab="advanced-tab" data-i18n-content="btnAdvanced" value="Advanced">
@ -409,6 +419,8 @@
</div>
</div>
</div>
</div>
<div class="notice notice-default hidden" id="notice-locale">
<div class="notice-body" dir="ltr">
<div class="notice-message">

View File

@ -13,6 +13,7 @@
<script src="../../core/storage-manager.js"></script>
<script src="../../modules/internal/targets.js"></script>
<script src="../../modules/internal/helpers.js"></script>
<script src="../../modules/internal/permission.js"></script>
<script src="popup.js"></script>
<header>
<div class="heading">
@ -28,7 +29,7 @@
<p class="bold" data-i18n-content="permissionMissing">Missing permission</p>
<p data-i18n-content="permissionRevokedPermissionName">Access your data for all websites</p>
<div class="div-btn-case-permission">
<div id="btn-permission" class="div-btn-permission" data-i18n-content="permissionAllow">Allow</div>
<div id="grant-permission" class="div-btn-permission" data-i18n-content="permissionAllow">Allow</div>
<div id="btn-info-permission" class="div-btn-permission" data-link="faq-permission" data-i18n-content="permissionMoreInfo">More Info</div>
</div>
</div>

View File

@ -42,24 +42,15 @@ popup._renderContents = function () {
popup._renderNonContextualContents();
chrome.permissions.getAll(({origins}) => {
if (!origins.includes('<all_urls>')) {
console.log('[ LocalCDN ] missing permission');
document.getElementById('div-permission').hidden = false;
document.getElementById('div-content').hidden = true;
document.getElementById('btn-permission').addEventListener('click', function () {
chrome.permissions.request({'origins': ['<all_urls>']});
});
document.getElementById('btn-info-permission').addEventListener('click', popup._onButtonClick);
} else {
popup._determineTargetTab()
.then(popup._determineDomainAllowlistStatus)
.then(popup._determineStatusManipulateDOM)
.then(popup._determineStatusGoogleFonts)
.then(popup._determineResourceInjections)
.then(popup._renderContextualContents);
}
});
if (BrowserType.CHROMIUM) {
document.getElementById('div-manipulateDOM').hidden = true;
document.getElementById('div-google-fonts').hidden = true;

View File

@ -2,13 +2,3 @@ button {
display: block;
margin: 0 auto;
}
.permission-banner {
background-color: #ffcccc;
border: 1px solid red;
border-radius: 3px;
font-weight: bold;
margin-top: 20px;
padding: 0.8em;
text-align: center;
}

View File

@ -9,20 +9,23 @@
<link rel="stylesheet" type="text/css" href="../style.css">
<link rel="stylesheet" type="text/css" href="../base.css">
<link rel="stylesheet" type="text/css" href="welcome.css">
<script src="../../modules/internal/permission.js"></script>
<script src="../../core/constants.js"></script>
<script src="welcome.js"></script>
</head>
<body>
<img src="../images/logo.svg" alt="" class="logo">
<h1>Hello</h1>
<div class="notice">
<div id ="permission-banner" class="permission-banner">
<div id ="div-permission" class="permission-banner notice" hidden>
<p class="bold">
<span>Missing permission</span>:
<span>Access your data for all websites</span>
</p>
<button id="grant-permission">Grant permission</button>
</div>
<div id="div-content" hidden>
<div class="notice">
<h2>What is LocalCDN?</h2>
<p>LocalCDN is a web browser extension that emulates Content Delivery Networks to improve your online privacy. It intercepts traffic, finds supported resources locally, and injects them into the environment. All of this happens automatically, so no prior configuration is required. Feel free to use one of our <a href="https://www.localcdn.org/test/" rel="nofollow noopener noreferrer">testing utilities</a> to find out if you are properly protected. For a good start there is a short <a href="https://www.localcdn.org/tutorial" rel="nofollow noopener noreferrer">tutorial</a> and our <a href="https://codeberg.org/nobody/LocalCDN/wiki" rel="nofollow noopener noreferrer">Wiki pages</a>. LocalCDN supports more than 100 Libraries and 26 CDNs!</p>
<p id="chromium-banner">Non-Firefox browsers do not support all features of LocalCDN. <a class="no-icon" href="../help/help.html#non-firefox">Read more</a></p>
@ -42,5 +45,6 @@
<a class="btn btn-contact" href="https://www.localcdn.org/contact" rel="noopener noreferrer"><span class="btn-text">Contact</span></a>
<a class="btn btn-testing-utility" href="https://www.localcdn.org/test/" rel="noopener noreferrer"><span class="btn-text">Testing Utilities</span></a>
</div>
</div>
</body>
</html>

View File

@ -31,24 +31,6 @@ welcome._onDocumentLoaded = function () {
document.getElementById('chromium-banner').style.display = 'block';
}
document.getElementById('open-settings').addEventListener('mouseup', function () { chrome.runtime.openOptionsPage(); });
chrome.permissions.getAll(({origins}) => {
if (origins.includes('<all_urls>')) {
document.getElementById('permission-banner').hidden = true;
} else {
console.log('[ LocalCDN ] missing permission');
document.getElementById('grant-permission').addEventListener('click', function () {
chrome.permissions.request({'origins': ['<all_urls>']});
});
}
});
};
welcome._permissionStatusListener = function (e) {
if (e.permissions.includes('<all_urls>')) {
document.getElementById('permission-banner').hidden = true;
}
};
document.addEventListener('DOMContentLoaded', welcome._onDocumentLoaded);
chrome.permissions.onAdded.addListener(welcome._permissionStatusListener);