Commit 286540be authored by Isabella Scalzi's avatar Isabella Scalzi Committed by Commit Bot

[quickview] Avoid race conditions

As mentioned in CL:2010236 we should avoid race conditions when
setting file tasks of an entry.

Only save tasks for an entry once the Quick View content panel
has been successfully updated.

Test: covered by existing tests
Bug: 1038799
Change-Id: I46697284d9d0690aa66a760a27da3b82caef5b94
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2011584Reviewed-by: default avatarNoel Gordon <noel@chromium.org>
Commit-Queue: Noel Gordon <noel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#733546}
parent 76ec04ef
...@@ -295,14 +295,11 @@ class QuickViewController { ...@@ -295,14 +295,11 @@ class QuickViewController {
/** /**
* @param {!FileEntry} entry * @param {!FileEntry} entry
* @return {!Promise<!Array<!chrome.fileManagerPrivate.FileTask>>} * @return {!Promise<!FileTasks>}
* @private * @private
*/ */
getAvailableTasks_(entry) { getAvailableTasks_(entry) {
return this.taskController_.getEntryFileTasks(entry).then(tasks => { return this.taskController_.getEntryFileTasks(entry);
this.tasks_ = tasks;
return tasks.getTaskItems();
});
} }
/** /**
...@@ -322,6 +319,7 @@ class QuickViewController { ...@@ -322,6 +319,7 @@ class QuickViewController {
assert(this.entries_.length > 0); assert(this.entries_.length > 0);
const entry = this.entries_[this.currentSelection_]; const entry = this.entries_[this.currentSelection_];
this.quickViewModel_.setSelectedEntry(entry); this.quickViewModel_.setSelectedEntry(entry);
this.tasks_ = null;
requestIdleCallback(() => { requestIdleCallback(() => {
this.quickViewUma_.onEntryChanged(entry); this.quickViewUma_.onEntryChanged(entry);
...@@ -334,9 +332,7 @@ class QuickViewController { ...@@ -334,9 +332,7 @@ class QuickViewController {
]) ])
.then(values => { .then(values => {
const items = (/**@type{Array<MetadataItem>}*/ (values[0])); const items = (/**@type{Array<MetadataItem>}*/ (values[0]));
const tasks = const tasks = (/**@type{!FileTasks}*/ (values[1]));
(/**@type{!Array<!chrome.fileManagerPrivate.FileTask>}*/ (
values[1]));
return this.onMetadataLoaded_(entry, items, tasks); return this.onMetadataLoaded_(entry, items, tasks);
}) })
.catch(error => { .catch(error => {
...@@ -354,10 +350,12 @@ class QuickViewController { ...@@ -354,10 +350,12 @@ class QuickViewController {
* *
* @param {!FileEntry} entry * @param {!FileEntry} entry
* @param {Array<MetadataItem>} items * @param {Array<MetadataItem>} items
* @param {!Array<!chrome.fileManagerPrivate.FileTask>} tasks * @param {!FileTasks} fileTasks
* @private * @private
*/ */
onMetadataLoaded_(entry, items, tasks) { onMetadataLoaded_(entry, items, fileTasks) {
const tasks = fileTasks.getTaskItems();
return this.getQuickViewParameters_(entry, items, tasks).then(params => { return this.getQuickViewParameters_(entry, items, tasks).then(params => {
if (this.quickViewModel_.getSelectedEntry() != entry) { if (this.quickViewModel_.getSelectedEntry() != entry) {
return; // Bail: there's no point drawing a stale selection. return; // Bail: there's no point drawing a stale selection.
...@@ -374,6 +372,8 @@ class QuickViewController { ...@@ -374,6 +372,8 @@ class QuickViewController {
autoplay: params.autoplay || false, autoplay: params.autoplay || false,
browsable: params.browsable || false, browsable: params.browsable || false,
}); });
this.tasks_ = fileTasks;
}); });
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment