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

Unified Diff: chrome/browser/resources/settings/site_settings/site_data.js

Issue 2439233002: [MD settings] use promises rather than a counter var to fetch cookie data (Closed)
Patch Set: Created 4 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 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/settings/site_settings/site_data.js
diff --git a/chrome/browser/resources/settings/site_settings/site_data.js b/chrome/browser/resources/settings/site_settings/site_data.js
index e17c67bf4926b9f00c2b0cb57090bbaf1a5c7bef..180d462b519229bb9e7b32ecf6e77a94835757f7 100644
--- a/chrome/browser/resources/settings/site_settings/site_data.js
+++ b/chrome/browser/resources/settings/site_settings/site_data.js
@@ -28,12 +28,6 @@ Polymer({
treeNodes_: Object,
/**
- * Keeps track of how many outstanding requests for more data there are.
- * @private
- */
- requests_: Number,
-
- /**
* The current filter applied to the cookie data list.
* @private
*/
@@ -108,37 +102,46 @@ Polymer({
* @private
*/
loadChildren_: function(list) {
- var parentId = list.id;
+ assert(list.id == null);
+ // New root being added, clear the list and add the nodes.
+ this.sites = [];
var data = list.children;
-
- if (parentId == null) {
- // New root being added, clear the list and add the nodes.
- this.sites = [];
- this.requests_ = 0;
- this.treeNodes_.addChildNodes(this.treeNodes_, data);
- } else {
- this.treeNodes_.populateChildNodes(parentId, this.treeNodes_, data);
+ this.treeNodes_.addChildNodes(this.treeNodes_, data);
+ var promiseList = [];
dpapad 2016/10/21 22:03:08 Nit: s/promiseList/promises/. It's shorter, and co
dschuyler 2016/10/22 00:50:45 Done.
+ for (var i = 0; i < data.length; ++i) {
dpapad 2016/10/21 22:03:07 Nit(optional): A more functional way to do this (a
dschuyler 2016/10/22 00:50:45 javascript map is often suggested as alternative t
dpapad 2016/10/22 01:05:57 forEach() and for() are usually compared in terms
dschuyler 2016/10/22 01:17:11 The poor performance of map, afaik, comes from the
+ if (data[i].hasChildren) {
+ promiseList.push(this.browserProxy.loadCookieChildren(
+ data[i].id).then(function(list) {
dpapad 2016/10/21 22:03:07 Nit (optional): I think is more readable if you sk
dschuyler 2016/10/22 00:50:45 Thanks Done.
+ return this.loadChildrenRecurse_(list);
+ }.bind(this)));
+ }
}
+ Promise.all(promiseList).then(function() {
+ this.sites = this.treeNodes_.getSummaryList();
+ }.bind(this));
+ },
+ /**
+ * Called when the cookie list is ready to be shown.
+ * @param {!CookieList} list The cookie list to show.
+ * @private
+ */
+ loadChildrenRecurse_: function(list) {
dpapad 2016/10/21 22:03:07 loadChildrenRecurse_ and loadChildren_ seem almost
dschuyler 2016/10/22 00:50:45 Done.
+ assert(list.id != null);
dpapad 2016/10/21 22:03:07 Do we need to assert, on top of relying on the com
dschuyler 2016/10/22 00:50:45 The assserts are testing whether id is null (rathe
+ var parentId = list.id;
+ var data = list.children;
+ this.treeNodes_.populateChildNodes(parentId, this.treeNodes_, data);
+ var promiseList = [];
+ var prefix = parentId + ', ';
for (var i = 0; i < data.length; ++i) {
- var prefix = parentId == null ? '' : parentId + ', ';
if (data[i].hasChildren) {
- ++this.requests_;
- this.browserProxy.loadCookieChildren(
+ promiseList.push(this.browserProxy.loadCookieChildren(
prefix + data[i].id).then(function(list) {
- --this.requests_;
- this.loadChildren_(list);
- }.bind(this));
+ return this.loadChildrenRecurse_(list);
+ }.bind(this)));
}
}
-
- if (this.requests_ == 0)
- this.sites = this.treeNodes_.getSummaryList();
-
- // If this reaches below zero then we're forgetting to increase the
- // outstanding request count and the summary list won't be updated at the
- // end.
- assert(this.requests_ >= 0);
+ return Promise.all(promiseList);
},
/**
« 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