Index: chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js |
diff --git a/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js b/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..74467bbb77a07669ebbf0f9240131b25a7b79254 |
--- /dev/null |
+++ b/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js |
@@ -0,0 +1,49 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Custom binding for the fileSystemProvider API. |
+ |
+var binding = require('binding').Binding.create('fileSystemProvider'); |
+var fileSystemProviderNatives = requireNative('file_system_provider'); |
+var GetDOMError = fileSystemProviderNatives.GetDOMError; |
+ |
+binding.registerCustomHook(function(bindingsAPI) { |
+ var apiFunctions = bindingsAPI.apiFunctions; |
+ |
+ apiFunctions.setUpdateArgumentsPostValidate( |
+ 'mount', |
+ function(displayName, successCallback, errorCallback) { |
+ // Piggyback the error callback onto the success callback, |
+ // so we can use the error callback later. |
+ successCallback.errorCallback_ = errorCallback; |
+ return [displayName, successCallback]; |
+ }); |
+ |
+ apiFunctions.setCustomCallback( |
+ 'mount', |
+ function(name, request, response) { |
+ var fileSystemId = null; |
+ var domError = null; |
+ if (request.callback && response) { |
+ fileSystemId = response[0]; |
+ // DOMError is present only if mount() failed. |
+ if (response[1]) { |
+ // Convert a Dictionary to a DOMError. |
+ domError = GetDOMError(response[1].name, response[1].message); |
+ response.length = 1; |
+ } |
+ |
+ var successCallback = request.callback; |
+ var errorCallback = request.callback.errorCallback_; |
+ delete request.callback; |
+ |
+ if (domError) |
+ errorCallback(domError); |
+ else |
+ successCallback(fileSystemId); |
+ } |
+ }); |
+}); |
+ |
+exports.binding = binding.generate(); |