| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Custom binding for the fileSystem API. | 5 // Custom binding for the fileSystem API. |
| 6 | 6 |
| 7 var binding = require('binding').Binding.create('fileSystem'); | 7 var binding = require('binding').Binding.create('fileSystem'); |
| 8 | 8 |
| 9 var fileSystemNatives = requireNative('file_system_natives'); | 9 var fileSystemNatives = requireNative('file_system_natives'); |
| 10 var forEach = require('utils').forEach; | 10 var forEach = require('utils').forEach; |
| 11 var GetIsolatedFileSystem = fileSystemNatives.GetIsolatedFileSystem; | 11 var GetIsolatedFileSystem = fileSystemNatives.GetIsolatedFileSystem; |
| 12 var lastError = require('lastError'); | 12 var lastError = require('lastError'); |
| 13 var sendRequest = require('sendRequest').sendRequest; |
| 13 var GetModuleSystem = requireNative('v8_context').GetModuleSystem; | 14 var GetModuleSystem = requireNative('v8_context').GetModuleSystem; |
| 14 // TODO(sammc): Don't require extension. See http://crbug.com/235689. | 15 // TODO(sammc): Don't require extension. See http://crbug.com/235689. |
| 15 var GetExtensionViews = requireNative('extension').GetExtensionViews; | 16 var GetExtensionViews = requireNative('extension').GetExtensionViews; |
| 16 | 17 |
| 17 var backgroundPage = GetExtensionViews(-1, 'BACKGROUND')[0]; | 18 var backgroundPage = GetExtensionViews(-1, 'BACKGROUND')[0]; |
| 18 var backgroundPageModuleSystem = GetModuleSystem(backgroundPage); | 19 var backgroundPageModuleSystem = GetModuleSystem(backgroundPage); |
| 19 var entryIdManager = backgroundPageModuleSystem.require('entryIdManager'); | 20 var entryIdManager = backgroundPageModuleSystem.require('entryIdManager'); |
| 20 | 21 |
| 21 // All windows use the bindFileEntryCallback from the background page so their | 22 // All windows use the bindFileEntryCallback from the background page so their |
| 22 // FileEntry objects have the background page's context as their own. This | 23 // FileEntry objects have the background page's context as their own. This |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 apiFunctions.setUpdateArgumentsPostValidate( | 75 apiFunctions.setUpdateArgumentsPostValidate( |
| 75 functionName, function(fileEntry, callback) { | 76 functionName, function(fileEntry, callback) { |
| 76 var fileSystemName = fileEntry.filesystem.name; | 77 var fileSystemName = fileEntry.filesystem.name; |
| 77 var relativePath = fileEntry.fullPath.slice(1); | 78 var relativePath = fileEntry.fullPath.slice(1); |
| 78 return [fileSystemName, relativePath, callback]; | 79 return [fileSystemName, relativePath, callback]; |
| 79 }); | 80 }); |
| 80 } | 81 } |
| 81 forEach(['getDisplayPath', 'getWritableEntry', 'isWritableEntry'], | 82 forEach(['getDisplayPath', 'getWritableEntry', 'isWritableEntry'], |
| 82 bindFileEntryFunction); | 83 bindFileEntryFunction); |
| 83 | 84 |
| 84 forEach(['getWritableEntry', 'chooseEntry'], function(i, functionName) { | 85 forEach(['getWritableEntry', 'chooseEntry', 'restoreEntry'], |
| 86 function(i, functionName) { |
| 85 bindFileEntryCallback(functionName, apiFunctions); | 87 bindFileEntryCallback(functionName, apiFunctions); |
| 86 }); | 88 }); |
| 87 | 89 |
| 88 apiFunctions.setHandleRequest('getEntryId', function(fileEntry) { | 90 apiFunctions.setHandleRequest('retainEntry', function(fileEntry) { |
| 89 return entryIdManager.getEntryId(fileEntry); | 91 var id = entryIdManager.getEntryId(fileEntry); |
| 92 if (!id) |
| 93 return ''; |
| 94 var fileSystemName = fileEntry.filesystem.name; |
| 95 var relativePath = fileEntry.fullPath.slice(1); |
| 96 |
| 97 sendRequest(this.name, [id, fileSystemName, relativePath], |
| 98 this.definition.parameters, {}); |
| 99 return id; |
| 90 }); | 100 }); |
| 91 | 101 |
| 92 apiFunctions.setHandleRequest('getEntryById', function(id) { | 102 apiFunctions.setHandleRequest('isRestorable', |
| 93 return entryIdManager.getEntryById(id); | 103 function(id, callback) { |
| 104 var savedEntry = entryIdManager.getEntryById(id); |
| 105 if (savedEntry) { |
| 106 callback(true); |
| 107 } else { |
| 108 sendRequest(this.name, [id, callback], this.definition.parameters, {}); |
| 109 } |
| 110 }); |
| 111 |
| 112 apiFunctions.setUpdateArgumentsPostValidate('restoreEntry', |
| 113 function(id, callback) { |
| 114 var savedEntry = entryIdManager.getEntryById(id); |
| 115 if (savedEntry) { |
| 116 callback(savedEntry); |
| 117 return [id, false, null]; |
| 118 } else { |
| 119 return [id, true, callback]; |
| 120 } |
| 94 }); | 121 }); |
| 95 | 122 |
| 96 // TODO(benwells): Remove these deprecated versions of the functions. | 123 // TODO(benwells): Remove these deprecated versions of the functions. |
| 97 fileSystem.getWritableFileEntry = function() { | 124 fileSystem.getWritableFileEntry = function() { |
| 98 console.log("chrome.fileSystem.getWritableFileEntry is deprecated"); | 125 console.log("chrome.fileSystem.getWritableFileEntry is deprecated"); |
| 99 console.log("Please use chrome.fileSystem.getWritableEntry instead"); | 126 console.log("Please use chrome.fileSystem.getWritableEntry instead"); |
| 100 fileSystem.getWritableEntry.apply(this, arguments); | 127 fileSystem.getWritableEntry.apply(this, arguments); |
| 101 }; | 128 }; |
| 102 | 129 |
| 103 fileSystem.isWritableFileEntry = function() { | 130 fileSystem.isWritableFileEntry = function() { |
| 104 console.log("chrome.fileSystem.isWritableFileEntry is deprecated"); | 131 console.log("chrome.fileSystem.isWritableFileEntry is deprecated"); |
| 105 console.log("Please use chrome.fileSystem.isWritableEntry instead"); | 132 console.log("Please use chrome.fileSystem.isWritableEntry instead"); |
| 106 fileSystem.isWritableEntry.apply(this, arguments); | 133 fileSystem.isWritableEntry.apply(this, arguments); |
| 107 }; | 134 }; |
| 108 | 135 |
| 109 fileSystem.chooseFile = function() { | 136 fileSystem.chooseFile = function() { |
| 110 console.log("chrome.fileSystem.chooseFile is deprecated"); | 137 console.log("chrome.fileSystem.chooseFile is deprecated"); |
| 111 console.log("Please use chrome.fileSystem.chooseEntry instead"); | 138 console.log("Please use chrome.fileSystem.chooseEntry instead"); |
| 112 fileSystem.chooseEntry.apply(this, arguments); | 139 fileSystem.chooseEntry.apply(this, arguments); |
| 113 }; | 140 }; |
| 114 }); | 141 }); |
| 115 | 142 |
| 116 exports.bindFileEntryCallback = bindFileEntryCallback; | 143 exports.bindFileEntryCallback = bindFileEntryCallback; |
| 117 exports.binding = binding.generate(); | 144 exports.binding = binding.generate(); |
| OLD | NEW |