summaryrefslogtreecommitdiffstats
path: root/extensions/renderer/resources/entry_id_manager.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/renderer/resources/entry_id_manager.js')
-rw-r--r--extensions/renderer/resources/entry_id_manager.js52
1 files changed, 52 insertions, 0 deletions
diff --git a/extensions/renderer/resources/entry_id_manager.js b/extensions/renderer/resources/entry_id_manager.js
new file mode 100644
index 0000000..9fc2c14
--- /dev/null
+++ b/extensions/renderer/resources/entry_id_manager.js
@@ -0,0 +1,52 @@
+// Copyright 2014 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.
+
+var fileSystemNatives = requireNative('file_system_natives');
+
+var nameToIds = {};
+var idsToEntries = {};
+
+function computeName(entry) {
+ return entry.filesystem.name + ':' + entry.fullPath;
+}
+
+function computeId(entry) {
+ var fileSystemId = fileSystemNatives.CrackIsolatedFileSystemName(
+ entry.filesystem.name);
+ if (!fileSystemId)
+ return null;
+ // Strip the leading '/' from the path.
+ return fileSystemId + ':' + $String.slice(entry.fullPath, 1);
+}
+
+function registerEntry(id, entry) {
+ var name = computeName(entry);
+ nameToIds[name] = id;
+ idsToEntries[id] = entry;
+}
+
+function getEntryId(entry) {
+ var name = null;
+ try {
+ name = computeName(entry);
+ } catch(e) {
+ return null;
+ }
+ var id = nameToIds[name];
+ if (id != null)
+ return id;
+
+ // If an entry has not been registered, compute its id and register it.
+ id = computeId(entry);
+ registerEntry(id, entry);
+ return id;
+}
+
+function getEntryById(id) {
+ return idsToEntries[id];
+}
+
+exports.registerEntry = registerEntry;
+exports.getEntryId = getEntryId;
+exports.getEntryById = getEntryById;