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

Side by Side Diff: chrome/renderer/resources/extensions/file_system_custom_bindings.js

Issue 2939833002: Move chrome.fileSystem interface and bindings to //extensions (Closed)
Patch Set: rebase Created 3 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 unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 // Custom binding for the fileSystem API.
6
7 var binding = apiBridge || require('binding').Binding.create('fileSystem');
8 var sendRequest = bindingUtil ?
9 $Function.bind(bindingUtil.sendRequest, bindingUtil) :
10 require('sendRequest').sendRequest;
11 var getFileBindingsForApi =
12 require('fileEntryBindingUtil').getFileBindingsForApi;
13 var fileBindings = getFileBindingsForApi('fileSystem');
14 var bindFileEntryCallback = fileBindings.bindFileEntryCallback;
15 var entryIdManager = fileBindings.entryIdManager;
16 var fileSystemNatives = requireNative('file_system_natives');
17 var safeCallbackApply = require('uncaught_exception_handler').safeCallbackApply;
18
19 binding.registerCustomHook(function(bindingsAPI) {
20 var apiFunctions = bindingsAPI.apiFunctions;
21 var fileSystem = bindingsAPI.compiledApi;
22
23 function bindFileEntryFunction(functionName) {
24 apiFunctions.setUpdateArgumentsPostValidate(
25 functionName, function(fileEntry, callback) {
26 var fileSystemName = fileEntry.filesystem.name;
27 var relativePath = $String.slice(fileEntry.fullPath, 1);
28 return [fileSystemName, relativePath, callback];
29 });
30 }
31 $Array.forEach(['getDisplayPath', 'getWritableEntry', 'isWritableEntry'],
32 bindFileEntryFunction);
33
34 $Array.forEach(['getWritableEntry', 'chooseEntry', 'restoreEntry'],
35 function(functionName) {
36 bindFileEntryCallback(functionName, apiFunctions);
37 });
38
39 apiFunctions.setHandleRequest('retainEntry', function(fileEntry) {
40 var id = entryIdManager.getEntryId(fileEntry);
41 if (!id)
42 return '';
43 var fileSystemName = fileEntry.filesystem.name;
44 var relativePath = $String.slice(fileEntry.fullPath, 1);
45
46 sendRequest('fileSystem.retainEntry', [id, fileSystemName, relativePath],
47 bindingUtil ? undefined : this.definition.parameters);
48 return id;
49 });
50
51 apiFunctions.setHandleRequest('isRestorable',
52 function(id, callback) {
53 var savedEntry = entryIdManager.getEntryById(id);
54 if (savedEntry) {
55 safeCallbackApply('fileSystem.isRestorable', {}, callback, [true]);
56 } else {
57 sendRequest('fileSystem.isRestorable', [id, callback],
58 bindingUtil ? undefined : this.definition.parameters);
59 }
60 });
61
62 apiFunctions.setUpdateArgumentsPostValidate('restoreEntry',
63 function(id, callback) {
64 var savedEntry = entryIdManager.getEntryById(id);
65 if (savedEntry) {
66 // We already have a file entry for this id so pass it to the callback and
67 // send a request to the browser to move it to the back of the LRU.
68 safeCallbackApply('fileSystem.restoreEntry', {}, callback, [savedEntry]);
69 return [id, false, null];
70 } else {
71 // Ask the browser process for a new file entry for this id, to be passed
72 // to |callback|.
73 return [id, true, callback];
74 }
75 });
76
77 apiFunctions.setCustomCallback('requestFileSystem',
78 function(name, request, callback, response) {
79 var fileSystem;
80 if (response && response.file_system_id) {
81 fileSystem = fileSystemNatives.GetIsolatedFileSystem(
82 response.file_system_id, response.file_system_path);
83 }
84 safeCallbackApply('fileSystem.requestFileSystem', request, callback,
85 [fileSystem]);
86 });
87
88 // TODO(benwells): Remove these deprecated versions of the functions.
89 fileSystem.getWritableFileEntry = function() {
90 console.log("chrome.fileSystem.getWritableFileEntry is deprecated");
91 console.log("Please use chrome.fileSystem.getWritableEntry instead");
92 $Function.apply(fileSystem.getWritableEntry, this, arguments);
93 };
94
95 fileSystem.isWritableFileEntry = function() {
96 console.log("chrome.fileSystem.isWritableFileEntry is deprecated");
97 console.log("Please use chrome.fileSystem.isWritableEntry instead");
98 $Function.apply(fileSystem.isWritableEntry, this, arguments);
99 };
100
101 fileSystem.chooseFile = function() {
102 console.log("chrome.fileSystem.chooseFile is deprecated");
103 console.log("Please use chrome.fileSystem.chooseEntry instead");
104 $Function.apply(fileSystem.chooseEntry, this, arguments);
105 };
106 });
107
108 if (!apiBridge)
109 exports.$set('binding', binding.generate());
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698