1 // Copyright (c) 2013 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 var fileSystemNatives = requireNative('file_system_natives'); 6 7 var nameToIds = {}; 8 var idsToEntries = {}; 9 10 function computeName(entry) { 11 return entry.filesystem.name + ':' + entry.fullPath; 12 } 13 14 function computeId(entry) { 15 var fileSystemId = fileSystemNatives.CrackIsolatedFileSystemName( 16 entry.filesystem.name); 17 if (!fileSystemId) 18 return null; 19 // Strip the leading '/' from the path. 20 return fileSystemId + ':' + $String.slice(entry.fullPath, 1); 21 } 22 23 function registerEntry(id, entry) { 24 var name = computeName(entry); 25 nameToIds[name] = id; 26 idsToEntries[id] = entry; 27 } 28 29 function getEntryId(entry) { 30 var name = null; 31 try { 32 name = computeName(entry); 33 } catch(e) { 34 return null; 35 } 36 var id = nameToIds[name]; 37 if (id != null) 38 return id; 39 40 // If an entry has not been registered, compute its id and register it. 41 id = computeId(entry); 42 registerEntry(id, entry); 43 return id; 44 } 45 46 function getEntryById(id) { 47 return idsToEntries[id]; 48 } 49 50 exports.registerEntry = registerEntry; 51 exports.getEntryId = getEntryId; 52 exports.getEntryById = getEntryById; 53