| OLD | NEW |
| 1 <script> | 1 <!-- |
| 2 | 2 * Copyright (c) 2011 The Chromium Authors. All rights reserved. Use of this |
| 3 /* | 3 * source code is governed by a BSD-style license that can be found in the |
| 4 This component extension test does the following: | 4 * LICENSE file. |
| 5 | 5 --> |
| 6 1. Creates a txt file on the local file system with some random text. | 6 <script src="main.js"></script> |
| 7 2. Finds a registered task (file item context menu) and invokes it with url | |
| 8 of the test file. | |
| 9 3. Listens for a message from context menu handler and makes sure its payload | |
| 10 matches the random text from the test file. | |
| 11 */ | |
| 12 | |
| 13 // The ID of this extension. | |
| 14 var fileBrowserExtensionId = "ddammdhioacbehjngdmkjcjbnfginlla"; | |
| 15 | |
| 16 var fileSystem = null; | |
| 17 var testDirName = "tmp/test_dir_" + Math.floor(Math.random()*10000); | |
| 18 var testFileName = "test_file_" + Math.floor(Math.random()*10000)+".Txt"; | |
| 19 var fileUrl = "filesystem:chrome-extension://" + fileBrowserExtensionId + | |
| 20 "/external/" + testDirName + "/" + testFileName; | |
| 21 var testDirectory = null; | |
| 22 var randomText = "random file text " + Math.floor(Math.random()*10000); | |
| 23 | |
| 24 function onFileSystemFetched(fs) { | |
| 25 if (!fs) { | |
| 26 errorCallback(chrome.extensions.lastError); | |
| 27 return; | |
| 28 } | |
| 29 fileSystem = fs; | |
| 30 console.log("DONE requesting local filesystem: " + fileSystem.name); | |
| 31 console.log("Creating directory : " + testDirName); | |
| 32 fileSystem.root.getDirectory(testDirName, {create:true}, | |
| 33 directoryCreateCallback, errorCallback); | |
| 34 } | |
| 35 | |
| 36 function directoryCreateCallback(directory) { | |
| 37 testDirectory = directory; | |
| 38 console.log("DONE creating directory: " + directory.fullPath); | |
| 39 directory.getFile(testFileName, {create:true}, fileCreatedCallback, | |
| 40 errorCallback); | |
| 41 } | |
| 42 | |
| 43 function fileCreatedCallback(fileEntry) { | |
| 44 console.log("DONE creating file: " + fileEntry.fullPath); | |
| 45 fileEntry.createWriter(onGetFileWriter); | |
| 46 } | |
| 47 | |
| 48 function onGetFileWriter(writer) { | |
| 49 // Start | |
| 50 console.log("Got file writer"); | |
| 51 writer.onerror = errorCallback; | |
| 52 writer.onwrite = onFileWriteCompleted; | |
| 53 var bb = new WebKitBlobBuilder(); | |
| 54 bb.append(randomText); | |
| 55 writer.write(bb.getBlob('text/plain')); | |
| 56 } | |
| 57 | |
| 58 function onFileWriteCompleted(e) { | |
| 59 // Start | |
| 60 console.log("DONE writing file content"); | |
| 61 console.log("Get registered tasks now..."); | |
| 62 chrome.fileBrowserPrivate.getFileTasks([fileUrl], onGetTasks); | |
| 63 | |
| 64 } | |
| 65 | |
| 66 function onGetTasks(tasks) { | |
| 67 console.log("Tasks: "); | |
| 68 console.log(tasks); | |
| 69 if (!tasks || !tasks.length) { | |
| 70 chrome.test.fail("No tasks registered"); | |
| 71 return; | |
| 72 } | |
| 73 | |
| 74 var expected_tasks = {'TextAction': ['filesystem:*.txt'], | |
| 75 'BaseAction': ['filesystem:*', 'filesystem:*.*']}; | |
| 76 | |
| 77 console.log("DONE fetching " + tasks.length + " tasks"); | |
| 78 | |
| 79 if (tasks.length != 2) | |
| 80 chrome.test.fail('Wrong number of tasks found.'); | |
| 81 | |
| 82 for (var i = 0; i < tasks.length; ++i) { | |
| 83 var task_name = /^.*[|](\w+)$/.exec(tasks[i].taskId)[1]; | |
| 84 var patterns = tasks[i].patterns; | |
| 85 var expected_patterns = expected_tasks[task_name]; | |
| 86 if (!expected_patterns) | |
| 87 chrome.test.fail('Wrong task from getFileTasks(): ' + task_name); | |
| 88 patterns = patterns.sort(); | |
| 89 expected_patterns = expected_patterns.sort(); | |
| 90 for (var j = 0; j < patterns.length; ++j) { | |
| 91 if (patterns[j] != expected_patterns[j]) | |
| 92 chrome.test.fail('Wrong patterns set for task ' + task_name + '. ' + | |
| 93 'Got: ' + patterns + | |
| 94 ' expected: ' + expected_patterns); | |
| 95 } | |
| 96 } | |
| 97 | |
| 98 chrome.fileBrowserPrivate.executeTask(tasks[0].taskId, [fileUrl]); | |
| 99 } | |
| 100 | |
| 101 function errorCallback(e) { | |
| 102 var msg = ''; | |
| 103 if (!e.code) { | |
| 104 msg = e.message; | |
| 105 } else { | |
| 106 switch (e.code) { | |
| 107 case FileError.QUOTA_EXCEEDED_ERR: | |
| 108 msg = 'QUOTA_EXCEEDED_ERR'; | |
| 109 break; | |
| 110 case FileError.NOT_FOUND_ERR: | |
| 111 msg = 'NOT_FOUND_ERR'; | |
| 112 break; | |
| 113 case FileError.SECURITY_ERR: | |
| 114 msg = 'SECURITY_ERR'; | |
| 115 break; | |
| 116 case FileError.INVALID_MODIFICATION_ERR: | |
| 117 msg = 'INVALID_MODIFICATION_ERR'; | |
| 118 break; | |
| 119 case FileError.INVALID_STATE_ERR: | |
| 120 msg = 'INVALID_STATE_ERR'; | |
| 121 break; | |
| 122 default: | |
| 123 msg = 'Unknown Error'; | |
| 124 break; | |
| 125 }; | |
| 126 } | |
| 127 chrome.test.fail("Got unexpected error: " + msg); | |
| 128 console.log('Error: ' + msg); | |
| 129 alert('Error: ' + msg); | |
| 130 } | |
| 131 | |
| 132 function onCleanupFinished(entry) { | |
| 133 chrome.test.succeed(); | |
| 134 } | |
| 135 | |
| 136 // For simple requests: | |
| 137 chrome.extension.onRequestExternal.addListener( | |
| 138 function(request, sender, sendResponse) { | |
| 139 if (request.fileContent && request.fileContent == randomText) { | |
| 140 sendResponse({success: true}); | |
| 141 testDirectory.removeRecursively(onCleanupFinished, errorCallback); | |
| 142 } else { | |
| 143 sendResponse({success: false}); | |
| 144 console.log('Error message received'); | |
| 145 console.log(request); | |
| 146 chrome.test.fail("Got error: " + request.error); | |
| 147 } | |
| 148 }); | |
| 149 | |
| 150 chrome.test.runTests([function tab() { | |
| 151 // Get local FS, create dir with a file in it. | |
| 152 console.log("Requesting local file system..."); | |
| 153 chrome.fileBrowserPrivate.requestLocalFileSystem(onFileSystemFetched); | |
| 154 }]); | |
| 155 | |
| 156 | |
| 157 </script> | |
| 158 <html> | 7 <html> |
| 159 <head><title>file browser component test</title></head> | 8 <head><title>file browser component test</title></head> |
| 160 <body><h2>chrome.fileBrowserPrivate.* tests</h2></body> | 9 <body><h2>chrome.fileBrowserPrivate.* tests</h2></body> |
| 161 </html> | 10 </html> |
| OLD | NEW |