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

Unified Diff: ui/file_manager/file_manager/foreground/js/quick_view_controller.js

Issue 2140113003: QuickView: Improve security by rendering images inside webview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 4 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 side-by-side diff with in-line comments
Download patch
Index: ui/file_manager/file_manager/foreground/js/quick_view_controller.js
diff --git a/ui/file_manager/file_manager/foreground/js/quick_view_controller.js b/ui/file_manager/file_manager/foreground/js/quick_view_controller.js
index 0606abd69ff0795f281b5886871062cf0d0e8462..d68398af960adc1c04cec525ee5bdf7d153d487e 100644
--- a/ui/file_manager/file_manager/foreground/js/quick_view_controller.js
+++ b/ui/file_manager/file_manager/foreground/js/quick_view_controller.js
@@ -84,7 +84,7 @@ function QuickViewController(
QuickViewController.prototype.onOpenInNewButtonTap_ = function(event) {
this.taskController_.executeDefaultTask();
this.quickView_.close();
-}
+};
/**
* Handles key event on listContainer if it's relevent to quick view.
@@ -185,66 +185,109 @@ QuickViewController.prototype.updateQuickView_ = function() {
* @private
*/
QuickViewController.prototype.onMetadataLoaded_ = function(entry, items) {
+ return this.getQuickViewParameters_(entry, items).then(function(params) {
+ this.quickView_.contentUrl = params.contentUrl || '';
+ this.quickView_.type = params.type || '';
+ this.quickView_.filePath = params.filePath || '';
+ this.quickView_.videoPoster = params.videoPoster || '';
+ this.quickView_.audioArtwork = params.audioArtwork || '';
+ this.quickView_.autoplay = params.autoplay || false;
+ }.bind(this));
+};
+
+/**
+ * @typedef {{
+ * type: string,
+ * filePath: string,
+ * contentUrl: (string|undefined),
+ * videoPoster: (string|undefined),
+ * audioArtwork: (string|undefined),
+ * autoplay: (boolean|undefined)
+ * }}
+ */
+var QuickViewParams;
+
+/**
+ * @param {!FileEntry} entry
+ * @param {Array<MetadataItem>} items
+ * @return !Promise<!QuickViewParams>
+ *
+ * @private
+ */
+QuickViewController.prototype.getQuickViewParameters_ = function(entry, items) {
var item = items[0];
var type = FileType.getType(entry).type;
- this.quickView_.clear();
- this.quickView_.filePath = entry.name;
- this.quickView_.type = type;
+ /** @type {!QuickViewParams} */
+ var params = {
+ type: type,
+ filePath: entry.name,
+ };
+
if (type === 'image') {
if (item.externalFileUrl) {
if (item.thumbnailUrl) {
- this.loadThumbnailFromDrive_(item.thumbnailUrl, function(result) {
- if (result.status !== 'success') {
- return;
- }
- this.quickView_.contentUrl = result.data;
- }.bind(this));
+ return this.loadThumbnailFromDrive_(item.thumbnailUrl)
+ .then(function(result) {
+ if (result.status === 'success')
+ params.contentUrl = result.data;
+ return params;
+ }.bind(this));
}
} else {
- this.quickView_.contentUrl = item.thumbnailUrl || entry.toURL();
+ return new Promise(function(resolve, reject) {
+ entry.file(function(file) {
+ params.contentUrl = URL.createObjectURL(file);
+ resolve(params);
+ });
+ });
}
} else if (type === 'video') {
if (item.externalFileUrl) {
if (item.thumbnailUrl) {
- this.loadThumbnailFromDrive_(item.thumbnailUrl, function(result) {
- if (result.status !== 'success') {
- return;
- }
- this.quickView_.videoPoster = result.data;
- }.bind(this));
+ return this.loadThumbnailFromDrive_(item.thumbnailUrl)
+ .then(function(result) {
+ if (result.status === 'success') {
+ params.videoPoster = result.data;
+ }
+ return params;
+ });
}
} else {
- this.quickView_.contentUrl = entry.toURL();
- if (item.thumbnailUrl)
- this.quickView_.videoPoster = item.thumbnailUrl;
- this.quickView_.autoplay = true;
+ params.contentUrl = entry.toURL();
+ params.autoplay = true;
+ if (item.thumbnailUrl) {
+ params.videoPoster = item.thumbnailUrl;
+ }
}
} else if (type === 'audio') {
if (item.externalFileUrl) {
// If the file is in Drive, we ask user to open it with external app.
} else {
- this.quickView_.contentUrl = entry.toURL();
- this.quickView_.autoplay = true;
- this.metadataModel_.get([entry], ['contentThumbnailUrl'])
+ params.contentUrl = entry.toURL();
+ params.autoplay = true;
+ return this.metadataModel_.get([entry], ['contentThumbnailUrl'])
.then(function(entry, items) {
var item = items[0];
- if (item.contentThumbnailUrl)
- this.quickView_.audioArtwork = item.contentThumbnailUrl;
+ if (item.contentThumbnailUrl) {
+ params.audioArtwork = item.contentThumbnailUrl;
+ }
+ return params;
}.bind(this, entry));
}
}
+ return Promise.resolve(params);
};
/**
* Loads a thumbnail from Drive.
*
* @param {string} url Thumbnail url
- * @param {function({status: string, data:string, width:number,
- * height:number})} callback
+ * @return Promise<{{status: string, data:string, width:number, height:number}}>
* @private
*/
-QuickViewController.prototype.loadThumbnailFromDrive_ = function(
- url, callback) {
- ImageLoaderClient.getInstance().load(url, callback);
+QuickViewController.prototype.loadThumbnailFromDrive_ = function(url) {
+ return new Promise(function(resolve) {
+ ImageLoaderClient.getInstance().load(url, resolve)
+ });
};

Powered by Google App Engine
This is Rietveld 408576698