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

Unified Diff: chrome/browser/resources/file_manager/js/file_manager.js

Issue 7057053: Escaping file names correctly. Also fixed a crush in chromeos debug build while saving a web page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed opening files with spaces in their names. Created 9 years, 7 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: chrome/browser/resources/file_manager/js/file_manager.js
diff --git a/chrome/browser/resources/file_manager/js/file_manager.js b/chrome/browser/resources/file_manager/js/file_manager.js
index 4ecc60e594ca8096e84a4805dc9102edcd289dbd..c76a826df6f36caa7cc40049d2d2479431104c28 100644
--- a/chrome/browser/resources/file_manager/js/file_manager.js
+++ b/chrome/browser/resources/file_manager/js/file_manager.js
@@ -54,6 +54,9 @@ function FileManager(dialogDom, rootEntries, params) {
this.defaultPath_ = this.params_.defaultPath || '/';
+ // Optional list of file types.
+ this.fileTypes_ = this.params_.typeList;
+
this.showCheckboxes_ =
(this.dialogType_ == FileManager.DialogType.FULL_PAGE ||
this.dialogType_ == FileManager.DialogType.SELECT_OPEN_MULTI_FILE);
@@ -546,6 +549,40 @@ FileManager.prototype = {
};
/**
+ * Encodes filename to compose file URL.
+ */
+ FileManager.prototype.encodeFileName_ = function(fileName) {
+ fileName = encodeURI(fileName);
rginda 2011/06/01 16:53:51 If you switch to encodeURIComponent you won't need
SeRya 2011/06/02 08:42:40 Done.
+
+ // '#' would be treated as ananchor mark of the url. Escape it.
+ fileName = fileName.replace(/#/g, '%23');
+ return fileName;
+ };
+
+ /**
+ * "Save a file" dislog is suttposed to have a combo box with available
rginda 2011/06/01 16:53:51 dislog is suttposed => dialog is supposed
SeRya 2011/06/02 08:42:40 Done.
+ * file types. Selecting an item filter files by extension and specifies how
rginda 2011/06/01 16:53:51 filters files
SeRya 2011/06/02 08:42:40 Done.
+ * file should be saved.
+ * @return {intener} Index of selected type from this.fileTypes_ + 1. 0
+ * means value is not specified.
+ */
+ FileManager.prototype.getSelectedFilterIndex_= function(fileName) {
+ // TODO(serya): Implement the combo box
+ // For now try to guess choice by file extension.
+ if (!this.fileTypes_ || this.fileTypes_.length == 0) return 0;
+
+ var extension = /\.[^\.]+$/.exec(fileName);
+ extension = extension ? extension[0].substring(1).toLowerCase() : "";
+ var result = 0; // Use first type by default.
+ for (var i = 0; i < this.fileTypes_.length; i++) {
+ if (this.fileTypes_[i].extensions.indexOf(extension)) {
+ result = i;
+ }
+ }
+ return result + 1; // 1-based index.
+ };
+
+ /**
* Force the canExecute events to be dispatched.
*/
FileManager.prototype.updateCommands_ = function() {
@@ -2061,8 +2098,9 @@ FileManager.prototype = {
if (!filename)
throw new Error('Missing filename!');
- chrome.fileBrowserPrivate.selectFile(currentDirUrl + encodeURI(filename),
- 0);
+ chrome.fileBrowserPrivate.selectFile(
+ currentDirUrl + this.encodeFileName_(filename),
+ this.getSelectedFilterIndex_(filename));
window.close();
return;
}
@@ -2083,7 +2121,7 @@ FileManager.prototype = {
continue;
}
- ary.push(currentDirUrl + encodeURI(entry.name));
+ ary.push(currentDirUrl + this.encodeFileName_(entry.name));
}
// Multi-file selection has no other restrictions.
@@ -2112,7 +2150,8 @@ FileManager.prototype = {
throw new Error('Selected entry is not a file!');
}
- chrome.fileBrowserPrivate.selectFile(ary[0], 0);
+ chrome.fileBrowserPrivate.selectFile(
+ ary[0], this.getSelectedFilterIndex_(ary[0]));
window.close();
};

Powered by Google App Engine
This is Rietveld 408576698