Index: chrome/browser/resources/google_now/background.js |
diff --git a/chrome/browser/resources/google_now/background.js b/chrome/browser/resources/google_now/background.js |
index aa68162313ed48f53b2c64666c6a21d938af991c..53532216e68a3d2f627fca58c3aca16f134244f2 100644 |
--- a/chrome/browser/resources/google_now/background.js |
+++ b/chrome/browser/resources/google_now/background.js |
@@ -128,13 +128,16 @@ tasks.instrumentApiFunction( |
chrome.notifications.onButtonClicked, 'addListener', 0); |
tasks.instrumentApiFunction(chrome.notifications.onClicked, 'addListener', 0); |
tasks.instrumentApiFunction(chrome.notifications.onClosed, 'addListener', 0); |
+tasks.instrumentApiFunction(chrome.permissions, 'contains', 1); |
+tasks.instrumentApiFunction(chrome.permissions, 'remove', 1); |
+tasks.instrumentApiFunction(chrome.permissions, 'request', 1); |
+tasks.instrumentApiFunction(chrome.runtime.onInstalled, 'addListener', 0); |
+tasks.instrumentApiFunction(chrome.runtime.onStartup, 'addListener', 0); |
+tasks.instrumentApiFunction(chrome.tabs, 'create', 1); |
vadimt
2013/08/03 02:07:53
Please sync, build and run Chrome. Run you functio
|
tasks.instrumentApiFunction( |
googleGeolocationAccessEnabledPref.onChange, |
'addListener', |
0); |
-tasks.instrumentApiFunction(chrome.runtime.onInstalled, 'addListener', 0); |
-tasks.instrumentApiFunction(chrome.runtime.onStartup, 'addListener', 0); |
-tasks.instrumentApiFunction(chrome.tabs, 'create', 1); |
tasks.instrumentApiFunction(storage, 'get', 1); |
var updateCardsAttempts = buildAttemptManager( |
@@ -709,6 +712,9 @@ function setShouldPollCards(shouldPollCardsRequest, onSuccess) { |
startPollingCards(); |
else |
stopPollingCards(); |
+ } else { |
+ console.log( |
+ 'Action Ignored setShouldPollCards=' + shouldPollCardsRequest); |
} |
onSuccess(); |
}); |
@@ -734,6 +740,8 @@ function setToastVisible(visibleRequest, onSuccess) { |
showWelcomeToast(); |
else |
hideWelcomeToast(); |
+ } else { |
+ console.log('Action Ignored setToastVisible=' + visibleRequest); |
} |
onSuccess(); |
@@ -741,6 +749,36 @@ function setToastVisible(visibleRequest, onSuccess) { |
} |
/** |
+ * Enables or disables the Google Now background permission. |
+ * @param {boolean} backgroundEnable true to run in the background. |
+ * false to not run in the background. |
+ * @param {function} onSuccess Called on completion. |
+ */ |
+function setBackgroundEnable(backgroundEnable, onSuccess) { |
+ chrome.permissions.contains({permissions: ['background']}, |
+ function(hasPermission) { |
+ if (backgroundEnable != hasPermission) { |
+ console.log('Action Taken setBackgroundEnable=' + backgroundEnable); |
+ if (backgroundEnable) |
+ chrome.permissions.request( |
+ {permissions: ['background']}, |
+ function() { |
+ onSuccess(); |
+ }); |
+ else |
+ chrome.permissions.remove( |
+ {permissions: ['background']}, |
+ function() { |
+ onSuccess(); |
+ }); |
+ } else { |
+ console.log('Action Ignored setBackgroundEnable=' + backgroundEnable); |
+ onSuccess(); |
+ } |
+ }); |
+} |
+ |
+/** |
* Does the actual work of deciding what Google Now should do |
* based off of the current state of Chrome. |
* @param {boolean} signedIn true if the user is signed in. |
@@ -748,23 +786,28 @@ function setToastVisible(visibleRequest, onSuccess) { |
* the geolocation option is enabled. |
* @param {boolean} userRespondedToToast true if |
* the user has responded to the toast. |
+ * @param {boolean} enableExperiment true if |
+ * this extension should be running. |
* @param {function()} callback Call this function on completion. |
*/ |
function updateRunningState( |
signedIn, |
geolocationEnabled, |
userRespondedToToast, |
+ enableExperiment, |
callback) { |
console.log( |
'State Update signedIn=' + signedIn + ' ' + |
'geolocationEnabled=' + geolocationEnabled + ' ' + |
- 'userRespondedToToast=' + userRespondedToToast); |
+ 'userRespondedToToast=' + userRespondedToToast + ' ' + |
+ 'enableExperiment=' + enableExperiment); |
var shouldSetToastVisible = false; |
var shouldPollCards = false; |
+ var shouldSetBackground = false; |
- if (signedIn) { |
+ if (signedIn && enableExperiment) { |
if (geolocationEnabled) { |
if (!userRespondedToToast) { |
// If the user enabled geolocation independently of Google Now, |
@@ -774,6 +817,7 @@ function updateRunningState( |
} |
shouldPollCards = true; |
+ shouldSetBackground = true; |
} else { |
if (userRespondedToToast) { |
recordEvent(GoogleNowEvent.USER_SUPPRESSED); |
@@ -786,11 +830,14 @@ function updateRunningState( |
} |
console.log( |
- 'Requested Actions setToastVisible=' + shouldSetToastVisible + ' ' + |
+ 'Requested Actions shouldSetBackground=' + shouldSetBackground + ' ' + |
+ 'setToastVisible=' + shouldSetToastVisible + ' ' + |
'setShouldPollCards=' + shouldPollCards); |
- setToastVisible(shouldSetToastVisible, function() { |
- setShouldPollCards(shouldPollCards, callback); |
+ setBackgroundEnable(shouldSetBackground, function() { |
+ setToastVisible(shouldSetToastVisible, function() { |
+ setShouldPollCards(shouldPollCards, callback); |
+ }); |
}); |
} |
@@ -803,19 +850,27 @@ function onStateChange() { |
tasks.debugSetStepName('onStateChange-isSignedIn'); |
authenticationManager.isSignedIn(function(token) { |
var signedIn = !!token && !!NOTIFICATION_CARDS_URL; |
- tasks.debugSetStepName( |
- 'onStateChange-get-googleGeolocationAccessEnabledPref'); |
- googleGeolocationAccessEnabledPref.get({}, function(prefValue) { |
- var geolocationEnabled = !!prefValue.value; |
+ chrome.metricsPrivate.getFieldTrial('GoogleNow', function(response) { |
+ // '' means we were enabled via the flags, but |
+ // the experiment is not running. |
+ var enableExperiment = (response == 'Enable' || |
vadimt
2013/08/03 02:07:53
You need to check for "EnableWithBackground", "Ena
|
+ (response == 'EnabledViaFlag') || |
+ (response == '')); |
tasks.debugSetStepName( |
- 'onStateChange-get-userRespondedToToast'); |
- storage.get('userRespondedToToast', function(items) { |
- var userRespondedToToast = !!items.userRespondedToToast; |
- updateRunningState( |
- signedIn, |
- geolocationEnabled, |
- userRespondedToToast, |
- callback); |
+ 'onStateChange-get-googleGeolocationAccessEnabledPref'); |
+ googleGeolocationAccessEnabledPref.get({}, function(prefValue) { |
+ var geolocationEnabled = !!prefValue.value; |
+ tasks.debugSetStepName( |
+ 'onStateChange-get-userRespondedToToast'); |
+ storage.get('userRespondedToToast', function(items) { |
+ var userRespondedToToast = !!items.userRespondedToToast; |
+ updateRunningState( |
+ signedIn, |
+ geolocationEnabled, |
+ userRespondedToToast, |
+ enableExperiment, |
+ callback); |
+ }); |
}); |
}); |
}); |