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

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

Issue 183883027: Refactor Chrome Now Card Dismissal Stack to use Promises (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: CR Feedback Created 6 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 7dca5fef50d265b0c500000c0cd5d382edc207e0..a51f4326b0df9274383a4e02280cd7e862da4efc 100644
--- a/chrome/browser/resources/google_now/background.js
+++ b/chrome/browser/resources/google_now/background.js
@@ -650,12 +650,8 @@ function requestCards() {
updateCardsAttempts.isRunning(function(running) {
if (running) {
updateCardsAttempts.planForNext(function() {
- processPendingDismissals(function(success) {
- if (success) {
- // The cards are requested only if there are no unsent dismissals.
- requestNotificationCards();
- }
- });
+ // The cards are requested only if there are no unsent dismissals.
+ processPendingDismissals().then(requestNotificationCards);
});
}
});
@@ -669,11 +665,10 @@ function requestCards() {
* @param {number} dismissalTimeMs Time of the user's dismissal of the card in
* milliseconds since epoch.
* @param {DismissalData} dismissalData Data to build a dismissal request.
- * @param {function(boolean)} callbackBoolean Completion callback with 'done'
- * parameter.
+ * @return {Promise} A promise to request the card dismissal, rejects on error.
*/
function requestCardDismissal(
- chromeNotificationId, dismissalTimeMs, dismissalData, callbackBoolean) {
+ chromeNotificationId, dismissalTimeMs, dismissalData) {
console.log('requestDismissingCard ' + chromeNotificationId +
' from ' + NOTIFICATION_CARDS_URL +
', dismissalData=' + JSON.stringify(dismissalData));
@@ -697,7 +692,7 @@ function requestCardDismissal(
console.log('requestCardDismissal: requestParameters=' + requestParameters);
- requestFromServer('DELETE', requestParameters).then(function(request) {
+ return requestFromServer('DELETE', requestParameters).then(function(request) {
console.log('requestDismissingCard-onloadend ' + request.status);
if (request.status == HTTP_NOCONTENT)
recordEvent(GoogleNowEvent.DISMISS_REQUEST_SUCCESS);
@@ -707,19 +702,17 @@ function requestCardDismissal(
var done = request.status == HTTP_NOCONTENT ||
request.status == HTTP_BAD_REQUEST ||
request.status == HTTP_METHOD_NOT_ALLOWED;
- callbackBoolean(done);
- }).catch(function() {
- callbackBoolean(false);
+ return done ? Promise.resolve() : Promise.reject();
});
}
/**
* Tries to send dismiss requests for all pending dismissals.
- * @param {function(boolean)} callbackBoolean Completion callback with 'success'
- * parameter. Success means that no pending dismissals are left.
+ * @return {Promise} A promise to process the pending dismissals.
+ * The promise is rejected if a problem was encountered.
*/
-function processPendingDismissals(callbackBoolean) {
- fillFromChromeLocalStorage({
+function processPendingDismissals() {
+ return fillFromChromeLocalStorage({
/** @type {Array.<PendingDismissal>} */
pendingDismissals: [],
/** @type {Object.<NotificationId, number>} */
@@ -737,39 +730,34 @@ function processPendingDismissals(callbackBoolean) {
recentDismissals: items.recentDismissals
});
}
- callbackBoolean(success);
+ return success ? Promise.resolve() : Promise.reject();
}
function doProcessDismissals() {
if (items.pendingDismissals.length == 0) {
dismissalAttempts.stop();
- onFinish(true);
- return;
+ return onFinish(true);
}
// Send dismissal for the first card, and if successful, repeat
// recursively with the rest.
/** @type {PendingDismissal} */
var dismissal = items.pendingDismissals[0];
- requestCardDismissal(
+ return requestCardDismissal(
dismissal.chromeNotificationId,
dismissal.time,
- dismissal.dismissalData,
- function(done) {
- if (done) {
- dismissalsChanged = true;
- items.pendingDismissals.splice(0, 1);
- items.recentDismissals[
- dismissal.dismissalData.notificationId] =
- Date.now();
- doProcessDismissals();
- } else {
- onFinish(false);
- }
+ dismissal.dismissalData).then(function() {
+ dismissalsChanged = true;
+ items.pendingDismissals.splice(0, 1);
+ items.recentDismissals[dismissal.dismissalData.notificationId] =
+ Date.now();
+ return doProcessDismissals();
+ }).catch(function() {
+ return onFinish(false);
});
}
- doProcessDismissals();
+ return doProcessDismissals();
});
}
@@ -779,7 +767,7 @@ function processPendingDismissals(callbackBoolean) {
function retryPendingDismissals() {
tasks.add(RETRY_DISMISS_TASK_NAME, function() {
dismissalAttempts.planForNext(function() {
- processPendingDismissals(function(success) {});
+ processPendingDismissals();
});
});
}
@@ -876,7 +864,7 @@ function onNotificationClosed(chromeNotificationId, byUser) {
chrome.storage.local.set(items);
- processPendingDismissals(function(success) {});
+ processPendingDismissals();
});
});
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698