diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index c526eb1826..2ff254b198 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -646,5 +646,13 @@ "notificationAddSave": { "message": "Yes, Save Now", "description": "Yes, Save Now" + }, + "disableContextMenuItem": { + "message": "Disable Context Menu Integration", + "description": "Disable Context Menu Integration" + }, + "disableContextMenuItemDesc": { + "message": "bitwarden's context menu item provides quick access to logins for the current tab.", + "desription": "bitwarden's context menu item provides quick access to logins for the current tab." } } diff --git a/src/background.js b/src/background.js index 56748c45a9..7885f3e4d8 100644 --- a/src/background.js +++ b/src/background.js @@ -78,6 +78,8 @@ chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) { pageDetailsToAutoFill.push({ frameId: sender.frameId, tabId: msg.tabId, details: msg.details }); autofillTimeout = setTimeout(autofillPage, 300); } + } else if (msg.command === 'bgUpdateContextMenu') { + refreshBadgeAndMenu(); } }); @@ -227,13 +229,23 @@ function refreshBadgeAndMenu() { return; } - buildContextMenu(function () { - loadMenuAndUpdateBadge(tab.url, tab.id, true); - onUpdatedRan = onReplacedRan = false; + chrome.storage.local.get(constantsService.disableContextMenuItemKey, function (obj) { + if (! obj[constantsService.disableContextMenuItemKey]) { + buildContextMenu(function() { contextMenuReady(tab) }); + } + else { + chrome.contextMenus.removeAll(); + contextMenuReady(tab); + } }); }); } +function contextMenuReady(tab) { + loadMenuAndUpdateBadge(tab.url, tab.id, true); + onUpdatedRan = onReplacedRan = false; +} + function loadMenuAndUpdateBadge(url, tabId, loadContextMenuOptions) { if (!url) { return; diff --git a/src/popup/app/settings/settingsFeaturesController.js b/src/popup/app/settings/settingsFeaturesController.js index 50083bb144..19db17854e 100644 --- a/src/popup/app/settings/settingsFeaturesController.js +++ b/src/popup/app/settings/settingsFeaturesController.js @@ -5,6 +5,7 @@ $scope.i18n = i18nService; $scope.disableGa = false; $scope.disableAddLoginNotification = false; + $scope.disableContextMenuItem = false; chrome.storage.local.get(constantsService.disableGaKey, function (obj) { // Default for Firefox is disabled. @@ -30,6 +31,17 @@ $scope.$apply(); }); + chrome.storage.local.get(constantsService.disableContextMenuItemKey, function (obj) { + if (obj && obj[constantsService.disableContextMenuItemKey]) { + $scope.disableContextMenuItem = true; + } + else { + $scope.disableContextMenuItem = false; + } + + $scope.$apply(); + }); + $scope.updateGa = function () { chrome.storage.local.get(constantsService.disableGaKey, function (obj) { // Default for Firefox is disabled. @@ -75,4 +87,29 @@ }); }); }; + + $scope.updateDisableContextMenuItem = function () { + chrome.storage.local.get(constantsService.disableContextMenuItemKey, function (obj) { + if (obj[constantsService.disableContextMenuItemKey]) { + // enable + obj[constantsService.disableContextMenuItemKey] = false; + } + else { + // disable + $analytics.eventTrack('Disabled Context Menu Item'); + obj[constantsService.disableContextMenuItemKey] = true; + } + + chrome.storage.local.set(obj, function () { + $scope.disableContextMenuItem = obj[constantsService.disableContextMenuItemKey]; + $scope.$apply(); + if (!obj[constantsService.disableContextMenuItemKey]) { + $analytics.eventTrack('Enabled Context Menu Item'); + } + chrome.runtime.sendMessage({ + command: 'bgUpdateContextMenu' + }); + }); + }); + }; }); diff --git a/src/popup/app/settings/views/settingsFeatures.html b/src/popup/app/settings/views/settingsFeatures.html index 5be7840a1a..6749bc6d5d 100644 --- a/src/popup/app/settings/views/settingsFeatures.html +++ b/src/popup/app/settings/views/settingsFeatures.html @@ -29,5 +29,17 @@ {{i18n.addLoginNotificationDesc}} +