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

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

Issue 21985002: Add Finch Checks to the State Machine (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@SMLog
Patch Set: Make Strings Const Created 7 years, 4 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
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 893bfefc83e484e5ac8c5edb76ce8717f66d2fb6..fdeee8ca3b63bc48b0330017360cd6cc5836da9c 100644
--- a/chrome/browser/resources/google_now/background.js
+++ b/chrome/browser/resources/google_now/background.js
@@ -118,6 +118,7 @@ var tasks = buildTaskManager(areTasksConflicting);
// Add error processing to API calls.
tasks.instrumentChromeApiFunction('location.onLocationUpdate.addListener', 0);
+tasks.instrumentChromeApiFunction('metricsPrivate.getFieldTrial', 1);
tasks.instrumentChromeApiFunction('metricsPrivate.getVariationParams', 1);
tasks.instrumentChromeApiFunction('notifications.create', 2);
tasks.instrumentChromeApiFunction('notifications.update', 2);
@@ -133,6 +134,9 @@ tasks.instrumentChromeApiFunction(
tasks.instrumentChromeApiFunction(
'preferencesPrivate.googleGeolocationAccessEnabled.onChange.addListener',
0);
+tasks.instrumentChromeApiFunction('permissions.contains', 1);
+tasks.instrumentChromeApiFunction('permissions.remove', 1);
+tasks.instrumentChromeApiFunction('permissions.request', 1);
tasks.instrumentChromeApiFunction('runtime.onInstalled.addListener', 0);
tasks.instrumentChromeApiFunction('runtime.onStartup.addListener', 0);
tasks.instrumentChromeApiFunction('tabs.create', 1);
@@ -762,6 +766,36 @@ function setToastVisible(visibleRequest, callback) {
}
/**
+ * 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} callback Called on completion.
+ */
+function setBackgroundEnable(backgroundEnable, callback) {
+ instrumented.permissions.contains({permissions: ['background']},
+ function(hasPermission) {
+ if (backgroundEnable != hasPermission) {
+ console.log('Action Taken setBackgroundEnable=' + backgroundEnable);
+ if (backgroundEnable)
+ instrumented.permissions.request(
+ {permissions: ['background']},
+ function() {
+ callback();
+ });
+ else
+ instrumented.permissions.remove(
+ {permissions: ['background']},
+ function() {
+ callback();
+ });
+ } else {
+ console.log('Action Ignored setBackgroundEnable=' + backgroundEnable);
+ callback();
+ }
+ });
+}
+
+/**
* 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.
@@ -769,12 +803,15 @@ function setToastVisible(visibleRequest, callback) {
* the geolocation option is enabled.
* @param {boolean} userRespondedToToast true if
* the user has responded to the toast.
+ * @param {boolean} enableBackground true if
+ * the background permission should be requested.
* @param {function()} callback Call this function on completion.
*/
function updateRunningState(
signedIn,
geolocationEnabled,
userRespondedToToast,
+ enableBackground,
callback) {
console.log(
@@ -784,6 +821,7 @@ function updateRunningState(
var shouldSetToastVisible = false;
var shouldPollCards = false;
+ var shouldSetBackground = false;
if (signedIn) {
if (geolocationEnabled) {
@@ -794,6 +832,9 @@ function updateRunningState(
chrome.storage.local.set({userRespondedToToast: true});
}
+ if (enableBackground)
+ shouldSetBackground = true;
+
shouldPollCards = true;
} else {
if (userRespondedToToast) {
@@ -807,11 +848,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);
+ });
});
}
@@ -824,24 +868,31 @@ function onStateChange() {
tasks.debugSetStepName('onStateChange-isSignedIn');
authenticationManager.isSignedIn(function(token) {
var signedIn = !!token && !!NOTIFICATION_CARDS_URL;
- tasks.debugSetStepName(
- 'onStateChange-get-googleGeolocationAccessEnabledPref');
- instrumented.
- preferencesPrivate.
- googleGeolocationAccessEnabled.
- get({}, function(prefValue) {
- var geolocationEnabled = !!prefValue.value;
+ instrumented.metricsPrivate.getFieldTrial(
+ 'GoogleNow',
+ function(response) {
+ console.log('Experiment Status: ' + response);
+ var enableBackground = (response != 'EnableWithoutBackground');
tasks.debugSetStepName(
- 'onStateChange-get-userRespondedToToast');
- instrumented.storage.local.get(
- 'userRespondedToToast',
- function(items) {
- var userRespondedToToast = !!items.userRespondedToToast;
- updateRunningState(
- signedIn,
- geolocationEnabled,
- userRespondedToToast,
- callback);
+ 'onStateChange-get-googleGeolocationAccessEnabledPref');
+ instrumented.
+ preferencesPrivate.
+ googleGeolocationAccessEnabled.
+ get({}, function(prefValue) {
+ var geolocationEnabled = !!prefValue.value;
+ tasks.debugSetStepName(
+ 'onStateChange-get-userRespondedToToast');
+ instrumented.storage.local.get(
+ 'userRespondedToToast',
+ function(items) {
+ var userRespondedToToast = !!items.userRespondedToToast;
+ updateRunningState(
+ signedIn,
+ geolocationEnabled,
+ userRespondedToToast,
+ enableBackground,
+ callback);
+ });
});
});
});
« no previous file with comments | « chrome/browser/extensions/component_loader.cc ('k') | chrome/browser/resources/google_now/background_unittest.gtestjs » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698