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