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

Unified Diff: chrome/renderer/resources/extensions/file_system_custom_bindings.js

Issue 18331017: Support choosing multiple files with fileSystem.chooseEntry. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 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: chrome/renderer/resources/extensions/file_system_custom_bindings.js
diff --git a/chrome/renderer/resources/extensions/file_system_custom_bindings.js b/chrome/renderer/resources/extensions/file_system_custom_bindings.js
index f66c20d45e868a99a511c1030490a8056fa1eff2..4fabdce6ea7d3d3072240cb751f2143cc428e6e2 100644
--- a/chrome/renderer/resources/extensions/file_system_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/file_system_custom_bindings.js
@@ -26,34 +26,56 @@ if (window == backgroundPage) {
var bindFileEntryCallback = function(functionName, apiFunctions) {
apiFunctions.setCustomCallback(functionName,
function(name, request, response) {
- if (request.callback && response) {
+ if (request.callback && response && response) {
Matt Giuca 2013/07/19 02:28:11 response.entries? (Otherwise, why response && resp
Sam McNally 2013/07/19 04:22:14 Done.
var callback = request.callback;
request.callback = null;
- var fileSystemId = response.fileSystemId;
- var baseName = response.baseName;
- var id = response.id;
- var fs = GetIsolatedFileSystem(fileSystemId);
-
- try {
- // TODO(koz): fs.root.getFile() makes a trip to the browser process,
- // but it might be possible avoid that by calling
- // WebFrame::createFileEntry().
- fs.root.getFile(baseName, {}, function(fileEntry) {
- entryIdManager.registerEntry(id, fileEntry);
- callback(fileEntry);
- }, function(fileError) {
- lastError.run('fileSystem.' + functionName,
- 'Error getting fileEntry, code: ' + fileError.code,
- request.stack,
- callback);
- });
- } catch (e) {
- lastError.run('fileSystem.' + functionName,
- 'Error in event handler for onLaunched: ' + e.stack,
- request.stack,
- callback);
- }
+ var entries = [];
+ var hasError = false;
+ var maybeDone = function() {
Matt Giuca 2013/07/19 02:28:11 Comment here to explain the fan-out.
Sam McNally 2013/07/19 04:22:14 Done.
+ if (entries.length == response.entries.length) {
+ if (response.multiple) {
+ callback(entries);
+ } else {
+ callback(entries[0]);
+ }
+ }
+ };
+
+ $Array.forEach(response.entries, function(entry) {
+ var fileSystemId = entry.fileSystemId;
+ var baseName = entry.baseName;
+ var id = entry.id;
+ var fs = GetIsolatedFileSystem(fileSystemId);
+
+ try {
+ // TODO(koz): fs.root.getFile() makes a trip to the browser process,
+ // but it might be possible avoid that by calling
+ // WebFrame::createFileEntry().
+ fs.root.getFile(baseName, {}, function(fileEntry) {
+ entryIdManager.registerEntry(id, fileEntry);
+ entries.push(fileEntry);
+ maybeDone();
Matt Giuca 2013/07/19 02:28:11 Why is maybeDone a function? I expected it to be u
Sam McNally 2013/07/19 04:22:14 Done.
+ }, function(fileError) {
+ if (!hasError) {
+ hasError = true;
+ lastError.run(
+ 'fileSystem.' + functionName,
+ 'Error getting fileEntry, code: ' + fileError.code,
+ request.stack,
+ callback);
+ }
+ });
+ } catch (e) {
+ if (!hasError) {
+ hasError = true;
+ lastError.run('fileSystem.' + functionName,
+ 'Error getting fileEntry: ' + e.stack,
+ request.stack,
+ callback);
+ }
+ }
+ });
}
});
};

Powered by Google App Engine
This is Rietveld 408576698