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 5var fileSystemNatives = requireNative('file_system_natives'); 6 7var nameToIds = {}; 8var idsToEntries = {}; 9 10function computeName(entry) { 11 return entry.filesystem.name + ':' + entry.fullPath; 12} 13 14function 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 23function registerEntry(id, entry) { 24 var name = computeName(entry); 25 nameToIds[name] = id; 26 idsToEntries[id] = entry; 27} 28 29function 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 46function getEntryById(id) { 47 return idsToEntries[id]; 48} 49 50exports.registerEntry = registerEntry; 51exports.getEntryId = getEntryId; 52exports.getEntryById = getEntryById; 53