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

Side by Side Diff: chrome/browser/resources/google_now/background.js

Issue 55123002: Requesting background permission only when user is opted in to GN (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/resources/google_now/background_unittest.gtestjs » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 'use strict'; 5 'use strict';
6 6
7 /** 7 /**
8 * @fileoverview The event page for Google Now for Chrome implementation. 8 * @fileoverview The event page for Google Now for Chrome implementation.
9 * The Google Now event page gets Google Now cards from the server and shows 9 * The Google Now event page gets Google Now cards from the server and shows
10 * them as Chrome notifications. 10 * them as Chrome notifications.
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 */ 478 */
479 function parseAndShowNotificationCards(response) { 479 function parseAndShowNotificationCards(response) {
480 console.log('parseAndShowNotificationCards ' + response); 480 console.log('parseAndShowNotificationCards ' + response);
481 var parsedResponse = JSON.parse(response); 481 var parsedResponse = JSON.parse(response);
482 482
483 if (parsedResponse.googleNowDisabled) { 483 if (parsedResponse.googleNowDisabled) {
484 chrome.storage.local.set({googleNowEnabled: false}); 484 chrome.storage.local.set({googleNowEnabled: false});
485 // TODO(vadimt): Remove the line below once the server stops sending groups 485 // TODO(vadimt): Remove the line below once the server stops sending groups
486 // with 'googleNowDisabled' responses. 486 // with 'googleNowDisabled' responses.
487 parsedResponse.groups = {}; 487 parsedResponse.groups = {};
488 onStateChange();
robliao 2013/10/31 18:29:41 Comment that if we make it here, Google Now was pr
vadimt 2013/10/31 20:14:08 Done.
488 } 489 }
489 490
490 var receivedGroups = parsedResponse.groups; 491 var receivedGroups = parsedResponse.groups;
491 492
492 // Populate groups with corresponding cards. 493 // Populate groups with corresponding cards.
493 if (parsedResponse.notifications) { 494 if (parsedResponse.notifications) {
494 for (var i = 0; i != parsedResponse.notifications.length; ++i) { 495 for (var i = 0; i != parsedResponse.notifications.length; ++i) {
495 var card = parsedResponse.notifications[i]; 496 var card = parsedResponse.notifications[i];
496 var group = receivedGroups[card.groupName]; 497 var group = receivedGroups[card.groupName];
497 group.cards = group.cards || []; 498 group.cards = group.cards || [];
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 var request = buildServerRequest('GET', 'settings/optin'); 598 var request = buildServerRequest('GET', 'settings/optin');
598 599
599 request.onloadend = function(event) { 600 request.onloadend = function(event) {
600 console.log( 601 console.log(
601 'requestOptedIn-onloadend ' + request.status + ' ' + request.response); 602 'requestOptedIn-onloadend ' + request.status + ' ' + request.response);
602 if (request.status == HTTP_OK) { 603 if (request.status == HTTP_OK) {
603 var parsedResponse = JSON.parse(request.response); 604 var parsedResponse = JSON.parse(request.response);
604 if (parsedResponse.value) { 605 if (parsedResponse.value) {
605 chrome.storage.local.set({googleNowEnabled: true}); 606 chrome.storage.local.set({googleNowEnabled: true});
606 optedInCallback(); 607 optedInCallback();
608 onStateChange();
robliao 2013/10/31 18:29:41 Same here. If we're here, Google Now was previousl
vadimt 2013/10/31 20:14:08 Done.
607 } else { 609 } else {
608 scheduleNextPoll({}); 610 scheduleNextPoll({});
609 } 611 }
610 } 612 }
611 }; 613 };
612 614
613 setAuthorization(request, function(success) { 615 setAuthorization(request, function(success) {
614 if (success) 616 if (success)
615 request.send(); 617 request.send();
616 }); 618 });
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 updateCardsAttempts.start(MAXIMUM_POLLING_PERIOD_SECONDS); 920 updateCardsAttempts.start(MAXIMUM_POLLING_PERIOD_SECONDS);
919 921
920 requestLocation(); 922 requestLocation();
921 } 923 }
922 924
923 /** 925 /**
924 * Stops all machinery in the polling system. 926 * Stops all machinery in the polling system.
925 */ 927 */
926 function stopPollingCards() { 928 function stopPollingCards() {
927 stopRequestLocation(); 929 stopRequestLocation();
928
929 updateCardsAttempts.stop(); 930 updateCardsAttempts.stop();
930
931 removeAllCards(); 931 removeAllCards();
932 chrome.storage.local.set({googleNowEnabled: false});
robliao 2013/10/31 18:29:41 Semantically, this isn't necessarily correct if th
vadimt 2013/10/31 20:14:08 When the user checks us again in NC, we should sta
robliao 2013/10/31 23:05:01 This would be an excellent place for a comment. On
vadimt 2013/11/01 00:49:47 Done.
932 } 933 }
933 934
934 /** 935 /**
935 * Initializes the event page on install or on browser startup. 936 * Initializes the event page on install or on browser startup.
936 */ 937 */
937 function initialize() { 938 function initialize() {
938 recordEvent(GoogleNowEvent.EXTENSION_START); 939 recordEvent(GoogleNowEvent.EXTENSION_START);
939 onStateChange(); 940 onStateChange();
940 } 941 }
941 942
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 } 979 }
979 }); 980 });
980 } 981 }
981 982
982 /** 983 /**
983 * Does the actual work of deciding what Google Now should do 984 * Does the actual work of deciding what Google Now should do
984 * based off of the current state of Chrome. 985 * based off of the current state of Chrome.
985 * @param {boolean} signedIn true if the user is signed in. 986 * @param {boolean} signedIn true if the user is signed in.
986 * @param {boolean} geolocationEnabled true if 987 * @param {boolean} geolocationEnabled true if
987 * the geolocation option is enabled. 988 * the geolocation option is enabled.
988 * @param {boolean} enableBackground true if 989 * @param {boolean} canEnableBackground true if
989 * the background permission should be requested. 990 * the background permission can be requested.
990 * @param {boolean} notificationEnabled true if 991 * @param {boolean} notificationEnabled true if
991 * Google Now for Chrome is allowed to show notifications. 992 * Google Now for Chrome is allowed to show notifications.
993 * @param {boolean} googleNowEnabled true if
994 * the Google Now is enabled for the user.
992 */ 995 */
993 function updateRunningState( 996 function updateRunningState(
994 signedIn, 997 signedIn,
995 geolocationEnabled, 998 geolocationEnabled,
996 enableBackground, 999 canEnableBackground,
997 notificationEnabled) { 1000 notificationEnabled,
1001 googleNowEnabled) {
998 console.log( 1002 console.log(
999 'State Update signedIn=' + signedIn + ' ' + 1003 'State Update signedIn=' + signedIn + ' ' +
1000 'geolocationEnabled=' + geolocationEnabled + ' ' + 1004 'geolocationEnabled=' + geolocationEnabled + ' ' +
1001 'enableBackground=' + enableBackground + ' ' + 1005 'canEnableBackground=' + canEnableBackground + ' ' +
1002 'notificationEnabled=' + notificationEnabled); 1006 'notificationEnabled=' + notificationEnabled + ' ' +
1007 'googleNowEnabled=' + googleNowEnabled);
1003 1008
1004 // TODO(vadimt): Remove this line once state machine design is finalized. 1009 // TODO(vadimt): Remove this line once state machine design is finalized.
1005 geolocationEnabled = true; 1010 geolocationEnabled = true;
1006 1011
1007 var shouldPollCards = false; 1012 var shouldPollCards = false;
1008 var shouldSetBackground = false; 1013 var shouldSetBackground = false;
1009 1014
1010 if (signedIn && notificationEnabled) { 1015 if (signedIn && notificationEnabled) {
1011 if (geolocationEnabled) { 1016 if (geolocationEnabled) {
1012 if (enableBackground) 1017 if (canEnableBackground && googleNowEnabled)
1013 shouldSetBackground = true; 1018 shouldSetBackground = true;
1014 1019
1015 shouldPollCards = true; 1020 shouldPollCards = true;
1016 } 1021 }
1017 } else { 1022 } else {
1018 recordEvent(GoogleNowEvent.STOPPED); 1023 recordEvent(GoogleNowEvent.STOPPED);
1019 } 1024 }
1020 1025
1021 console.log( 1026 console.log(
1022 'Requested Actions shouldSetBackground=' + shouldSetBackground + ' ' + 1027 'Requested Actions shouldSetBackground=' + shouldSetBackground + ' ' +
1023 'setShouldPollCards=' + shouldPollCards); 1028 'setShouldPollCards=' + shouldPollCards);
1024 1029
1025 setBackgroundEnable(shouldSetBackground); 1030 setBackgroundEnable(shouldSetBackground);
1026 setShouldPollCards(shouldPollCards); 1031 setShouldPollCards(shouldPollCards);
1027 } 1032 }
1028 1033
1029 /** 1034 /**
1030 * Coordinates the behavior of Google Now for Chrome depending on 1035 * Coordinates the behavior of Google Now for Chrome depending on
1031 * Chrome and extension state. 1036 * Chrome and extension state.
1032 */ 1037 */
1033 function onStateChange() { 1038 function onStateChange() {
1034 tasks.add(STATE_CHANGED_TASK_NAME, function() { 1039 tasks.add(STATE_CHANGED_TASK_NAME, function() {
1035 authenticationManager.isSignedIn(function(token) { 1040 authenticationManager.isSignedIn(function(token) {
1036 var signedIn = !!token; 1041 var signedIn = !!token;
1037 instrumented.metricsPrivate.getVariationParams( 1042 instrumented.metricsPrivate.getVariationParams(
1038 'GoogleNow', 1043 'GoogleNow',
1039 function(response) { 1044 function(response) {
1040 var enableBackground = 1045 var canEnableBackground =
1041 (!response || (response.enableBackground != 'false')); 1046 (!response || (response.canEnableBackground != 'false'));
1042 instrumented.notifications.getPermissionLevel(function(level) { 1047 instrumented.notifications.getPermissionLevel(function(level) {
1043 var notificationEnabled = (level == 'granted'); 1048 var notificationEnabled = (level == 'granted');
1044 instrumented. 1049 instrumented.
1045 preferencesPrivate. 1050 preferencesPrivate.
1046 googleGeolocationAccessEnabled. 1051 googleGeolocationAccessEnabled.
1047 get({}, function(prefValue) { 1052 get({}, function(prefValue) {
1048 var geolocationEnabled = !!prefValue.value; 1053 var geolocationEnabled = !!prefValue.value;
1049 updateRunningState( 1054 instrumented.storage.local.get(
1050 signedIn, 1055 'googleNowEnabled',
1051 geolocationEnabled, 1056 function(items) {
1052 enableBackground, 1057 var googleNowEnabled =
1053 notificationEnabled); 1058 items && !!items.googleNowEnabled;
1059 updateRunningState(
1060 signedIn,
1061 geolocationEnabled,
1062 canEnableBackground,
1063 notificationEnabled,
1064 googleNowEnabled);
1065 });
1054 }); 1066 });
1055 }); 1067 });
1056 }); 1068 });
1057 }); 1069 });
1058 }); 1070 });
1059 } 1071 }
1060 1072
1061 instrumented.runtime.onInstalled.addListener(function(details) { 1073 instrumented.runtime.onInstalled.addListener(function(details) {
1062 console.log('onInstalled ' + JSON.stringify(details)); 1074 console.log('onInstalled ' + JSON.stringify(details));
1063 if (details.reason != 'chrome_update') { 1075 if (details.reason != 'chrome_update') {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
1163 lastPollNowPayloads: items.lastPollNowPayloads, 1175 lastPollNowPayloads: items.lastPollNowPayloads,
1164 notificationGroups: items.notificationGroups 1176 notificationGroups: items.notificationGroups
1165 }); 1177 });
1166 1178
1167 updateNotificationsCards(); 1179 updateNotificationsCards();
1168 } 1180 }
1169 }); 1181 });
1170 }); 1182 });
1171 } 1183 }
1172 }); 1184 });
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/google_now/background_unittest.gtestjs » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698