Permissions requesting fixes (#1334)
* Fix permissions requests not occurring during user interaction * Update toggle after changing permissions * Update functions * Update clipboard requests
This commit is contained in:
parent
a802666d8d
commit
828c4b11c1
@ -36,21 +36,47 @@ async function isAllowedFileSchemeAccess() {
|
||||
return await new Promise((resolve) => chrome.extension.isAllowedFileSchemeAccess(resolve));
|
||||
}
|
||||
|
||||
async function hasPermissions(permissions) {
|
||||
return await new Promise((resolve) => chrome.permissions.contains({permissions}, resolve));
|
||||
function hasPermissions(permissions) {
|
||||
return new Promise((resolve) => chrome.permissions.contains({permissions}, (result) => {
|
||||
const e = chrome.runtime.lastError;
|
||||
resolve(!e && result);
|
||||
}));
|
||||
}
|
||||
|
||||
async function setPermissionsGranted(permissions, shouldHave) {
|
||||
const has = await hasPermissions(permissions);
|
||||
if (shouldHave === has) { return has; }
|
||||
|
||||
return await (
|
||||
function setPermissionsGranted(permissions, shouldHave) {
|
||||
return (
|
||||
shouldHave ?
|
||||
new Promise((resolve) => chrome.permissions.request({permissions}, resolve)) :
|
||||
new Promise((resolve) => chrome.permissions.remove({permissions}, (v) => resolve(!v)))
|
||||
new Promise((resolve, reject) => chrome.permissions.request({permissions}, (result) => {
|
||||
const e = chrome.runtime.lastError;
|
||||
if (e) {
|
||||
reject(new Error(e.message));
|
||||
} else {
|
||||
resolve(result);
|
||||
}
|
||||
})) :
|
||||
new Promise((resolve, reject) => chrome.permissions.remove({permissions}, (result) => {
|
||||
const e = chrome.runtime.lastError;
|
||||
if (e) {
|
||||
reject(new Error(e.message));
|
||||
} else {
|
||||
resolve(!result);
|
||||
}
|
||||
}))
|
||||
);
|
||||
}
|
||||
|
||||
function setupPermissionCheckbox(checkbox, permissions) {
|
||||
checkbox.addEventListener('change', (e) => {
|
||||
updatePermissionCheckbox(checkbox, permissions, e.currentTarget.checked);
|
||||
}, false);
|
||||
}
|
||||
|
||||
async function updatePermissionCheckbox(checkbox, permissions, value) {
|
||||
checkbox.checked = !value;
|
||||
const hasPermission = await setPermissionsGranted(permissions, value);
|
||||
checkbox.checked = hasPermission;
|
||||
}
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
const documentFocusController = new DocumentFocusController();
|
||||
@ -79,9 +105,7 @@ async function setPermissionsGranted(permissions, shouldHave) {
|
||||
permissionsCheckboxes[i].checked = permissions[i];
|
||||
}
|
||||
|
||||
permissionsCheckboxes[0].addEventListener('change', (e) => {
|
||||
setPermissionsGranted(['clipboardRead'], e.currentTarget.checked);
|
||||
});
|
||||
setupPermissionCheckbox(permissionsCheckboxes[0], ['clipboardRead']);
|
||||
|
||||
await promiseTimeout(100);
|
||||
|
||||
|
@ -339,14 +339,7 @@ class AnkiController {
|
||||
}
|
||||
|
||||
async _requestClipboardReadPermission() {
|
||||
const permissions = ['clipboardRead'];
|
||||
|
||||
if (await new Promise((resolve) => chrome.permissions.contains({permissions}, resolve))) {
|
||||
// Already has permission
|
||||
return;
|
||||
}
|
||||
|
||||
return await new Promise((resolve) => chrome.permissions.request({permissions}, resolve));
|
||||
return await this._settingsController.setPermissionsGranted(['clipboardRead'], true);
|
||||
}
|
||||
|
||||
_getFieldMarkers(fieldValue) {
|
||||
|
@ -58,9 +58,7 @@ class ClipboardPopupsController {
|
||||
let value = checkbox.checked;
|
||||
|
||||
if (value) {
|
||||
value = await new Promise((resolve) => {
|
||||
chrome.permissions.request({permissions: ['clipboardRead']}, resolve);
|
||||
});
|
||||
value = await this._settingsController.setPermissionsGranted(['clipboardRead'], true);
|
||||
checkbox.checked = value;
|
||||
}
|
||||
|
||||
|
@ -132,6 +132,39 @@ class SettingsController extends EventDispatcher {
|
||||
return optionsFull;
|
||||
}
|
||||
|
||||
hasPermissions(permissions) {
|
||||
return new Promise((resolve, reject) => chrome.permissions.contains({permissions}, (result) => {
|
||||
const e = chrome.runtime.lastError;
|
||||
if (e) {
|
||||
reject(new Error(e.message));
|
||||
} else {
|
||||
resolve(result);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
setPermissionsGranted(permissions, shouldHave) {
|
||||
return (
|
||||
shouldHave ?
|
||||
new Promise((resolve, reject) => chrome.permissions.request({permissions}, (result) => {
|
||||
const e = chrome.runtime.lastError;
|
||||
if (e) {
|
||||
reject(new Error(e.message));
|
||||
} else {
|
||||
resolve(result);
|
||||
}
|
||||
})) :
|
||||
new Promise((resolve, reject) => chrome.permissions.remove({permissions}, (result) => {
|
||||
const e = chrome.runtime.lastError;
|
||||
if (e) {
|
||||
reject(new Error(e.message));
|
||||
} else {
|
||||
resolve(!result);
|
||||
}
|
||||
}))
|
||||
);
|
||||
}
|
||||
|
||||
// Private
|
||||
|
||||
_setProfileIndex(value) {
|
||||
|
Loading…
Reference in New Issue
Block a user