Index: chrome/test/data/extensions/api_test/extfs/file_system.js |
diff --git a/chrome/test/data/extensions/api_test/extfs/file_system.js b/chrome/test/data/extensions/api_test/extfs/file_system.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e2e353f574ffc4f570fc5222332e89281fe7832c |
--- /dev/null |
+++ b/chrome/test/data/extensions/api_test/extfs/file_system.js |
@@ -0,0 +1,114 @@ |
+// Copyright 2013 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. |
+// |
+// This file implements an in-memory read-only file system through the extfs |
+// API. |
+ |
+// The in-memory file system data. |
+var theRoot = { |
+ self: { isDirectory: true, name: '', size: 0 }, |
+ children: [ |
+ { self: { isDirectory: false, name: 'file1', size: 10 } }, |
+ { self: { isDirectory: true, name: 'dir1', size: 0 }, |
+ children: [ |
+ { self: { isDirectory: false, name: 'file2', size: 20 } }, |
+ { self: { isDirectory: false, name: 'file3', size: 30 } }, |
+ { self: { isDirectory: true, name: 'dir2', size: 0 }, |
+ children: [ |
+ { self: { isDirectory: false, name: 'file4', size: 40 } }, |
+ { self: { isDirectory: true, name: 'dir3', size: 0 } }, |
+ ] |
+ }, |
+ ]}, |
+ ] |
+}; |
+ |
+// Get an entry at |path| from the in-memory file system. |
+function getEntry(path) { |
+ console.log('@@@ getEntry: ' + path); |
+ // Path should start with '/testfs'. |
+ if (path.length < 1 || !path.match(/^\/testfs/)) |
+ return null; // Invalid path. |
+ // Drop /testfs. |
+ path = path.replace(/\/testfs/, '/'); |
+ // Normalize the path. |
+ path = path.replace(/\/+/g, '/'); |
+ if (path != '/') { |
+ path = path.replace(/\/$/, ''); |
+ } |
+ |
+ // Return the root if that's what requested. |
+ if (path == '/') { |
+ return theRoot; |
+ } |
+ |
+ function getEntryInternal(pathComponents, entry) { |
+ if (entry.self.name == pathComponents[0]) { |
+ if (pathComponents.length == 1) |
+ return entry; |
+ if (entry.self.isDirectory && entry.children) { |
+ for (var i = 0; i < entry.children.length; i++) { |
+ var rest = pathComponents.slice(); |
+ rest.shift(); |
+ var found = getEntryInternal(rest, entry.children[i]); |
+ if (found) |
+ return found; |
+ } |
+ } |
+ } |
+ return null; |
+ } |
+ |
+ var pathComponents = path.split('/'); |
+ return getEntryInternal(pathComponents, theRoot); |
+} |
+ |
+chrome.extfs.onEntryRequested.addListener( |
+ function(path, callback) { |
+ console.log('@@@ onEntryRequested: ' + path); |
+ var entry = getEntry(path); |
+ if (entry) |
+ callback("OK", entry.self); |
+ else |
+ callback("ERROR_NOT_FOUND", null); |
+ }); |
+ |
+chrome.extfs.onDirectoryEntriesRequested.addListener( |
+ function(path, callback) { |
+ console.log('@@@ onDirectoryEntriesRequested: ' + path); |
+ var entries = []; |
+ var parentEntry = getEntry(path); |
+ if (!parentEntry) { |
+ callback("ERROR_NOT_FOUND", []); |
+ return; |
+ } |
+ if (parentEntry.children) { |
+ for (var i = 0; i < parentEntry.children.length; i++) { |
+ entries.push(parentEntry.children[i].self); |
+ } |
+ } |
+ callback("OK", entries); |
+ }); |
+ |
+chrome.extfs.onSnapshotRequested.addListener( |
+ function(path, callback) { |
+ console.log('@@@ onSnapshotRequested: ' + path); |
+ var entry = getEntry(path); |
+ if (!entry) { |
+ callback("ERROR_NOT_FOUND", null); |
+ return; |
+ } |
+ var content = ''; |
+ for (var i = 0; i < entry.self.size; i++) |
+ content += 'o'; |
+ var blob = new Blob([content], {type: "text/plain;charset=UTF-8"}); |
+ callback("OK", blob); |
+ }); |
+ |
+chrome.extfs.addMountPoint( |
+ 'testfs', |
+ function(result) { |
+ console.log("@@@ addMountPoint result: " + result); |
+ } |
+); |