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

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

Issue 37083004: Start/Stop Cards Polling Depending on Notification Center State (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: CR Feedback Created 7 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/resources/google_now/background_test_util.js » ('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 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 return false; 146 return false;
147 } 147 }
148 148
149 var tasks = buildTaskManager(areTasksConflicting); 149 var tasks = buildTaskManager(areTasksConflicting);
150 150
151 // Add error processing to API calls. 151 // Add error processing to API calls.
152 wrapper.instrumentChromeApiFunction('location.onLocationUpdate.addListener', 0); 152 wrapper.instrumentChromeApiFunction('location.onLocationUpdate.addListener', 0);
153 wrapper.instrumentChromeApiFunction('metricsPrivate.getVariationParams', 1); 153 wrapper.instrumentChromeApiFunction('metricsPrivate.getVariationParams', 1);
154 wrapper.instrumentChromeApiFunction('notifications.clear', 1); 154 wrapper.instrumentChromeApiFunction('notifications.clear', 1);
155 wrapper.instrumentChromeApiFunction('notifications.create', 2); 155 wrapper.instrumentChromeApiFunction('notifications.create', 2);
156 wrapper.instrumentChromeApiFunction('notifications.getPermissionLevel', 0);
156 wrapper.instrumentChromeApiFunction('notifications.update', 2); 157 wrapper.instrumentChromeApiFunction('notifications.update', 2);
157 wrapper.instrumentChromeApiFunction('notifications.getAll', 0); 158 wrapper.instrumentChromeApiFunction('notifications.getAll', 0);
158 wrapper.instrumentChromeApiFunction( 159 wrapper.instrumentChromeApiFunction(
159 'notifications.onButtonClicked.addListener', 0); 160 'notifications.onButtonClicked.addListener', 0);
160 wrapper.instrumentChromeApiFunction('notifications.onClicked.addListener', 0); 161 wrapper.instrumentChromeApiFunction('notifications.onClicked.addListener', 0);
161 wrapper.instrumentChromeApiFunction('notifications.onClosed.addListener', 0); 162 wrapper.instrumentChromeApiFunction('notifications.onClosed.addListener', 0);
162 wrapper.instrumentChromeApiFunction( 163 wrapper.instrumentChromeApiFunction(
164 'notifications.onPermissionLevelChanged.addListener', 0);
165 wrapper.instrumentChromeApiFunction(
163 'preferencesPrivate.googleGeolocationAccessEnabled.get', 166 'preferencesPrivate.googleGeolocationAccessEnabled.get',
164 1); 167 1);
165 wrapper.instrumentChromeApiFunction( 168 wrapper.instrumentChromeApiFunction(
166 'preferencesPrivate.googleGeolocationAccessEnabled.onChange.addListener', 169 'preferencesPrivate.googleGeolocationAccessEnabled.onChange.addListener',
167 0); 170 0);
168 wrapper.instrumentChromeApiFunction('permissions.contains', 1); 171 wrapper.instrumentChromeApiFunction('permissions.contains', 1);
169 wrapper.instrumentChromeApiFunction('pushMessaging.onMessage.addListener', 0); 172 wrapper.instrumentChromeApiFunction('pushMessaging.onMessage.addListener', 0);
170 wrapper.instrumentChromeApiFunction('runtime.onInstalled.addListener', 0); 173 wrapper.instrumentChromeApiFunction('runtime.onInstalled.addListener', 0);
171 wrapper.instrumentChromeApiFunction('runtime.onStartup.addListener', 0); 174 wrapper.instrumentChromeApiFunction('runtime.onStartup.addListener', 0);
172 wrapper.instrumentChromeApiFunction('tabs.create', 1); 175 wrapper.instrumentChromeApiFunction('tabs.create', 1);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 function(items) { 269 function(items) {
267 console.log('showNotificationCards-get ' + 270 console.log('showNotificationCards-get ' +
268 JSON.stringify(items)); 271 JSON.stringify(items));
269 items = items || {}; 272 items = items || {};
270 items.notificationsData = items.notificationsData || {}; 273 items.notificationsData = items.notificationsData || {};
271 items.recentDismissals = items.recentDismissals || {}; 274 items.recentDismissals = items.recentDismissals || {};
272 275
273 instrumented.notifications.getAll(function(notifications) { 276 instrumented.notifications.getAll(function(notifications) {
274 console.log('showNotificationCards-getAll ' + 277 console.log('showNotificationCards-getAll ' +
275 JSON.stringify(notifications)); 278 JSON.stringify(notifications));
276 // TODO(vadimt): Figure out what to do when notifications are
277 // disabled for our extension.
278 notifications = notifications || {}; 279 notifications = notifications || {};
279 280
280 // Build a set of non-expired recent dismissals. It will be used for 281 // Build a set of non-expired recent dismissals. It will be used for
281 // client-side filtering of cards. 282 // client-side filtering of cards.
282 var updatedRecentDismissals = {}; 283 var updatedRecentDismissals = {};
283 var currentTimeMs = Date.now(); 284 var currentTimeMs = Date.now();
284 for (var chromeNotificationId in items.recentDismissals) { 285 for (var chromeNotificationId in items.recentDismissals) {
285 if (currentTimeMs - items.recentDismissals[chromeNotificationId] < 286 if (currentTimeMs - items.recentDismissals[chromeNotificationId] <
286 DISMISS_RETENTION_TIME_MS) { 287 DISMISS_RETENTION_TIME_MS) {
287 updatedRecentDismissals[chromeNotificationId] = 288 updatedRecentDismissals[chromeNotificationId] =
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after
913 } 914 }
914 915
915 /** 916 /**
916 * Does the actual work of deciding what Google Now should do 917 * Does the actual work of deciding what Google Now should do
917 * based off of the current state of Chrome. 918 * based off of the current state of Chrome.
918 * @param {boolean} signedIn true if the user is signed in. 919 * @param {boolean} signedIn true if the user is signed in.
919 * @param {boolean} geolocationEnabled true if 920 * @param {boolean} geolocationEnabled true if
920 * the geolocation option is enabled. 921 * the geolocation option is enabled.
921 * @param {boolean} enableBackground true if 922 * @param {boolean} enableBackground true if
922 * the background permission should be requested. 923 * the background permission should be requested.
924 * @param {boolean} notificationEnabled true if
925 * Google Now for Chrome is allowed to show notifications.
923 */ 926 */
924 function updateRunningState( 927 function updateRunningState(
925 signedIn, 928 signedIn,
926 geolocationEnabled, 929 geolocationEnabled,
927 enableBackground) { 930 enableBackground,
931 notificationEnabled) {
928 console.log( 932 console.log(
929 'State Update signedIn=' + signedIn + ' ' + 933 'State Update signedIn=' + signedIn + ' ' +
930 'geolocationEnabled=' + geolocationEnabled); 934 'geolocationEnabled=' + geolocationEnabled + ' ' +
935 'enableBackground=' + enableBackground + ' ' +
936 'notificationEnabled=' + notificationEnabled);
931 937
932 // TODO(vadimt): Remove this line once state machine design is finalized. 938 // TODO(vadimt): Remove this line once state machine design is finalized.
933 geolocationEnabled = true; 939 geolocationEnabled = true;
934 940
935 var shouldPollCards = false; 941 var shouldPollCards = false;
936 var shouldSetBackground = false; 942 var shouldSetBackground = false;
937 943
938 if (signedIn) { 944 if (signedIn && notificationEnabled) {
939 if (geolocationEnabled) { 945 if (geolocationEnabled) {
940 if (enableBackground) 946 if (enableBackground)
941 shouldSetBackground = true; 947 shouldSetBackground = true;
942 948
943 shouldPollCards = true; 949 shouldPollCards = true;
944 } 950 }
945 } else { 951 } else {
946 recordEvent(GoogleNowEvent.STOPPED); 952 recordEvent(GoogleNowEvent.STOPPED);
947 } 953 }
948 954
(...skipping 11 matching lines...) Expand all
960 */ 966 */
961 function onStateChange() { 967 function onStateChange() {
962 tasks.add(STATE_CHANGED_TASK_NAME, function() { 968 tasks.add(STATE_CHANGED_TASK_NAME, function() {
963 authenticationManager.isSignedIn(function(token) { 969 authenticationManager.isSignedIn(function(token) {
964 var signedIn = !!token; 970 var signedIn = !!token;
965 instrumented.metricsPrivate.getVariationParams( 971 instrumented.metricsPrivate.getVariationParams(
966 'GoogleNow', 972 'GoogleNow',
967 function(response) { 973 function(response) {
968 var enableBackground = 974 var enableBackground =
969 (!response || (response.enableBackground != 'false')); 975 (!response || (response.enableBackground != 'false'));
970 instrumented. 976 instrumented.notifications.getPermissionLevel(function(level) {
977 var notificationEnabled = (level == 'granted');
978 instrumented.
971 preferencesPrivate. 979 preferencesPrivate.
972 googleGeolocationAccessEnabled. 980 googleGeolocationAccessEnabled.
973 get({}, function(prefValue) { 981 get({}, function(prefValue) {
974 var geolocationEnabled = !!prefValue.value; 982 var geolocationEnabled = !!prefValue.value;
975 updateRunningState( 983 updateRunningState(
976 signedIn, 984 signedIn,
977 geolocationEnabled, 985 geolocationEnabled,
978 enableBackground); 986 enableBackground,
987 notificationEnabled);
979 }); 988 });
989 });
980 }); 990 });
981 }); 991 });
982 }); 992 });
983 } 993 }
984 994
985 instrumented.runtime.onInstalled.addListener(function(details) { 995 instrumented.runtime.onInstalled.addListener(function(details) {
986 console.log('onInstalled ' + JSON.stringify(details)); 996 console.log('onInstalled ' + JSON.stringify(details));
987 if (details.reason != 'chrome_update') { 997 if (details.reason != 'chrome_update') {
988 initialize(); 998 initialize();
989 } 999 }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1037 'GoogleNow.ButtonClicked' + buttonIndex); 1047 'GoogleNow.ButtonClicked' + buttonIndex);
1038 onNotificationClicked(chromeNotificationId, function(actionUrls) { 1048 onNotificationClicked(chromeNotificationId, function(actionUrls) {
1039 var url = actionUrls.buttonUrls[buttonIndex]; 1049 var url = actionUrls.buttonUrls[buttonIndex];
1040 verify(url, 'onButtonClicked: no url for a button'); 1050 verify(url, 'onButtonClicked: no url for a button');
1041 return url; 1051 return url;
1042 }); 1052 });
1043 }); 1053 });
1044 1054
1045 instrumented.notifications.onClosed.addListener(onNotificationClosed); 1055 instrumented.notifications.onClosed.addListener(onNotificationClosed);
1046 1056
1057 instrumented.notifications.onPermissionLevelChanged.addListener(
1058 function(permissionLevel) {
1059 console.log('Notifications permissionLevel Change');
1060 onStateChange();
1061 });
1062
1047 instrumented.location.onLocationUpdate.addListener(function(position) { 1063 instrumented.location.onLocationUpdate.addListener(function(position) {
1048 recordEvent(GoogleNowEvent.LOCATION_UPDATE); 1064 recordEvent(GoogleNowEvent.LOCATION_UPDATE);
1049 updateNotificationsCards(position); 1065 updateNotificationsCards(position);
1050 }); 1066 });
1051 1067
1052 instrumented.pushMessaging.onMessage.addListener(function(message) { 1068 instrumented.pushMessaging.onMessage.addListener(function(message) {
1053 // message.payload will be '' when the extension first starts. 1069 // message.payload will be '' when the extension first starts.
1054 // Each time after signing in, we'll get latest payload for all channels. 1070 // Each time after signing in, we'll get latest payload for all channels.
1055 // So, we need to poll the server only when the payload is non-empty and has 1071 // So, we need to poll the server only when the payload is non-empty and has
1056 // changed. 1072 // changed.
1057 console.log('pushMessaging.onMessage ' + JSON.stringify(message)); 1073 console.log('pushMessaging.onMessage ' + JSON.stringify(message));
1058 if (message.subchannelId == SUBCHANNEL_ID_POLL_NOW && message.payload) { 1074 if (message.subchannelId == SUBCHANNEL_ID_POLL_NOW && message.payload) {
1059 tasks.add(ON_PUSH_MESSAGE_START_TASK_NAME, function() { 1075 tasks.add(ON_PUSH_MESSAGE_START_TASK_NAME, function() {
1060 instrumented.storage.local.get('lastPollNowPayload', function(items) { 1076 instrumented.storage.local.get('lastPollNowPayload', function(items) {
1061 if (items && items.lastPollNowPayload != message.payload) { 1077 if (items && items.lastPollNowPayload != message.payload) {
1062 chrome.storage.local.set({lastPollNowPayload: message.payload}); 1078 chrome.storage.local.set({lastPollNowPayload: message.payload});
1063 1079
1064 updateCardsAttempts.isRunning(function(running) { 1080 updateCardsAttempts.isRunning(function(running) {
1065 if (running) 1081 if (running)
1066 requestNotificationGroups([]); 1082 requestNotificationGroups([]);
1067 }); 1083 });
1068 } 1084 }
1069 }); 1085 });
1070 }); 1086 });
1071 } 1087 }
1072 }); 1088 });
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/google_now/background_test_util.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698