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

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

Issue 17894010: Receiving and sending dismissal parameters (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase, more comments. 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/resources/google_now/utility.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 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 ', ERROR=' + errorMessage); 267 ', ERROR=' + errorMessage);
268 } 268 }
269 }); 269 });
270 } catch (error) { 270 } catch (error) {
271 console.error('Error in notifications.update: ' + error); 271 console.error('Error in notifications.update: ' + error);
272 } 272 }
273 } 273 }
274 274
275 notificationsData[card.notificationId] = { 275 notificationsData[card.notificationId] = {
276 actionUrls: card.actionUrls, 276 actionUrls: card.actionUrls,
277 version: card.version 277 version: card.version,
278 dismissalParameters: card.dismissal
278 }; 279 };
279 } 280 }
280 281
281 /** 282 /**
282 * Parses JSON response from the notification server, show notifications and 283 * Parses JSON response from the notification server, show notifications and
283 * schedule next update. 284 * schedule next update.
284 * @param {string} response Server response. 285 * @param {string} response Server response.
285 * @param {function()} callback Completion callback. 286 * @param {function()} callback Completion callback.
286 */ 287 */
287 function parseAndShowNotificationCards(response, callback) { 288 function parseAndShowNotificationCards(response, callback) {
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 } 399 }
399 400
400 recordEvent(DiagnosticEvent.REQUEST_FOR_CARDS_TOTAL); 401 recordEvent(DiagnosticEvent.REQUEST_FOR_CARDS_TOTAL);
401 402
402 // TODO(vadimt): Should we use 'q' as the parameter name? 403 // TODO(vadimt): Should we use 'q' as the parameter name?
403 var requestParameters = 404 var requestParameters =
404 'q=' + position.coords.latitude + 405 'q=' + position.coords.latitude +
405 ',' + position.coords.longitude + 406 ',' + position.coords.longitude +
406 ',' + position.coords.accuracy; 407 ',' + position.coords.accuracy;
407 408
408 var request = buildServerRequest('notifications'); 409 var request = buildServerRequest('notifications',
410 'application/x-www-form-urlencoded');
409 411
410 request.onloadend = function(event) { 412 request.onloadend = function(event) {
411 console.log('requestNotificationCards-onloadend ' + request.status); 413 console.log('requestNotificationCards-onloadend ' + request.status);
412 if (request.status == HTTP_OK) { 414 if (request.status == HTTP_OK) {
413 recordEvent(DiagnosticEvent.REQUEST_FOR_CARDS_SUCCESS); 415 recordEvent(DiagnosticEvent.REQUEST_FOR_CARDS_SUCCESS);
414 parseAndShowNotificationCards(request.response, callback); 416 parseAndShowNotificationCards(request.response, callback);
415 } else { 417 } else {
416 callback(); 418 callback();
417 } 419 }
418 }; 420 };
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 }); 461 });
460 }); 462 });
461 }); 463 });
462 } 464 }
463 465
464 /** 466 /**
465 * Sends a server request to dismiss a card. 467 * Sends a server request to dismiss a card.
466 * @param {string} notificationId Unique identifier of the card. 468 * @param {string} notificationId Unique identifier of the card.
467 * @param {number} dismissalTimeMs Time of the user's dismissal of the card in 469 * @param {number} dismissalTimeMs Time of the user's dismissal of the card in
468 * milliseconds since epoch. 470 * milliseconds since epoch.
471 * @param {Object} dismissalParameters Dismissal parameters.
469 * @param {function(boolean)} callbackBoolean Completion callback with 'success' 472 * @param {function(boolean)} callbackBoolean Completion callback with 'success'
470 * parameter. 473 * parameter.
471 */ 474 */
472 function requestCardDismissal( 475 function requestCardDismissal(
473 notificationId, dismissalTimeMs, callbackBoolean) { 476 notificationId, dismissalTimeMs, dismissalParameters, callbackBoolean) {
474 console.log('requestDismissingCard ' + notificationId + ' from ' + 477 console.log('requestDismissingCard ' + notificationId + ' from ' +
475 NOTIFICATION_CARDS_URL); 478 NOTIFICATION_CARDS_URL);
476 recordEvent(DiagnosticEvent.DISMISS_REQUEST_TOTAL); 479 recordEvent(DiagnosticEvent.DISMISS_REQUEST_TOTAL);
477 // Send a dismiss request to the server. 480 var request = buildServerRequest('dismiss', 'application/json');
478 var requestParameters = 'id=' + notificationId +
479 '&dismissalAge=' + (Date.now() - dismissalTimeMs);
480 var request = buildServerRequest('dismiss');
481 request.onloadend = function(event) { 481 request.onloadend = function(event) {
482 console.log('requestDismissingCard-onloadend ' + request.status); 482 console.log('requestDismissingCard-onloadend ' + request.status);
483 if (request.status == HTTP_OK) 483 if (request.status == HTTP_OK)
484 recordEvent(DiagnosticEvent.DISMISS_REQUEST_SUCCESS); 484 recordEvent(DiagnosticEvent.DISMISS_REQUEST_SUCCESS);
485 485
486 callbackBoolean(request.status == HTTP_OK); 486 callbackBoolean(request.status == HTTP_OK);
487 }; 487 };
488 488
489 setAuthorization(request, function(success) { 489 setAuthorization(request, function(success) {
490 if (success) { 490 if (success) {
491 tasks.debugSetStepName('requestCardDismissal-send-request'); 491 tasks.debugSetStepName('requestCardDismissal-send-request');
492 request.send(requestParameters); 492
493 var dismissalObject = {
494 id: notificationId,
495 age: Date.now() - dismissalTimeMs,
496 dismissal: dismissalParameters
497 };
498 request.send(JSON.stringify(dismissalObject));
493 } else { 499 } else {
494 callbackBoolean(false); 500 callbackBoolean(false);
495 } 501 }
496 }); 502 });
497 } 503 }
498 504
499 /** 505 /**
500 * Tries to send dismiss requests for all pending dismissals. 506 * Tries to send dismiss requests for all pending dismissals.
501 * @param {function(boolean)} callbackBoolean Completion callback with 'success' 507 * @param {function(boolean)} callbackBoolean Completion callback with 'success'
502 * parameter. Success means that no pending dismissals are left. 508 * parameter. Success means that no pending dismissals are left.
(...skipping 21 matching lines...) Expand all
524 function doProcessDismissals() { 530 function doProcessDismissals() {
525 if (items.pendingDismissals.length == 0) { 531 if (items.pendingDismissals.length == 0) {
526 dismissalAttempts.stop(); 532 dismissalAttempts.stop();
527 onFinish(true); 533 onFinish(true);
528 return; 534 return;
529 } 535 }
530 536
531 // Send dismissal for the first card, and if successful, repeat 537 // Send dismissal for the first card, and if successful, repeat
532 // recursively with the rest. 538 // recursively with the rest.
533 var dismissal = items.pendingDismissals[0]; 539 var dismissal = items.pendingDismissals[0];
534 requestCardDismissal( 540 requestCardDismissal(dismissal.notificationId,
535 dismissal.notificationId, dismissal.time, function(success) { 541 dismissal.time,
542 dismissal.parameters,
543 function(success) {
arv (Not doing code reviews) 2013/07/10 22:19:57 strange indentation
vadimt 2013/07/10 22:47:18 Done.
536 if (success) { 544 if (success) {
537 dismissalsChanged = true; 545 dismissalsChanged = true;
538 items.pendingDismissals.splice(0, 1); 546 items.pendingDismissals.splice(0, 1);
539 items.recentDismissals[dismissal.notificationId] = Date.now(); 547 items.recentDismissals[dismissal.notificationId] = Date.now();
540 doProcessDismissals(); 548 doProcessDismissals();
541 } else { 549 } else {
542 onFinish(false); 550 onFinish(false);
543 } 551 }
544 }); 552 });
545 } 553 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 646
639 tasks.add(DISMISS_CARD_TASK_NAME, function(callback) { 647 tasks.add(DISMISS_CARD_TASK_NAME, function(callback) {
640 dismissalAttempts.start(); 648 dismissalAttempts.start();
641 649
642 // Deleting the notification in case it was re-added while this task was 650 // Deleting the notification in case it was re-added while this task was
643 // scheduled, waiting for execution. 651 // scheduled, waiting for execution.
644 chrome.notifications.clear( 652 chrome.notifications.clear(
645 notificationId, 653 notificationId,
646 function() {}); 654 function() {});
647 655
648 tasks.debugSetStepName('onNotificationClosed-get-pendingDismissals'); 656 tasks.debugSetStepName('onNotificationClosed-storage-get');
649 storage.get('pendingDismissals', function(items) { 657 storage.get(['pendingDismissals', 'notificationsData'], function(items) {
650 items.pendingDismissals = items.pendingDismissals || []; 658 items.pendingDismissals = items.pendingDismissals || [];
659 items.notificationsData = items.notificationsData || {};
660
661 var notificationData = items.notificationsData[notificationId];
651 662
652 var dismissal = { 663 var dismissal = {
653 notificationId: notificationId, 664 notificationId: notificationId,
654 time: Date.now() 665 time: Date.now(),
666 parameters: notificationData && notificationData.dismissalParameters
655 }; 667 };
656 items.pendingDismissals.push(dismissal); 668 items.pendingDismissals.push(dismissal);
657 storage.set({pendingDismissals: items.pendingDismissals}); 669 storage.set({pendingDismissals: items.pendingDismissals});
658 processPendingDismissals(function(success) { callback(); }); 670 processPendingDismissals(function(success) { callback(); });
659 }); 671 });
660 }); 672 });
661 } 673 }
662 674
663 /** 675 /**
664 * Initializes the polling system to start monitoring location and fetching 676 * Initializes the polling system to start monitoring location and fetching
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 765
754 chrome.location.onLocationUpdate.addListener(function(position) { 766 chrome.location.onLocationUpdate.addListener(function(position) {
755 recordEvent(DiagnosticEvent.LOCATION_UPDATE); 767 recordEvent(DiagnosticEvent.LOCATION_UPDATE);
756 updateNotificationsCards(position); 768 updateNotificationsCards(position);
757 }); 769 });
758 770
759 chrome.omnibox.onInputEntered.addListener(function(text) { 771 chrome.omnibox.onInputEntered.addListener(function(text) {
760 localStorage['server_url'] = NOTIFICATION_CARDS_URL = text; 772 localStorage['server_url'] = NOTIFICATION_CARDS_URL = text;
761 initialize(); 773 initialize();
762 }); 774 });
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/google_now/utility.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698