| Index: ui/file_manager/file_manager/background/js/test_util.js
|
| diff --git a/ui/file_manager/file_manager/background/js/test_util.js b/ui/file_manager/file_manager/background/js/test_util.js
|
| deleted file mode 100644
|
| index 6b92b3b55059cdade17589906e04b15ef4b0e18c..0000000000000000000000000000000000000000
|
| --- a/ui/file_manager/file_manager/background/js/test_util.js
|
| +++ /dev/null
|
| @@ -1,719 +0,0 @@
|
| -// Copyright (c) 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.
|
| -
|
| -/**
|
| - * Namespace for test related things.
|
| - */
|
| -var test = test || {};
|
| -
|
| -/**
|
| - * Namespace for test utility functions.
|
| - *
|
| - * Public functions in the test.util.sync and the test.util.async namespaces are
|
| - * published to test cases and can be called by using callRemoteTestUtil. The
|
| - * arguments are serialized as JSON internally. If application ID is passed to
|
| - * callRemoteTestUtil, the content window of the application is added as the
|
| - * first argument. The functions in the test.util.async namespace are passed the
|
| - * callback function as the last argument.
|
| - */
|
| -test.util = {};
|
| -
|
| -/**
|
| - * Namespace for synchronous utility functions.
|
| - */
|
| -test.util.sync = {};
|
| -
|
| -/**
|
| - * Namespace for asynchronous utility functions.
|
| - */
|
| -test.util.async = {};
|
| -
|
| -/**
|
| - * Extension ID of the testing extension.
|
| - * @type {string}
|
| - * @const
|
| - */
|
| -test.util.TESTING_EXTENSION_ID = 'oobinhbdbiehknkpbpejbbpdbkdjmoco';
|
| -
|
| -/**
|
| - * Opens the main Files.app's window and waits until it is ready.
|
| - *
|
| - * @param {Object} appState App state.
|
| - * @param {function(string)} callback Completion callback with the new window's
|
| - * App ID.
|
| - */
|
| -test.util.async.openMainWindow = function(appState, callback) {
|
| - launchFileManager(appState,
|
| - undefined, // opt_type
|
| - undefined, // opt_id
|
| - callback);
|
| -};
|
| -
|
| -/**
|
| - * Obtains window information.
|
| - *
|
| - * @return {Object.<string, {innerWidth:number, innerHeight:number}>} Map window
|
| - * ID and window information.
|
| - */
|
| -test.util.sync.getWindows = function() {
|
| - var windows = {};
|
| - for (var id in background.appWindows) {
|
| - var windowWrapper = background.appWindows[id];
|
| - windows[id] = {
|
| - outerWidth: windowWrapper.contentWindow.outerWidth,
|
| - outerHeight: windowWrapper.contentWindow.outerHeight
|
| - };
|
| - }
|
| - for (var id in background.dialogs) {
|
| - windows[id] = {
|
| - outerWidth: background.dialogs[id].outerWidth,
|
| - outerHeight: background.dialogs[id].outerHeight
|
| - };
|
| - }
|
| - return windows;
|
| -};
|
| -
|
| -/**
|
| - * Closes the specified window.
|
| - *
|
| - * @param {string} appId AppId of window to be closed.
|
| - * @return {boolean} Result: True if success, false otherwise.
|
| - */
|
| -test.util.sync.closeWindow = function(appId) {
|
| - if (appId in background.appWindows &&
|
| - background.appWindows[appId].contentWindow) {
|
| - background.appWindows[appId].close();
|
| - return true;
|
| - }
|
| - return false;
|
| -};
|
| -
|
| -/**
|
| - * Gets a document in the Files.app's window, including iframes.
|
| - *
|
| - * @param {Window} contentWindow Window to be used.
|
| - * @param {string=} opt_iframeQuery Query for the iframe.
|
| - * @return {Document=} Returns the found document or undefined if not found.
|
| - * @private
|
| - */
|
| -test.util.sync.getDocument_ = function(contentWindow, opt_iframeQuery) {
|
| - if (opt_iframeQuery) {
|
| - var iframe = contentWindow.document.querySelector(opt_iframeQuery);
|
| - return iframe && iframe.contentWindow && iframe.contentWindow.document;
|
| - }
|
| -
|
| - return contentWindow.document;
|
| -};
|
| -
|
| -/**
|
| - * Gets total Javascript error count from background page and each app window.
|
| - * @return {number} Error count.
|
| - */
|
| -test.util.sync.getErrorCount = function() {
|
| - var totalCount = JSErrorCount;
|
| - for (var appId in background.appWindows) {
|
| - var contentWindow = background.appWindows[appId].contentWindow;
|
| - if (contentWindow.JSErrorCount)
|
| - totalCount += contentWindow.JSErrorCount;
|
| - }
|
| - return totalCount;
|
| -};
|
| -
|
| -/**
|
| - * Resizes the window to the specified dimensions.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {number} width Window width.
|
| - * @param {number} height Window height.
|
| - * @return {boolean} True for success.
|
| - */
|
| -test.util.sync.resizeWindow = function(contentWindow, width, height) {
|
| - background.appWindows[contentWindow.appID].resizeTo(width, height);
|
| - return true;
|
| -};
|
| -
|
| -/**
|
| - * Returns an array with the files currently selected in the file manager.
|
| - * TODO(hirono): Integrate the method into getFileList method.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @return {Array.<string>} Array of selected files.
|
| - */
|
| -test.util.sync.getSelectedFiles = function(contentWindow) {
|
| - var table = contentWindow.document.querySelector('#detail-table');
|
| - var rows = table.querySelectorAll('li');
|
| - var selected = [];
|
| - for (var i = 0; i < rows.length; ++i) {
|
| - if (rows[i].hasAttribute('selected')) {
|
| - selected.push(
|
| - rows[i].querySelector('.filename-label').textContent);
|
| - }
|
| - }
|
| - return selected;
|
| -};
|
| -
|
| -/**
|
| - * Returns an array with the files on the file manager's file list.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @return {Array.<Array.<string>>} Array of rows.
|
| - */
|
| -test.util.sync.getFileList = function(contentWindow) {
|
| - var table = contentWindow.document.querySelector('#detail-table');
|
| - var rows = table.querySelectorAll('li');
|
| - var fileList = [];
|
| - for (var j = 0; j < rows.length; ++j) {
|
| - var row = rows[j];
|
| - fileList.push([
|
| - row.querySelector('.filename-label').textContent,
|
| - row.querySelector('.size').textContent,
|
| - row.querySelector('.type').textContent,
|
| - row.querySelector('.date').textContent
|
| - ]);
|
| - }
|
| - return fileList;
|
| -};
|
| -
|
| -/**
|
| - * Queries all elements.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} targetQuery Query to specify the element.
|
| - * @param {?string} iframeQuery Iframe selector or null if no iframe.
|
| - * @param {Array.<string>=} opt_styleNames List of CSS property name to be
|
| - * obtained.
|
| - * @return {Array.<{attributes:Object.<string, string>, text:string,
|
| - * styles:Object.<string, string>, hidden:boolean}>} Element
|
| - * information that contains contentText, attribute names and
|
| - * values, hidden attribute, and style names and values.
|
| - */
|
| -test.util.sync.queryAllElements = function(
|
| - contentWindow, targetQuery, iframeQuery, opt_styleNames) {
|
| - var doc = test.util.sync.getDocument_(contentWindow, iframeQuery);
|
| - if (!doc)
|
| - return [];
|
| - // The return value of querySelectorAll is not an array.
|
| - return Array.prototype.map.call(
|
| - doc.querySelectorAll(targetQuery),
|
| - function(element) {
|
| - var attributes = {};
|
| - for (var i = 0; i < element.attributes.length; i++) {
|
| - attributes[element.attributes[i].nodeName] =
|
| - element.attributes[i].nodeValue;
|
| - }
|
| - var styles = {};
|
| - var styleNames = opt_styleNames || [];
|
| - var computedStyles = contentWindow.getComputedStyle(element);
|
| - for (var i = 0; i < styleNames.length; i++) {
|
| - styles[styleNames[i]] = computedStyles[styleNames[i]];
|
| - }
|
| - var text = element.textContent;
|
| - return {
|
| - attributes: attributes,
|
| - text: text,
|
| - styles: styles,
|
| - // The hidden attribute is not in the element.attributes even if
|
| - // element.hasAttribute('hidden') is true.
|
| - hidden: !!element.hidden
|
| - };
|
| - });
|
| -};
|
| -
|
| -/**
|
| - * Assigns the text to the input element.
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} query Query for the input element.
|
| - * @param {string} text Text to be assigned.
|
| - */
|
| -test.util.sync.inputText = function(contentWindow, query, text) {
|
| - var input = contentWindow.document.querySelector(query);
|
| - input.value = text;
|
| -};
|
| -
|
| -/**
|
| - * Fakes pressing the down arrow until the given |filename| is selected.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} filename Name of the file to be selected.
|
| - * @return {boolean} True if file got selected, false otherwise.
|
| - */
|
| -test.util.sync.selectFile = function(contentWindow, filename) {
|
| - var rows = contentWindow.document.querySelectorAll('#detail-table li');
|
| - test.util.sync.fakeKeyDown(contentWindow, '#file-list', 'Home', false);
|
| - for (var index = 0; index < rows.length; ++index) {
|
| - var selection = test.util.sync.getSelectedFiles(contentWindow);
|
| - if (selection.length === 1 && selection[0] === filename)
|
| - return true;
|
| - test.util.sync.fakeKeyDown(contentWindow, '#file-list', 'Down', false);
|
| - }
|
| - console.error('Failed to select file "' + filename + '"');
|
| - return false;
|
| -};
|
| -
|
| -/**
|
| - * Open the file by selectFile and fakeMouseDoubleClick.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} filename Name of the file to be opened.
|
| - * @return {boolean} True if file got selected and a double click message is
|
| - * sent, false otherwise.
|
| - */
|
| -test.util.sync.openFile = function(contentWindow, filename) {
|
| - var query = '#file-list li.table-row[selected] .filename-label span';
|
| - return test.util.sync.selectFile(contentWindow, filename) &&
|
| - test.util.sync.fakeMouseDoubleClick(contentWindow, query);
|
| -};
|
| -
|
| -/**
|
| - * Selects a volume specified by its icon name
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} iconName Name of the volume icon.
|
| - * @param {function(boolean)} callback Callback function to notify the caller
|
| - * whether the target is found and mousedown and click events are sent.
|
| - */
|
| -test.util.async.selectVolume = function(contentWindow, iconName, callback) {
|
| - var query = '[volume-type-icon=' + iconName + ']';
|
| - var driveQuery = '[volume-type-icon=drive]';
|
| - var isDriveSubVolume = iconName == 'drive_recent' ||
|
| - iconName == 'drive_shared_with_me' ||
|
| - iconName == 'drive_offline';
|
| - var preSelection = false;
|
| - var steps = {
|
| - checkQuery: function() {
|
| - if (contentWindow.document.querySelector(query)) {
|
| - steps.sendEvents();
|
| - return;
|
| - }
|
| - // If the target volume is sub-volume of drive, we must click 'drive'
|
| - // before clicking the sub-item.
|
| - if (!preSelection) {
|
| - if (!isDriveSubVolume) {
|
| - callback(false);
|
| - return;
|
| - }
|
| - if (!(test.util.sync.fakeMouseDown(contentWindow, driveQuery) &&
|
| - test.util.sync.fakeMouseClick(contentWindow, driveQuery))) {
|
| - callback(false);
|
| - return;
|
| - }
|
| - preSelection = true;
|
| - }
|
| - setTimeout(steps.checkQuery, 50);
|
| - },
|
| - sendEvents: function() {
|
| - // To change the selected volume, we have to send both events 'mousedown'
|
| - // and 'click' to the navigation list.
|
| - callback(test.util.sync.fakeMouseDown(contentWindow, query) &&
|
| - test.util.sync.fakeMouseClick(contentWindow, query));
|
| - }
|
| - };
|
| - steps.checkQuery();
|
| -};
|
| -
|
| -/**
|
| - * Executes Javascript code on a webview and returns the result.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} webViewQuery Selector for the web view.
|
| - * @param {string} code Javascript code to be executed within the web view.
|
| - * @param {function(*)} callback Callback function with results returned by the
|
| - * script.
|
| - */
|
| -test.util.async.executeScriptInWebView = function(
|
| - contentWindow, webViewQuery, code, callback) {
|
| - var webView = contentWindow.document.querySelector(webViewQuery);
|
| - webView.executeScript({code: code}, callback);
|
| -};
|
| -
|
| -/**
|
| - * Sends an event to the element specified by |targetQuery|.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} targetQuery Query to specify the element.
|
| - * @param {Event} event Event to be sent.
|
| - * @param {string=} opt_iframeQuery Optional iframe selector.
|
| - * @return {boolean} True if the event is sent to the target, false otherwise.
|
| - */
|
| -test.util.sync.sendEvent = function(
|
| - contentWindow, targetQuery, event, opt_iframeQuery) {
|
| - var doc = test.util.sync.getDocument_(contentWindow, opt_iframeQuery);
|
| - if (doc) {
|
| - var target = doc.querySelector(targetQuery);
|
| - if (target) {
|
| - target.dispatchEvent(event);
|
| - return true;
|
| - }
|
| - }
|
| - console.error('Target element for ' + targetQuery + ' not found.');
|
| - return false;
|
| -};
|
| -
|
| -/**
|
| - * Sends an fake event having the specified type to the target query.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} targetQuery Query to specify the element.
|
| - * @param {string} eventType Type of event.
|
| - * @param {Object=} opt_additionalProperties Object contaning additional
|
| - * properties.
|
| - * @return {boolean} True if the event is sent to the target, false otherwise.
|
| - */
|
| -test.util.sync.fakeEvent = function(contentWindow,
|
| - targetQuery,
|
| - eventType,
|
| - opt_additionalProperties) {
|
| - var event = new Event(eventType, opt_additionalProperties || {});
|
| - if (opt_additionalProperties) {
|
| - for (var name in opt_additionalProperties) {
|
| - event[name] = opt_additionalProperties[name];
|
| - }
|
| - }
|
| - return test.util.sync.sendEvent(contentWindow, targetQuery, event);
|
| -};
|
| -
|
| -/**
|
| - * Sends a fake key event to the element specified by |targetQuery| with the
|
| - * given |keyIdentifier| and optional |ctrl| modifier to the file manager.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} targetQuery Query to specify the element.
|
| - * @param {string} keyIdentifier Identifier of the emulated key.
|
| - * @param {boolean} ctrl Whether CTRL should be pressed, or not.
|
| - * @param {string=} opt_iframeQuery Optional iframe selector.
|
| - * @return {boolean} True if the event is sent to the target, false otherwise.
|
| - */
|
| -test.util.sync.fakeKeyDown = function(
|
| - contentWindow, targetQuery, keyIdentifier, ctrl, opt_iframeQuery) {
|
| - var event = new KeyboardEvent(
|
| - 'keydown',
|
| - { bubbles: true, keyIdentifier: keyIdentifier, ctrlKey: ctrl });
|
| - return test.util.sync.sendEvent(
|
| - contentWindow, targetQuery, event, opt_iframeQuery);
|
| -};
|
| -
|
| -/**
|
| - * Simulates a fake mouse click (left button, single click) on the element
|
| - * specified by |targetQuery|. If the element has the click method, just calls
|
| - * it. Otherwise, this sends 'mouseover', 'mousedown', 'mouseup' and 'click'
|
| - * events in turns.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} targetQuery Query to specify the element.
|
| - * @param {string=} opt_iframeQuery Optional iframe selector.
|
| - * @return {boolean} True if the all events are sent to the target, false
|
| - * otherwise.
|
| - */
|
| -test.util.sync.fakeMouseClick = function(
|
| - contentWindow, targetQuery, opt_iframeQuery) {
|
| - var mouseOverEvent = new MouseEvent('mouseover', {bubbles: true, detail: 1});
|
| - var resultMouseOver = test.util.sync.sendEvent(
|
| - contentWindow, targetQuery, mouseOverEvent, opt_iframeQuery);
|
| - var mouseDownEvent = new MouseEvent('mousedown', {bubbles: true, detail: 1});
|
| - var resultMouseDown = test.util.sync.sendEvent(
|
| - contentWindow, targetQuery, mouseDownEvent, opt_iframeQuery);
|
| - var mouseUpEvent = new MouseEvent('mouseup', {bubbles: true, detail: 1});
|
| - var resultMouseUp = test.util.sync.sendEvent(
|
| - contentWindow, targetQuery, mouseUpEvent, opt_iframeQuery);
|
| - var clickEvent = new MouseEvent('click', {bubbles: true, detail: 1});
|
| - var resultClick = test.util.sync.sendEvent(
|
| - contentWindow, targetQuery, clickEvent, opt_iframeQuery);
|
| - return resultMouseOver && resultMouseDown && resultMouseUp && resultClick;
|
| -};
|
| -
|
| -/**
|
| - * Simulates a fake mouse click (right button, single click) on the element
|
| - * specified by |targetQuery|.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} targetQuery Query to specify the element.
|
| - * @param {string=} opt_iframeQuery Optional iframe selector.
|
| - * @return {boolean} True if the event is sent to the target, false
|
| - * otherwise.
|
| - */
|
| -test.util.sync.fakeMouseRightClick = function(
|
| - contentWindow, targetQuery, opt_iframeQuery) {
|
| - var contextMenuEvent = new MouseEvent('contextmenu', {bubbles: true});
|
| - var result = test.util.sync.sendEvent(
|
| - contentWindow, targetQuery, contextMenuEvent, opt_iframeQuery);
|
| - return result;
|
| -};
|
| -
|
| -/**
|
| - * Simulates a fake double click event (left button) to the element specified by
|
| - * |targetQuery|.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} targetQuery Query to specify the element.
|
| - * @param {string=} opt_iframeQuery Optional iframe selector.
|
| - * @return {boolean} True if the event is sent to the target, false otherwise.
|
| - */
|
| -test.util.sync.fakeMouseDoubleClick = function(
|
| - contentWindow, targetQuery, opt_iframeQuery) {
|
| - // Double click is always preceded with a single click.
|
| - if (!test.util.sync.fakeMouseClick(
|
| - contentWindow, targetQuery, opt_iframeQuery)) {
|
| - return false;
|
| - }
|
| -
|
| - // Send the second click event, but with detail equal to 2 (number of clicks)
|
| - // in a row.
|
| - var event = new MouseEvent('click', { bubbles: true, detail: 2 });
|
| - if (!test.util.sync.sendEvent(
|
| - contentWindow, targetQuery, event, opt_iframeQuery)) {
|
| - return false;
|
| - }
|
| -
|
| - // Send the double click event.
|
| - var event = new MouseEvent('dblclick', { bubbles: true });
|
| - if (!test.util.sync.sendEvent(
|
| - contentWindow, targetQuery, event, opt_iframeQuery)) {
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -};
|
| -
|
| -/**
|
| - * Sends a fake mouse down event to the element specified by |targetQuery|.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} targetQuery Query to specify the element.
|
| - * @param {string=} opt_iframeQuery Optional iframe selector.
|
| - * @return {boolean} True if the event is sent to the target, false otherwise.
|
| - */
|
| -test.util.sync.fakeMouseDown = function(
|
| - contentWindow, targetQuery, opt_iframeQuery) {
|
| - var event = new MouseEvent('mousedown', { bubbles: true });
|
| - return test.util.sync.sendEvent(
|
| - contentWindow, targetQuery, event, opt_iframeQuery);
|
| -};
|
| -
|
| -/**
|
| - * Sends a fake mouse up event to the element specified by |targetQuery|.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} targetQuery Query to specify the element.
|
| - * @param {string=} opt_iframeQuery Optional iframe selector.
|
| - * @return {boolean} True if the event is sent to the target, false otherwise.
|
| - */
|
| -test.util.sync.fakeMouseUp = function(
|
| - contentWindow, targetQuery, opt_iframeQuery) {
|
| - var event = new MouseEvent('mouseup', { bubbles: true });
|
| - return test.util.sync.sendEvent(
|
| - contentWindow, targetQuery, event, opt_iframeQuery);
|
| -};
|
| -
|
| -/**
|
| - * Selects |filename| and fakes pressing Ctrl+C, Ctrl+V (copy, paste).
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} filename Name of the file to be copied.
|
| - * @return {boolean} True if copying got simulated successfully. It does not
|
| - * say if the file got copied, or not.
|
| - */
|
| -test.util.sync.copyFile = function(contentWindow, filename) {
|
| - if (!test.util.sync.selectFile(contentWindow, filename))
|
| - return false;
|
| - // Ctrl+C and Ctrl+V
|
| - test.util.sync.fakeKeyDown(contentWindow, '#file-list', 'U+0043', true);
|
| - test.util.sync.fakeKeyDown(contentWindow, '#file-list', 'U+0056', true);
|
| - return true;
|
| -};
|
| -
|
| -/**
|
| - * Selects |filename| and fakes pressing the Delete key.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} filename Name of the file to be deleted.
|
| - * @return {boolean} True if deleting got simulated successfully. It does not
|
| - * say if the file got deleted, or not.
|
| - */
|
| -test.util.sync.deleteFile = function(contentWindow, filename) {
|
| - if (!test.util.sync.selectFile(contentWindow, filename))
|
| - return false;
|
| - // Delete
|
| - test.util.sync.fakeKeyDown(contentWindow, '#file-list', 'U+007F', false);
|
| - return true;
|
| -};
|
| -
|
| -/**
|
| - * Execute a command on the document in the specified window.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} command Command name.
|
| - * @return {boolean} True if the command is executed successfully.
|
| - */
|
| -test.util.sync.execCommand = function(contentWindow, command) {
|
| - return contentWindow.document.execCommand(command);
|
| -};
|
| -
|
| -/**
|
| - * Override the installWebstoreItem method in private api for test.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} expectedItemId Item ID to be called this method with.
|
| - * @param {?string} intendedError Error message to be returned when the item id
|
| - * matches. 'null' represents no error.
|
| - * @return {boolean} Always return true.
|
| - */
|
| -test.util.sync.overrideInstallWebstoreItemApi =
|
| - function(contentWindow, expectedItemId, intendedError) {
|
| - var setLastError = function(message) {
|
| - contentWindow.chrome.runtime.lastError =
|
| - message ? {message: message} : null;
|
| - };
|
| -
|
| - var installWebstoreItem = function(itemId, silentInstallation, callback) {
|
| - setTimeout(function() {
|
| - if (itemId !== expectedItemId) {
|
| - setLastError('Invalid Chrome Web Store item ID');
|
| - callback();
|
| - return;
|
| - }
|
| -
|
| - setLastError(intendedError);
|
| - callback();
|
| - });
|
| - };
|
| -
|
| - test.util.executedTasks_ = [];
|
| - contentWindow.chrome.fileManagerPrivate.installWebstoreItem =
|
| - installWebstoreItem;
|
| - return true;
|
| -};
|
| -
|
| -/**
|
| - * Override the task-related methods in private api for test.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {Array.<Object>} taskList List of tasks to be returned in
|
| - * fileManagerPrivate.getFileTasks().
|
| - * @return {boolean} Always return true.
|
| - */
|
| -test.util.sync.overrideTasks = function(contentWindow, taskList) {
|
| - var getFileTasks = function(urls, onTasks) {
|
| - // Call onTask asynchronously (same with original getFileTasks).
|
| - setTimeout(function() {
|
| - onTasks(taskList);
|
| - });
|
| - };
|
| -
|
| - var executeTask = function(taskId, url) {
|
| - test.util.executedTasks_.push(taskId);
|
| - };
|
| -
|
| - var setDefaultTask = function(taskId) {
|
| - for (var i = 0; i < taskList.length; i++) {
|
| - taskList[i].isDefault = taskList[i].taskId === taskId;
|
| - }
|
| - };
|
| -
|
| - test.util.executedTasks_ = [];
|
| - contentWindow.chrome.fileManagerPrivate.getFileTasks = getFileTasks;
|
| - contentWindow.chrome.fileManagerPrivate.executeTask = executeTask;
|
| - contentWindow.chrome.fileManagerPrivate.setDefaultTask = setDefaultTask;
|
| - return true;
|
| -};
|
| -
|
| -/**
|
| - * Obtains the list of executed tasks.
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @return {Array.<string>} List of executed task ID.
|
| - */
|
| -test.util.sync.getExecutedTasks = function(contentWindow) {
|
| - if (!test.util.executedTasks_) {
|
| - console.error('Please call overrideTasks() first.');
|
| - return null;
|
| - }
|
| - return test.util.executedTasks_;
|
| -};
|
| -
|
| -/**
|
| - * Invoke chrome.fileManagerPrivate.visitDesktop(profileId) to cause window
|
| - * teleportation.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} profileId Destination profile's ID.
|
| - * @return {boolean} Always return true.
|
| - */
|
| -test.util.sync.visitDesktop = function(contentWindow, profileId) {
|
| - contentWindow.chrome.fileManagerPrivate.visitDesktop(profileId);
|
| - return true;
|
| -};
|
| -
|
| -/**
|
| - * Runs the 'Move to profileId' menu.
|
| - *
|
| - * @param {Window} contentWindow Window to be tested.
|
| - * @param {string} profileId Destination profile's ID.
|
| - * @return {boolean} True if the menu is found and run.
|
| - */
|
| -test.util.sync.runVisitDesktopMenu = function(contentWindow, profileId) {
|
| - var list = contentWindow.document.querySelectorAll('.visit-desktop');
|
| - for (var i = 0; i < list.length; ++i) {
|
| - if (list[i].label.indexOf(profileId) != -1) {
|
| - var activateEvent = contentWindow.document.createEvent('Event');
|
| - activateEvent.initEvent('activate');
|
| - list[i].dispatchEvent(activateEvent);
|
| - return true;
|
| - }
|
| - }
|
| - return false;
|
| -};
|
| -
|
| -/**
|
| - * Registers message listener, which runs test utility functions.
|
| - */
|
| -test.util.registerRemoteTestUtils = function() {
|
| - // Register the message listener.
|
| - var onMessage = chrome.runtime ? chrome.runtime.onMessageExternal :
|
| - chrome.extension.onMessageExternal;
|
| - // Return true for asynchronous functions and false for synchronous.
|
| - onMessage.addListener(function(request, sender, sendResponse) {
|
| - // Check the sender.
|
| - if (sender.id != test.util.TESTING_EXTENSION_ID) {
|
| - console.error('The testing extension must be white-listed.');
|
| - return false;
|
| - }
|
| - // Set a global flag that we are in tests, so other components are aware
|
| - // of it.
|
| - window.IN_TEST = true;
|
| - // Check the function name.
|
| - if (!request.func || request.func[request.func.length - 1] == '_') {
|
| - request.func = '';
|
| - }
|
| - // Prepare arguments.
|
| - var args = request.args.slice(); // shallow copy
|
| - if (request.appId) {
|
| - if (background.appWindows[request.appId]) {
|
| - args.unshift(background.appWindows[request.appId].contentWindow);
|
| - } else if (background.dialogs[request.appId]) {
|
| - args.unshift(background.dialogs[request.appId]);
|
| - } else {
|
| - console.error('Specified window not found: ' + request.appId);
|
| - return false;
|
| - }
|
| - }
|
| - // Call the test utility function and respond the result.
|
| - if (test.util.async[request.func]) {
|
| - args[test.util.async[request.func].length - 1] = function() {
|
| - console.debug('Received the result of ' + request.func);
|
| - sendResponse.apply(null, arguments);
|
| - };
|
| - console.debug('Waiting for the result of ' + request.func);
|
| - test.util.async[request.func].apply(null, args);
|
| - return true;
|
| - } else if (test.util.sync[request.func]) {
|
| - sendResponse(test.util.sync[request.func].apply(null, args));
|
| - return false;
|
| - } else {
|
| - console.error('Invalid function name.');
|
| - return false;
|
| - }
|
| - });
|
| -};
|
| -
|
| -// Register the test utils.
|
| -test.util.registerRemoteTestUtils();
|
|
|