make clipboardRead optional permission
This commit is contained in:
parent
e09289bf58
commit
a797f18b78
|
@ -295,4 +295,32 @@ export class BrowserApi {
|
|||
return chrome.runtime.reload();
|
||||
}
|
||||
}
|
||||
|
||||
static hasPermission(permissionName: string): Promise<boolean> {
|
||||
return new Promise((resolve) => {
|
||||
if (BrowserApi.isSafariApi) {
|
||||
resolve(true);
|
||||
} else {
|
||||
chrome.permissions.contains({
|
||||
permissions: [permissionName],
|
||||
}, (granted: boolean) => {
|
||||
resolve(granted);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static requestPermission(permissionName: string): Promise<boolean> {
|
||||
return new Promise((resolve) => {
|
||||
if (BrowserApi.isSafariApi) {
|
||||
resolve(true);
|
||||
} else {
|
||||
chrome.permissions.request({
|
||||
permissions: [permissionName],
|
||||
}, (granted: boolean) => {
|
||||
resolve(granted);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,7 +71,6 @@
|
|||
"contextMenus",
|
||||
"storage",
|
||||
"unlimitedStorage",
|
||||
"clipboardRead",
|
||||
"clipboardWrite",
|
||||
"idle",
|
||||
"http://*/*",
|
||||
|
@ -79,6 +78,9 @@
|
|||
"webRequest",
|
||||
"webRequestBlocking"
|
||||
],
|
||||
"optional_permissions": [
|
||||
"clipboardRead"
|
||||
],
|
||||
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
|
||||
"commands": {
|
||||
"autofill_login": {
|
||||
|
|
|
@ -16,6 +16,8 @@ import { TotpService } from 'jslib/abstractions/totp.service';
|
|||
|
||||
import { ConstantsService } from 'jslib/services/constants.service';
|
||||
|
||||
import { BrowserApi } from '../../browser/browserApi';
|
||||
|
||||
@Component({
|
||||
selector: 'app-options',
|
||||
templateUrl: 'options.component.html',
|
||||
|
@ -35,6 +37,7 @@ export class OptionsComponent implements OnInit {
|
|||
themeOptions: any[];
|
||||
defaultUriMatch = UriMatchType.Domain;
|
||||
uriMatchOptions: any[];
|
||||
clearClipboardOriginalValue: number;
|
||||
clearClipboard: number;
|
||||
clearClipboardOptions: any[];
|
||||
|
||||
|
@ -94,6 +97,7 @@ export class OptionsComponent implements OnInit {
|
|||
this.defaultUriMatch = defaultUriMatch == null ? UriMatchType.Domain : defaultUriMatch;
|
||||
|
||||
this.clearClipboard = await this.storageService.get<number>(ConstantsService.clearClipboardKey);
|
||||
this.clearClipboardOriginalValue = this.clearClipboard;
|
||||
}
|
||||
|
||||
async updateAddLoginNotification() {
|
||||
|
@ -155,10 +159,22 @@ export class OptionsComponent implements OnInit {
|
|||
}
|
||||
|
||||
async saveClearClipboard() {
|
||||
if (!this.showClearClipboard) {
|
||||
return;
|
||||
}
|
||||
let hasClipboardPermission = await BrowserApi.hasPermission('clipboardRead');
|
||||
if (!hasClipboardPermission) {
|
||||
hasClipboardPermission = await BrowserApi.requestPermission('clipboardRead');
|
||||
}
|
||||
if (hasClipboardPermission) {
|
||||
this.clearClipboardOriginalValue = this.clearClipboard;
|
||||
await this.storageService.save(ConstantsService.clearClipboardKey, this.clearClipboard);
|
||||
this.analytics.eventTrack.next({
|
||||
action: 'Set Clear Clipboard ' + (this.clearClipboard == null ? 'Disabled' : this.clearClipboard),
|
||||
});
|
||||
} else {
|
||||
this.clearClipboard = this.clearClipboardOriginalValue;
|
||||
}
|
||||
}
|
||||
|
||||
private callAnalytics(name: string, enabled: boolean) {
|
||||
|
|
Loading…
Reference in New Issue