supporting custom ua string per container; part 2

This commit is contained in:
Ray Lothian 2020-08-05 08:29:57 +02:00
parent 2a317e5aec
commit 92773630cd
4 changed files with 144 additions and 62 deletions

View file

@ -190,11 +190,14 @@ select {
background-color: #4d72b7;
color: #fff;
}
[data-cmd="container"],
[data-cmd="container"] {
background-color: #92773c;
color: #fff;
}
[data-cmd="window"],
[data-cmd="apply"] {
color: #fff;
background-color: #3c923c;
color: #fff;
}
[data-cmd="reset"] {
@ -242,3 +245,7 @@ body[data-android="true"] [data-cmd="window"] {
#toast:empty {
display: none;
}
.hide {
visibility: hidden;
}

View file

@ -78,7 +78,7 @@
<td>userAgent</td>
<td colspan="3">
<div hbox>
<input id="ua" type="text" placeholder="Your preferred user-agent string" title="To set a blank user-agent string, use the 'empty' keyword. To construct a custom user-agent string based on the current browser's navigator object, use ${} notation. Whatever is inside this notation is read from the 'navigator' object. For instance, to append a string to the default user-agent, use '${userAgent} THIS IS THE APPENDED STRING'">
<input id="ua" type="text" autofocus placeholder="Your preferred user-agent string" title="To set a blank user-agent string, use the 'empty' keyword. To construct a custom user-agent string based on the current browser's navigator object, use ${} notation. Whatever is inside this notation is read from the 'navigator' object. For instance, to append a string to the default user-agent, use '${userAgent} THIS IS THE APPENDED STRING'">
</div>
</td>
</tr>
@ -125,11 +125,11 @@
<input type="button" value="Options" title="Open options page" style="margin-left: 2px;" data-cmd="options">
<input type="button" value="Restart" title="Click to reload the extension. This will cause all the window-based user-agent strings to be cleared" data-cmd="reload">
<input type="button" value="Refresh Tab" title="Refresh the current page" data-cmd="refresh">
<input type="button" value="Reset" title="Reset User-Agent string to the default one. This will not reset window-based UA strings. To reset them, use the 'Restart' button" data-cmd="reset">
<input type="button" value="Reset" title="Reset browser's user-agent string to the default one. This will not reset window-based UA strings. To reset them, use the 'Restart' button" data-cmd="reset">
<input type="button" value="Test" title="Test your user-agent string" data-cmd="test">
<input type="button" value="Container" title="Set this string as this container's User-Agent string" data-cmd="container">
<input type="button" value="Window" title="Set this string as this window's User-Agent string" data-cmd="window">
<input type="button" value="Apply" title="Set this string as the browser's User-Agent string" data-cmd="apply">
<input type="button" value="Support Containers" title="Allow the extension to access your browser's containers. If this permission is granted, tabs inside isolated containers do not follow the default container's user-agent string. You need to set this string for each new container." data-cmd="container" class="hide">
<input type="button" value="Window" title="Set this user-agent string for all tabs inside the current window" data-cmd="window">
<input type="button" value="Apply" title="Set this user-agent string as the browser's User-Agent string" data-cmd="apply">
</div>
<script src="index.js"></script>
<script async src="matched.js"></script>

View file

@ -2,6 +2,30 @@
document.body.dataset.android = navigator.userAgent.indexOf('Android') !== -1;
let tab = {};
chrome.tabs.query({
active: true,
currentWindow: true
}, tbs => {
if (tbs.length) {
tab = tbs[0];
if ('cookieStoreId' in tab) {
const apply = document.querySelector('[data-cmd="apply"]');
apply.value += ' (CNT)';
apply.title = 'Set this user-agent string as the current container\'s User-Agent string';
const w = document.querySelector('[data-cmd="window"]');
w.value += ' (CNT)';
w.title = 'Set this user-agent string for all tabs inside the current window\'s container';
const reset = document.querySelector('[data-cmd="reset"]');
reset.value += ' (CNT)';
reset.title = 'Reset the container\'s user-agent string to the default one. This will not reset window-based UA strings. To reset them, use the \'Restart\' button';
}
}
});
const map = {};
function sort(arr) {
@ -227,37 +251,15 @@ document.addEventListener('click', ({target}) => {
else {
msg('User-Agent is Set');
}
chrome.storage.local.set({
ua: '' // since we set from managed storage, the value might already be this one and hence onChanged is not being called
}, () => {
if (value !== navigator.userAgent) {
chrome.storage.local.set({
ua: value
});
}
});
if (value !== navigator.userAgent) {
chrome.storage.local.set({
ua: value
});
}
}
else if (cmd === 'window' || cmd === 'container') {
else if (cmd === 'window') {
const value = document.getElementById('ua').value;
const next = () => chrome.tabs.query({
active: true,
currentWindow: true
}, ([tab]) => {
if (cmd === 'window') {
chrome.runtime.getBackgroundPage(bg => bg.ua.update(value, tab.windowId, tab.cookieStoreId));
}
else {
chrome.runtime.getBackgroundPage(bg => bg.ua.update(value, undefined, tab.cookieStoreId));
}
});
if (cmd === 'container') {
chrome.permissions.request({
permissions: ['cookies']
}, granted => granted && next());
}
else {
next();
}
chrome.runtime.getBackgroundPage(bg => bg.ua.update(value, tab.windowId, tab.cookieStoreId));
}
else if (cmd === 'reset') {
const input = document.querySelector('#list :checked');
@ -267,7 +269,7 @@ document.addEventListener('click', ({target}) => {
chrome.storage.local.set({
ua: ''
});
msg('Reset to Default');
msg('Disabled. Uses the default user-agent string');
}
else if (cmd === 'refresh') {
chrome.tabs.query({
@ -314,3 +316,28 @@ document.getElementById('ua').addEventListener('input', e => {
});
}
});
document.getElementById('ua').addEventListener('keyup', e => {
if (e.key === 'Enter') {
document.querySelector('[data-cmd="apply"]').click();
}
});
/* container support */
document.querySelector('[data-cmd="container"]').addEventListener('click', e => {
chrome.permissions.request({
permissions: ['cookies']
}, granted => {
if (granted) {
e.target.classList.add('hide');
}
});
});
if (/Firefox/.test(navigator.userAgent)) {
chrome.permissions.contains({
permissions: ['cookies']
}, granted => {
if (granted === false) {
document.querySelector('[data-cmd="container"]').classList.remove('hide');
}
});
}