| 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 8df8200cc51034addcba310805a3d66f62a24d51..95bcb42f0d11aa5fa6ad91dd1c8113fa3e7226b6 100644
|
| --- a/chrome/renderer/resources/extensions/file_system_custom_bindings.js
|
| +++ b/chrome/renderer/resources/extensions/file_system_custom_bindings.js
|
| @@ -10,6 +10,7 @@ var fileSystemNatives = requireNative('file_system_natives');
|
| var forEach = require('utils').forEach;
|
| var GetIsolatedFileSystem = fileSystemNatives.GetIsolatedFileSystem;
|
| var lastError = require('lastError');
|
| +var sendRequest = require('sendRequest').sendRequest;
|
| var GetModuleSystem = requireNative('v8_context').GetModuleSystem;
|
| // TODO(sammc): Don't require extension. See http://crbug.com/235689.
|
| var GetExtensionViews = requireNative('extension').GetExtensionViews;
|
| @@ -81,16 +82,46 @@ binding.registerCustomHook(function(bindingsAPI) {
|
| forEach(['getDisplayPath', 'getWritableEntry', 'isWritableEntry'],
|
| bindFileEntryFunction);
|
|
|
| - forEach(['getWritableEntry', 'chooseEntry'], function(i, functionName) {
|
| + forEach(['getWritableEntry', 'chooseEntry', 'restoreEntry'],
|
| + function(i, functionName) {
|
| bindFileEntryCallback(functionName, apiFunctions);
|
| });
|
|
|
| - apiFunctions.setHandleRequest('getEntryId', function(fileEntry) {
|
| - return entryIdManager.getEntryId(fileEntry);
|
| + apiFunctions.setHandleRequest('retainEntry', function(fileEntry) {
|
| + var id = entryIdManager.getEntryId(fileEntry);
|
| + if (!id)
|
| + return '';
|
| + var fileSystemName = fileEntry.filesystem.name;
|
| + var relativePath = fileEntry.fullPath.slice(1);
|
| +
|
| + sendRequest(this.name, [id, fileSystemName, relativePath],
|
| + this.definition.parameters, {});
|
| + return id;
|
| + });
|
| +
|
| + apiFunctions.setHandleRequest('isRestorable',
|
| + function(id, callback) {
|
| + var savedEntry = entryIdManager.getEntryById(id);
|
| + if (savedEntry) {
|
| + callback(true);
|
| + } else {
|
| + sendRequest(this.name, [id, callback], this.definition.parameters, {});
|
| + }
|
| });
|
|
|
| - apiFunctions.setHandleRequest('getEntryById', function(id) {
|
| - return entryIdManager.getEntryById(id);
|
| + apiFunctions.setUpdateArgumentsPostValidate('restoreEntry',
|
| + function(id, callback) {
|
| + var savedEntry = entryIdManager.getEntryById(id);
|
| + if (savedEntry) {
|
| + // We already have a file entry for this id so pass it to the callback and
|
| + // send a request to the browser to move it to the back of the LRU.
|
| + callback(savedEntry);
|
| + return [id, false, null];
|
| + } else {
|
| + // Ask the browser process for a new file entry for this id, to be passed
|
| + // to |callback|.
|
| + return [id, true, callback];
|
| + }
|
| });
|
|
|
| // TODO(benwells): Remove these deprecated versions of the functions.
|
|
|