1// Copyright 2014 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