Home | History | Annotate | Download | only in workspace
      1 /*
      2  * Copyright (C) 2012 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 /**
     32  * @constructor
     33  * @extends {WebInspector.Object}
     34  */
     35 WebInspector.FileManager = function()
     36 {
     37     /** @type {!Object.<string, ?function(boolean)>} */
     38     this._saveCallbacks = {};
     39     InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.SavedURL, this._savedURL, this);
     40     InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.CanceledSaveURL, this._canceledSaveURL, this);
     41     InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.AppendedToURL, this._appendedToURL, this);
     42 }
     43 
     44 WebInspector.FileManager.EventTypes = {
     45     SavedURL: "SavedURL",
     46     AppendedToURL: "AppendedToURL"
     47 }
     48 
     49 WebInspector.FileManager.prototype = {
     50     /**
     51      * @return {boolean}
     52      */
     53     canSave: function()
     54     {
     55         return true;
     56     },
     57 
     58     /**
     59      * @param {string} url
     60      * @param {string} content
     61      * @param {boolean} forceSaveAs
     62      * @param {function(boolean)=} callback
     63      */
     64     save: function(url, content, forceSaveAs, callback)
     65     {
     66         // Remove this url from the saved URLs while it is being saved.
     67         var savedURLs = WebInspector.settings.savedURLs.get();
     68         delete savedURLs[url];
     69         WebInspector.settings.savedURLs.set(savedURLs);
     70         this._saveCallbacks[url] = callback || null;
     71         InspectorFrontendHost.save(url, content, forceSaveAs);
     72     },
     73 
     74     /**
     75      * @param {!WebInspector.Event} event
     76      */
     77     _savedURL: function(event)
     78     {
     79         var url = /** @type {string} */ (event.data);
     80         var savedURLs = WebInspector.settings.savedURLs.get();
     81         savedURLs[url] = true;
     82         WebInspector.settings.savedURLs.set(savedURLs);
     83         this.dispatchEventToListeners(WebInspector.FileManager.EventTypes.SavedURL, url);
     84         this._invokeSaveCallback(url, true);
     85     },
     86 
     87     /**
     88      * @param {string} url
     89      * @param {boolean} accepted
     90      */
     91     _invokeSaveCallback: function(url, accepted)
     92     {
     93         var callback = this._saveCallbacks[url];
     94         delete this._saveCallbacks[url];
     95         if (callback)
     96             callback(accepted);
     97     },
     98 
     99     /**
    100      * @param {!WebInspector.Event} event
    101      */
    102     _canceledSaveURL: function(event)
    103     {
    104         var url = /** @type {string} */ (event.data);
    105         this._invokeSaveCallback(url, false);
    106     },
    107 
    108     /**
    109      * @param {string} url
    110      * @return {boolean}
    111      */
    112     isURLSaved: function(url)
    113     {
    114         var savedURLs = WebInspector.settings.savedURLs.get();
    115         return savedURLs[url];
    116     },
    117 
    118     /**
    119      * @param {string} url
    120      * @param {string} content
    121      */
    122     append: function(url, content)
    123     {
    124         InspectorFrontendHost.append(url, content);
    125     },
    126 
    127     /**
    128      * @param {string} url
    129      */
    130     close: function(url)
    131     {
    132         // Currently a no-op.
    133     },
    134 
    135     /**
    136      * @param {!WebInspector.Event} event
    137      */
    138     _appendedToURL: function(event)
    139     {
    140         var url = /** @type {string} */ (event.data);
    141         this.dispatchEventToListeners(WebInspector.FileManager.EventTypes.AppendedToURL, url);
    142     },
    143 
    144     __proto__: WebInspector.Object.prototype
    145 }
    146 
    147 WebInspector.fileManager = new WebInspector.FileManager();
    148