| Index: chrome/test/data/extensions/api_test/file_browser/filesystem_file_origin_url/background.js
|
| diff --git a/chrome/test/data/extensions/api_test/file_browser/filesystem_file_origin_url/background.js b/chrome/test/data/extensions/api_test/file_browser/filesystem_file_origin_url/background.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..05703e32e73c90ab3fa0dbc3d40575ee4edfe769
|
| --- /dev/null
|
| +++ b/chrome/test/data/extensions/api_test/file_browser/filesystem_file_origin_url/background.js
|
| @@ -0,0 +1,130 @@
|
| +// 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.
|
| +
|
| +/**
|
| + * Reports the promise state to the test system.
|
| + *
|
| + * @param {Promise} promise Promise to be resolved with the test result.
|
| + */
|
| +function reportPromise(promise) {
|
| + promise.then(
|
| + chrome.test.callbackPass(),
|
| + function(error) {
|
| + chrome.test.fail(error.stack || error);
|
| + });
|
| +}
|
| +
|
| +/**
|
| + * Checks if the promise is rejected or not.
|
| + * If the promise is fulfilled, it causes test failure.
|
| + *
|
| + * @param {Promise} promise Promise expected to reject.
|
| + * @return {Promise} Promise that is fulfilled when the given promise is
|
| + * rejected.
|
| + */
|
| +function expectRejection(promise) {
|
| + var errorMessage = new Error('Promise is fulfilled unintentionally.').stack;
|
| + return promise.then(function() {
|
| + chrome.test.fail(errorMessage);
|
| + return Promise.reject(errorMessage);
|
| + }, function(arg) {
|
| + /* Recover rejection. */
|
| + return arg;
|
| + });
|
| +}
|
| +
|
| +/**
|
| + * Calls webkitResolveLocalFileSystemURL, and returns the result promise.
|
| + *
|
| + * @param {string} url URL.
|
| + * @return {Promise} Promise to be fulfilled/rejected with the result.
|
| + */
|
| +function resolveLocalFileSystemURL(url) {
|
| + return new Promise(webkitResolveLocalFileSystemURL.bind(null, url));
|
| +}
|
| +
|
| +/**
|
| + * Sends XHR, and returns the result promise.
|
| + *
|
| + * @param {string} url URL.
|
| + * @return {Promise} Promise to be fulfilled/rejected with the result.
|
| + */
|
| +function sendXHR(url) {
|
| + return new Promise(function(fulfill, reject) {
|
| + var xhr = new XMLHttpRequest();
|
| + xhr.open('GET', url);
|
| + xhr.onload = fulfill;
|
| + try {
|
| + // XHR.send sends DOMException for security error.
|
| + xhr.send();
|
| + } catch (exception) {
|
| + reject('SECURITY_ERROR');
|
| + }
|
| + xhr.onerror = function() {
|
| + reject('ERROR_STATUS: ' + xhr.status);
|
| + };
|
| + });
|
| +}
|
| +
|
| +/**
|
| + * Requests the drive file system.
|
| + *
|
| + * @return {Promise} Promise to be fulfilled with the drive file system.
|
| + */
|
| +function requestDriveFileSystem() {
|
| + return new Promise(function(fulfill) {
|
| + chrome.fileBrowserPrivate.requestFileSystem(
|
| + 'drive:drive-user',
|
| + function(fileSystem) {
|
| + chrome.test.assertTrue(!!fileSystem);
|
| + fulfill(fileSystem);
|
| + });
|
| + });
|
| +}
|
| +
|
| +/**
|
| + * Ensures resolveLocalFileSystemURL does not resolve filesystem:file/// URL.
|
| + *
|
| + * @return {Promise} Promise to be resolved with the test result.
|
| + */
|
| +function testResolveFileSystemURL() {
|
| + reportPromise(requestDriveFileSystem().then(function(fileSystem) {
|
| + return Promise.all([
|
| + resolveLocalFileSystemURL(
|
| + 'filesystem:chrome-extension://kidcpjlbjdmcnmccjhjdckhbngnhnepk/' +
|
| + 'external/drive/root/test_dir/test_file.xul'),
|
| + expectRejection(resolveLocalFileSystemURL(
|
| + 'filesystem:file:///external/drive/root/test_dir/test_file.xul'))
|
| + ]);
|
| + }));
|
| +}
|
| +
|
| +/**
|
| + * Ensures filesystem:file/// URL does not respond to XHR.
|
| + *
|
| + * @return {Promise} Promise to be resolved with the test result.
|
| + */
|
| +function testSendXHRToFileSystemURL() {
|
| + // Thus we grant the permission to the extension in
|
| + // chrome.fileBrowserPrivate.requestFileSystem, we need to call the method
|
| + // before.
|
| + reportPromise(requestDriveFileSystem().then(function(fileSystem) {
|
| + return Promise.all([
|
| + sendXHR(
|
| + 'filesystem:chrome-extension://kidcpjlbjdmcnmccjhjdckhbngnhnepk/' +
|
| + 'external/drive/root/test_dir/test_file.xul'),
|
| + expectRejection(sendXHR(
|
| + 'filesystem:file:///external/drive/root/test_dir/test_file.xul')).
|
| + then(function(error) {
|
| + chrome.test.assertEq('ERROR_STATUS: 0', error);
|
| + })
|
| + ]);
|
| + }));
|
| +}
|
| +
|
| +// Run tests.
|
| +chrome.test.runTests([
|
| + testResolveFileSystemURL,
|
| + testSendXHRToFileSystemURL
|
| +]);
|
|
|