diff --git a/src/background.js b/src/background.js index d815e17bbd..539299d2c2 100644 --- a/src/background.js +++ b/src/background.js @@ -8,6 +8,7 @@ var folderService = new FolderService(cryptoService, userService, apiService); var syncService = new SyncService(siteService, folderService, userService, apiService); var autofillService = new AutofillService(); var passwordGenerationService = new PasswordGenerationService(); +var appIdService = new AppIdService(); function buildContextMenu() { chrome.contextMenus.removeAll(); diff --git a/src/manifest.json b/src/manifest.json index e155421617..2bcde9e2d9 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -60,13 +60,9 @@ }, "permissions": [ "tabs", - "idle", - "notifications", "contextMenus", "storage", "unlimitedStorage", - "webRequest", - "webRequestBlocking", "http://*/*", "https://*/*" ], diff --git a/src/popup/app/services/backgroundService.js b/src/popup/app/services/backgroundService.js index 2be6403dc2..872f15bd31 100644 --- a/src/popup/app/services/backgroundService.js +++ b/src/popup/app/services/backgroundService.js @@ -33,4 +33,7 @@ }) .factory('utilsService', function () { return chrome.extension.getBackgroundPage().utilsService; + }) + .factory('appIdService', function () { + return chrome.extension.getBackgroundPage().appIdService; }); diff --git a/src/services/appIdService.js b/src/services/appIdService.js new file mode 100644 index 0000000000..11dd54e593 --- /dev/null +++ b/src/services/appIdService.js @@ -0,0 +1,44 @@ +function AppIdService() { + initAppIdService(); +}; + +function initAppIdService() { + AppIdService.prototype.getAppId = function (callback) { + if (!callback || typeof callback !== 'function') { + throw 'callback function required'; + } + + makeAndGetAppId('appId'); + }; + + AppIdService.prototype.getAnonymousAppId = function (callback) { + if (!callback || typeof callback !== 'function') { + throw 'callback function required'; + } + + makeAndGetAppId('anonymousAppId'); + }; + + function makeAndGetAppId(key) { + chrome.storage.local.get(key, function (obj) { + if (obj && obj[key]) { + callback(obj[key]); + return; + } + + var setObj = {}; + setObj[key] = newGuid(); + chrome.storage.local.set(setObj, function () { + callback(setObj[key]); + }); + }); + } + + // ref: http://stackoverflow.com/a/2117523/1090359 + function newGuid() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + } +};