Home | History | Annotate | Download | only in js
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 /**
      6  * Mock out the chrome.fileBrowserPrivate API for use in the harness.
      7  */
      8 chrome.fileBrowserPrivate = {
      9 
     10   /**
     11    * Return a normal HTML5 filesystem api, rather than the real local
     12    * filesystem.
     13    *
     14    * You must start chrome with --allow-file-access-from-files and
     15    * --unlimited-quota-for-files in order for this to work.
     16    */
     17   requestLocalFileSystem: function(callback) {
     18     window.webkitRequestFileSystem(window.PERSISTENT, 16 * 1024 * 1024,
     19                                    callback,
     20                                    util.ferr('Error requesting filesystem'));
     21   },
     22 
     23   /**
     24    * View multiple files.
     25    */
     26   viewFiles: function(selectedFiles) {
     27     console.log('viewFiles called: ' + selectedFiles.length +
     28                 ' files selected');
     29   },
     30 
     31   /**
     32    * Select multiple files.
     33    */
     34   selectFiles: function(selectedFiles) {
     35     console.log('selectFiles called: ' + selectedFiles.length +
     36                 ' files selected');
     37   },
     38 
     39   /**
     40    * Select a single file.
     41    */
     42   selectFile: function(selectedFile, index) {
     43     console.log('selectFile called: ' + selectedFile + ', ' + index);
     44   },
     45 
     46   /**
     47    * Cancel the dialog without selecting anything.
     48    */
     49   cancelDialog: function() {
     50     console.log('cancelDialog called');
     51   },
     52 
     53   /**
     54    * Disk mount/unmount notification.
     55    */
     56   onDiskChanged: {
     57     callbacks: [],
     58     addListener: function(cb) { this.callbacks.push(cb) }
     59   },
     60 
     61   getFileTasks: function(urlList, callback) {
     62     if (urlList.length == 0)
     63       return callback([]);
     64 
     65     if (!callback)
     66       throw new Error('Missing callback');
     67 
     68     var tasks =
     69     [ { taskId: 'upload-picasr',
     70         title: 'Upload to Picasr',
     71         regexp: /\.(jpe?g|gif|png|cr2?|tiff)$/i,
     72         iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sEEBcJA0AW6BUAAACdSURBVCjPzZExC4MwEIW/1L2U/gwHf1/3WrqIkz/PWVAoXdolRNLBJNhwiS6FPjguuZf3csnBL2HBLikNtSFmS3yIROUMWhKrHR2XNZiLa9tGkaqtDa4TjBX0yIf8+osLnT3BnKDIvddm/uCRE+fgDc7r4iBPJWAWDADQLh8Tt3neSAYKdAu8gc69L4rAN8v+Fk/3DrxcluD5mr/CB34jRiE3x1kcAAAAAElFTkSuQmCC',
     73       },
     74       { taskId: 'upload-orcbook',
     75         title: 'Upload to OrcBook',
     76         regexp: /\.(jpe?g|png|cr2?|tiff)$/i,
     77         iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sEEBcOAw9XftIAAADFSURBVCjPrZKxCsIwEIa/FHFwsvYxROjSQXAoqLiIL+xgBtvZ91A6uOnQc2hT0zRqkR4c3P25+/PfJTCwLU6wEpgBWkDXuInDPSwF5r7mJIeNQFTnIiCeONpVdYlLoK9wEUhNg8+B9FDVaZcgCKAovjTXfvPJFwGZtKW60pt8bOGBzfLouemnFY/MAs8wDeEI4NzaybewBu4AysKVgrK0gfe5iB9vjdAUqQ/S1Y/R3IX9Zc1zxc7zxe2/0Iskt7AsG0hhx14W8XV43FgV4gAAAABJRU5ErkJggg==',
     78       },
     79     ];
     80 
     81     // Copy all tasks, then remove the ones that don't match.
     82     var candidateTasks = [].concat(tasks);
     83 
     84     for (var i = 0; i < urlList.length; i++) {
     85       if (candidateTasks.length == 0)
     86         return callback([]);
     87 
     88       for (var taskIndex = candidateTasks.length - 1; taskIndex >= 0;
     89            taskIndex--) {
     90         if (candidateTasks[taskIndex].regexp.test(urlList[i]))
     91           continue;
     92 
     93         // This task doesn't match this url, remove the task.
     94         candidateTasks.splice(taskIndex, 1);
     95       }
     96     }
     97 
     98     callback(candidateTasks);
     99   },
    100 
    101   executeTask: function(taskId, urlList) {
    102     console.log('executing task: ' + taskId + ': ' + urlList.length + ' urls');
    103   },
    104 
    105   /**
    106    * Return localized strings.
    107    */
    108   getStrings: function(callback) {
    109     // Keep this list in sync with the strings in generated_resources.grd and
    110     // extension_file_manager_api.cc!
    111     callback({
    112       LOCALE_FMT_DATE_SHORT: '%b %-d, %Y',
    113       LOCALE_MONTHS_SHORT: 'Jan^Feb^Mar^Apr^May^Jun^Jul^Aug^Sep^Oct^Nov^Dec',
    114       LOCALE_DAYS_SHORT: 'Sun^Mon^Tue^Wed^Thu^Fri^Sat',
    115 
    116       BODY_FONT_FAMILY: 'sans-serif',
    117       BODY_FONT_SIZE: '13px',
    118 
    119       FILE_IS_DIRECTORY: 'Folder',
    120       PARENT_DIRECTORY: 'Parent Directory',
    121 
    122       ROOT_DIRECTORY_LABEL: 'Files',
    123       DOWNLOADS_DIRECTORY_LABEL: 'File Shelf',
    124       MEDIA_DIRECTORY_LABEL: 'External Storage',
    125       NAME_COLUMN_LABEL: 'Name',
    126       SIZE_COLUMN_LABEL: 'Size',
    127       DATE_COLUMN_LABEL: 'Date',
    128       PREVIEW_COLUMN_LABEL: 'Preview',
    129 
    130       ERROR_CREATING_FOLDER: 'Unable to create folder "$1": $2',
    131       ERROR_INVALID_FOLDER_CHARACTER: 'Invalid character in folder name: $1',
    132       ERROR_INVALID_FILE_CHARACTER: 'Invalid character in file name: $1',
    133       NEW_FOLDER_PROMPT: 'Enter a name for the new folder',
    134       NEW_FOLDER_BUTTON_LABEL: 'New Folder',
    135       FILENAME_LABEL: 'File Name',
    136 
    137       EJECT_BUTTON: 'Eject',
    138       IMAGE_DIMENSIONS: 'Image Dimensions',
    139       VOLUME_LABEL: 'Volume Label',
    140       READ_ONLY: 'Read Only',
    141 
    142       ERROR_RENAMING: 'Unable to rename "$1": $2',
    143       RENAME_PROMPT: 'Enter a new name',
    144       RENAME_BUTTON_LABEL: 'Rename',
    145 
    146       ERROR_DELETING: 'Unable to delete "$1": $2',
    147       DELETE_BUTTON_LABEL: 'Delete',
    148 
    149       ERROR_MOVING: 'Unable to move "$1": $2',
    150       MOVE_BUTTON_LABEL: 'Move',
    151 
    152       ERROR_PASTING: 'Unable to paste "$1": $2',
    153       PASTE_BUTTON_LABEL: 'Paste',
    154 
    155       COPY_BUTTON_LABEL: 'Copy',
    156       CUT_BUTTON_LABEL: 'Cut',
    157 
    158       DEVICE_TYPE_FLASH: 'Flash Device',
    159       DEVICE_TYPE_HDD: 'Hard Disk Device',
    160       DEVICE_TYPE_OPTICAL: 'Optical Device',
    161       DEVICE_TYPE_UNDEFINED: 'Unknown Device',
    162 
    163       CANCEL_LABEL: 'Cancel',
    164       OPEN_LABEL: 'Open',
    165       SAVE_LABEL: 'Save',
    166 
    167       SELECT_FOLDER_TITLE: 'Select a folder to open',
    168       SELECT_OPEN_FILE_TITLE: 'Select a file to open',
    169       SELECT_OPEN_MULTI_FILE_TITLE: 'Select one or more files',
    170       SELECT_SAVEAS_FILE_TITLE: 'Select a file to save as',
    171 
    172       COMPUTING_SELECTION: 'Computing selection...',
    173       NOTHING_SELECTED: 'No files selected',
    174       ONE_FILE_SELECTED: 'One file selected, $1',
    175       MANY_FILES_SELECTED: '$1 files selected, $2',
    176 
    177       CONFIRM_DELETE: 'Are you sure?',
    178     });
    179   }
    180 };
    181 
    182 chrome.extension = {
    183   getURL: function() {
    184     return document.location.href;
    185   }
    186 };
    187