| Index: chrome/test/data/extensions/api_test/file_system_provider/read_file/test.js
|
| diff --git a/chrome/test/data/extensions/api_test/file_system_provider/read_file/test.js b/chrome/test/data/extensions/api_test/file_system_provider/read_file/test.js
|
| index 4164b7b76d6451f7af2320f80f5558ea5f1e7571..90b9b482d4aed56cc2965a2040b7f1ad2979afbf 100644
|
| --- a/chrome/test/data/extensions/api_test/file_system_provider/read_file/test.js
|
| +++ b/chrome/test/data/extensions/api_test/file_system_provider/read_file/test.js
|
| @@ -43,6 +43,19 @@ var TESTING_BROKEN_TIRAMISU_FILE = Object.freeze({
|
| });
|
|
|
| /**
|
| + * Metadata of a broken file used to read contents from, but it simulates
|
| + * a very long read, in order to verify the aborting mechanism.
|
| + * @type {Object}
|
| + * @const
|
| + */
|
| +var TESTING_VANILLA_FOR_ABORT_FILE = Object.freeze({
|
| + isDirectory: false,
|
| + name: 'vanilla.txt',
|
| + size: TESTING_TEXT.length,
|
| + modificationTime: new Date(2014, 1, 25, 7, 36, 12)
|
| +});
|
| +
|
| +/**
|
| * Requests reading contents of a file, previously opened with <code>
|
| * openRequestId</code>.
|
| *
|
| @@ -77,6 +90,11 @@ function onReadFileRequested(options, onSuccess, onError) {
|
| return;
|
| }
|
|
|
| + if (filePath == '/' + TESTING_VANILLA_FOR_ABORT_FILE.name) {
|
| + // Do nothing. This simulates a very slow read.
|
| + return;
|
| + }
|
| +
|
| if (filePath == '/' + TESTING_BROKEN_TIRAMISU_FILE.name) {
|
| onError('ACCESS_DENIED'); // enum ProviderError.
|
| return;
|
| @@ -103,6 +121,8 @@ function setUp(callback) {
|
| TESTING_TIRAMISU_FILE;
|
| test_util.defaultMetadata['/' + TESTING_BROKEN_TIRAMISU_FILE.name] =
|
| TESTING_BROKEN_TIRAMISU_FILE;
|
| + test_util.defaultMetadata['/' + TESTING_VANILLA_FOR_ABORT_FILE.name] =
|
| + TESTING_VANILLA_FOR_ABORT_FILE;
|
|
|
| chrome.fileSystemProvider.onReadFileRequested.addListener(
|
| onReadFileRequested);
|
| @@ -143,7 +163,8 @@ function runTests() {
|
| chrome.test.fail(error.name);
|
| });
|
| },
|
| - // Read contents of a file file, but with an error on the way. This should
|
| +
|
| + // Read contents of a file, but with an error on the way. This should
|
| // result in an error.
|
| function readEntriesError() {
|
| var onTestSuccess = chrome.test.callbackPass();
|
| @@ -163,12 +184,61 @@ function runTests() {
|
| fileReader.readAsText(file);
|
| },
|
| function(error) {
|
| - chrome.test.fail();
|
| + chrome.test.fail(error.name);
|
| });
|
| },
|
| function(error) {
|
| chrome.test.fail(error.name);
|
| });
|
| + },
|
| +
|
| + // Abort reading a file with a registered abort handler. Should result in a
|
| + // gracefully terminated reading operation.
|
| + function abortReadingSuccess() {
|
| + var onTestSuccess = chrome.test.callbackPass();
|
| +
|
| + var onAbortRequested = function(options, onSuccess, onError) {
|
| + chrome.fileSystemProvider.onAbortRequested.removeListener(
|
| + onAbortRequested);
|
| + onSuccess();
|
| + onTestSuccess();
|
| + };
|
| +
|
| + chrome.fileSystemProvider.onAbortRequested.addListener(
|
| + onAbortRequested);
|
| +
|
| + test_util.fileSystem.root.getFile(
|
| + TESTING_VANILLA_FOR_ABORT_FILE.name,
|
| + {create: false, exclusive: false},
|
| + function(fileEntry) {
|
| + fileEntry.file(function(file) {
|
| + var hadAbort = false;
|
| + var fileReader = new FileReader();
|
| + fileReader.onload = function(e) {
|
| + if (!hadAbort) {
|
| + chrome.test.fail(
|
| + 'Unexpectedly finished writing, despite aborting.');
|
| + return;
|
| + }
|
| + chrome.test.fail();
|
| + };
|
| + fileReader.onerror = function(e) {
|
| + chrome.test.assertEq(
|
| + 'AbortError', fileReader.error.name);
|
| + };
|
| + fileReader.readAsText(file);
|
| + setTimeout(function() {
|
| + // Abort the operation after it's started.
|
| + fileReader.abort();
|
| + }, 0);
|
| + },
|
| + function(error) {
|
| + chrome.test.fail(error.name);
|
| + });
|
| + },
|
| + function(error) {
|
| + chrome.test.fail(error.name);
|
| + });
|
| }
|
| ]);
|
| }
|
|
|