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); |
+ } |
+ } |
+ }); |
} |
}); |
}; |