Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: chrome/browser/resources/google_now/utility.js

Issue 21235008: Authentication Manager for Google Now (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@GeoSM-Diag
Patch Set: Fixes Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/google_now/background_unittest.gtestjs ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/google_now/utility.js
diff --git a/chrome/browser/resources/google_now/utility.js b/chrome/browser/resources/google_now/utility.js
index 309ee57e0f2daf1c5c30b3c4f013cdb291d15886..5632315d7704e8922aac9910de103e882ecdb4dc 100644
--- a/chrome/browser/resources/google_now/utility.js
+++ b/chrome/browser/resources/google_now/utility.js
@@ -413,3 +413,84 @@ function buildAttemptManager(
};
}
+// TODO(robliao): Ideally, the authentication watcher infrastructure
+// below would be an API change to chrome.identity.
+// When this happens, remove the code below.
+
+/**
+ * Wraps chrome.identity to provide limited listening support for
+ * the sign in state by polling periodically for the auth token.
+ * @return {Object} The Authentication Manager interface.
+ */
+function buildAuthenticationManager() {
+ var alarmName = 'sign-in-alarm';
+
+ /**
+ * Determines if the user is signed in and provides a token if signed in.
+ * @param {function(string=)} callback Called on completion.
+ * If the user is signed in, the string contains the token.
+ */
+ function isSignedIn(callback) {
+ chrome.identity.getAuthToken({interactive: false}, function(token) {
+ token = chrome.runtime.lastError ? undefined : token;
+ callback(token);
+ checkAndNotifyListeners(!!token);
+ });
+ }
+
+ /**
+ * Removes the specified cached token.
+ * @param {string} token Authentication Token to remove from the cache.
+ * @param {function} onSuccess Called on completion.
+ */
+ function removeToken(token, onSuccess) {
+ chrome.identity.removeCachedAuthToken({token: token}, function() {
+ // Removing the token from the cache will change the sign in state.
+ // Repoll now to check the state and notify listeners.
+ // This also lets Chrome now about a possible problem with the token.
+ isSignedIn(function() {});
+ onSuccess();
+ });
+ }
+
+ var listeners = [];
+
+ /**
+ * Registers a listener that gets called back when the signed in state
+ * is found to be changed.
+ * @param {function} callback Called when the answer to isSignedIn changes.
+ */
+ function addListener(callback) {
+ listeners.push(callback);
+ }
+
+ // Tracks the last answer of isSignedIn. checkAndNotifyListeners will not
+ // notify the listeners if this is null because technically, no sign in
+ // state change occurred.
+ var lastReturnedSignedInState = null;
+
+ function checkAndNotifyListeners(currentSignedInState) {
+ if ((lastReturnedSignedInState !== currentSignedInState) &&
+ (lastReturnedSignedInState !== null)) {
+ for (var listenerIndex in listeners) {
+ listeners[listenerIndex]();
+ }
+ }
+ lastReturnedSignedInState = currentSignedInState;
+ }
+
+ chrome.alarms.onAlarm.addListener(function(alarm) {
+ if (alarm.name == alarmName)
+ isSignedIn(function() {});
+ });
+
+ // Poll for the sign in state every hour.
+ // One hour is just an arbitrary amount of time chosen.
+ chrome.alarms.create(alarmName, {periodInMinutes: 60});
+
+ return {
+ addListener: addListener,
+ isSignedIn: isSignedIn,
+ removeToken: removeToken
+ };
+}
« no previous file with comments | « chrome/browser/resources/google_now/background_unittest.gtestjs ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698