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 fileManagerPrivate API. 6 7// Bindings 8var binding = require('binding').Binding.create('fileManagerPrivate'); 9var eventBindings = require('event_bindings'); 10 11// Natives 12var fileManagerPrivateNatives = requireNative('file_manager_private'); 13var fileBrowserHandlerNatives = requireNative('file_browser_handler'); 14 15// Internals 16var fileManagerPrivateInternal = 17 require('binding').Binding.create('fileManagerPrivateInternal').generate(); 18 19// Shorthands 20var GetFileSystem = fileManagerPrivateNatives.GetFileSystem; 21var GetExternalFileEntry = fileBrowserHandlerNatives.GetExternalFileEntry; 22 23binding.registerCustomHook(function(bindingsAPI) { 24 var apiFunctions = bindingsAPI.apiFunctions; 25 26 apiFunctions.setCustomCallback('requestFileSystem', 27 function(name, request, response) { 28 var fs = null; 29 if (response && !response.error) 30 fs = GetFileSystem(response.name, response.root_url); 31 if (request.callback) 32 request.callback(fs); 33 request.callback = null; 34 }); 35 36 apiFunctions.setCustomCallback('searchDrive', 37 function(name, request, response) { 38 if (response && !response.error && response.entries) { 39 response.entries = response.entries.map(function(entry) { 40 return GetExternalFileEntry(entry); 41 }); 42 } 43 44 // So |request.callback| doesn't break if response is not defined. 45 if (!response) 46 response = {}; 47 48 if (request.callback) 49 request.callback(response.entries, response.nextFeed); 50 request.callback = null; 51 }); 52 53 apiFunctions.setCustomCallback('searchDriveMetadata', 54 function(name, request, response) { 55 if (response && !response.error) { 56 for (var i = 0; i < response.length; i++) { 57 response[i].entry = 58 GetExternalFileEntry(response[i].entry); 59 } 60 } 61 62 // So |request.callback| doesn't break if response is not defined. 63 if (!response) 64 response = {}; 65 66 if (request.callback) 67 request.callback(response); 68 request.callback = null; 69 }); 70 71 apiFunctions.setHandleRequest('resolveIsolatedEntries', 72 function(entries, callback) { 73 var urls = entries.map(function(entry) { 74 return fileBrowserHandlerNatives.GetEntryURL(entry); 75 }); 76 fileManagerPrivateInternal.resolveIsolatedEntries(urls, function( 77 entryDescriptions) { 78 callback(entryDescriptions.map(function(description) { 79 return GetExternalFileEntry(description); 80 })); 81 }); 82 }); 83}); 84 85eventBindings.registerArgumentMassager( 86 'fileManagerPrivate.onDirectoryChanged', function(args, dispatch) { 87 // Convert the entry arguments into a real Entry object. 88 args[0].entry = GetExternalFileEntry(args[0].entry); 89 dispatch(args); 90}); 91 92exports.binding = binding.generate(); 93