toolkit/mozapps/downloads/tests/chrome/utils.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 /**
     6  * Provides utility functions for the download manager chrome tests.
     7  */
     9 const Cc = Components.classes;
    10 const Ci = Components.interfaces;
    11 const Cr = Components.results;
    13 Components.utils.import("resource://gre/modules/Services.jsm");
    15 /**
    16  * Returns the toolkit implementation of the download manager UI service.
    17  * If the toolkit implementation of the service can't be found (e.g. because
    18  * SeaMonkey doesn't package that version but an own implementation that calls
    19  * different UI), then returns false (see bug 483781).
    20  *
    21  * @returns toolkit's nsIDownloadManagerUI implementation or false if not found
    22  */
    23 function getDMUI()
    24 {
    25   try {
    26     // This method throws an exception if the old Download Manager is disabled.
    27     Services.downloads.activeDownloadCount;
    28   } catch (ex) {
    29     return false;
    30   }
    31   if (Components.classesByID["{7dfdf0d1-aff6-4a34-bad1-d0fe74601642}"])
    32     return Components.classesByID["{7dfdf0d1-aff6-4a34-bad1-d0fe74601642}"].
    33            getService(Ci.nsIDownloadManagerUI);
    34   return false;
    35 }
    37 /**
    38  * Adds a live download to the download manager.
    39  *
    40  * @param [optional] aName
    41  *        The name that will be assigned to the downloaded file.
    42  * @returns an instance of nsIDownload.
    43  */
    44 function addDownload(aName) {
    45     function createURI(aObj) {
    46       let ios = Cc["@mozilla.org/network/io-service;1"].
    47                 getService(Ci.nsIIOService);
    48       return (aObj instanceof Ci.nsIFile) ? ios.newFileURI(aObj) :
    49                                             ios.newURI(aObj, null, null);
    50     }
    52     function randomString() {
    53       let chars = "ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
    54       let string_length = 8;
    55       let randomstring = "";
    56       for (let i=0; i<string_length; i++) {
    57         let rnum = Math.floor(Math.random() * chars.length);
    58         randomstring += chars.substring(rnum, rnum+1);
    59       }
    60       return randomstring;
    61     }
    63     let dm = Cc["@mozilla.org/download-manager;1"].
    64              getService(Ci.nsIDownloadManager);
    65     const nsIWBP = Ci.nsIWebBrowserPersist;
    66     let persist = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]
    67                   .createInstance(Ci.nsIWebBrowserPersist);
    68     persist.persistFlags = nsIWBP.PERSIST_FLAGS_REPLACE_EXISTING_FILES |
    69                            nsIWBP.PERSIST_FLAGS_BYPASS_CACHE |
    70                            nsIWBP.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION;
    71     let dirSvc = Cc["@mozilla.org/file/directory_service;1"].
    72                  getService(Ci.nsIProperties);
    73     let dmFile = dirSvc.get("TmpD", Ci.nsIFile);
    74     dmFile.append(aName || ("dm-test-file-" + randomString()));
    75     if (dmFile.exists())
    76       throw "Download file already exists";
    78     let dl = dm.addDownload(Ci.nsIDownloadManager.DOWNLOAD_TYPE_DOWNLOAD,
    79                             createURI("http://example.com/httpd.js"),
    80                             createURI(dmFile), null, null,
    81                             Math.round(Date.now() * 1000), null, persist, false);
    83     let privacyContext = window.QueryInterface(Ci.nsIInterfaceRequestor)
    84                                .getInterface(Ci.nsIWebNavigation)
    85                                .QueryInterface(Ci.nsILoadContext);
    87     persist.progressListener = dl.QueryInterface(Ci.nsIWebProgressListener);
    88     persist.saveURI(dl.source, null, null, null, null, dl.targetFile, privacyContext);
    90     return dl;
    91   }
    93 /**
    94  * Used to populate the dm with dummy download data.
    95  *
    96  * @param aDownloadData
    97  *        An array that contains the dummy download data to be added to the DM.
    98  *        Expected fields are:
    99  *          name, source, target, startTime, endTime, state, currBytes,
   100  *          maxBytes, preferredAction, and autoResume
   101  */
   102 function populateDM(DownloadData)
   103 {
   104   let dm = Cc["@mozilla.org/download-manager;1"].
   105            getService(Ci.nsIDownloadManager);
   106   let db = dm.DBConnection;
   108   let stmt = db.createStatement(
   109     "INSERT INTO moz_downloads (name, source, target, startTime, endTime, " +
   110       "state, currBytes, maxBytes, preferredAction, autoResume) " +
   111     "VALUES (:name, :source, :target, :startTime, :endTime, :state, " +
   112       ":currBytes, :maxBytes, :preferredAction, :autoResume)");
   113   for each (let dl in DownloadData) {
   114     for (let prop in dl)
   115       stmt.params[prop] = dl[prop];
   117     stmt.execute();
   118   }
   119   stmt.finalize();
   120 }
   122 /**
   123  * Returns an instance to the download manager window
   124  *
   125  * @return an instance of nsIDOMWindow
   126  */
   127 function getDMWindow()
   128 {
   129   return Cc["@mozilla.org/appshell/window-mediator;1"].
   130          getService(Ci.nsIWindowMediator).
   131          getMostRecentWindow("Download:Manager");
   132 }
   134 /**
   135  * Establishes a clean state to run a test in by removing everything from the
   136  * database and ensuring that the download manager's window is not open.
   137  */
   138 function setCleanState()
   139 {
   140   let dm = Cc["@mozilla.org/download-manager;1"].
   141            getService(Ci.nsIDownloadManager);
   143   // Clean the dm
   144   dm.DBConnection.executeSimpleSQL("DELETE FROM moz_downloads");
   146   let win = getDMWindow();
   147   if (win) win.close();
   148 }
   150 /**
   151  * Clears history invoking callback when done.
   152  */
   153 function waitForClearHistory(aCallback) {
   154   Components.utils.import("resource://gre/modules/PlacesUtils.jsm");
   155   Services.obs.addObserver(function observeClearHistory(aSubject, aTopic) {
   156     Services.obs.removeObserver(observeClearHistory, aTopic);
   157     aCallback();
   158   }, PlacesUtils.TOPIC_EXPIRATION_FINISHED, false);
   159   PlacesUtils.bhistory.removeAllPages();
   160 }

mercurial