15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
33197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @extends {WebInspector.SDKObject}
34a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {!WebInspector.Target} target
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
36a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben MurdochWebInspector.FileSystemModel = function(target)
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
38197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WebInspector.SDKObject.call(this, target);
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._fileSystemsForOrigin = {};
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
42a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.SecurityOriginAdded, this._securityOriginAdded, this);
43a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.SecurityOriginRemoved, this._securityOriginRemoved, this);
44a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    this._agent = target.fileSystemAgent();
45a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    this._agent.enable();
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
47926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._reset();
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileSystemModel.prototype = {
51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _reset: function()
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        for (var securityOrigin in this._fileSystemsForOrigin)
54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._removeOrigin(securityOrigin);
55a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var securityOrigins = this.target().resourceTreeModel.securityOrigins();
56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        for (var i = 0; i < securityOrigins.length; ++i)
57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._addOrigin(securityOrigins[i]);
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
61a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Event} event
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _securityOriginAdded: function(event)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var securityOrigin = /** @type {string} */ (event.data);
66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._addOrigin(securityOrigin);
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
70a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Event} event
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _securityOriginRemoved: function(event)
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
74926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var securityOrigin = /** @type {string} */ (event.data);
75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._removeOrigin(securityOrigin);
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {string} securityOrigin
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _addOrigin: function(securityOrigin)
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._fileSystemsForOrigin[securityOrigin] = {};
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
85926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var types = ["persistent", "temporary"];
86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        for (var i = 0; i < types.length; ++i)
87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._requestFileSystemRoot(securityOrigin, types[i], this._fileSystemRootReceived.bind(this, securityOrigin, types[i], this._fileSystemsForOrigin[securityOrigin]));
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {string} securityOrigin
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _removeOrigin: function(securityOrigin)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        for (var type in this._fileSystemsForOrigin[securityOrigin]) {
96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var fileSystem = this._fileSystemsForOrigin[securityOrigin][type];
97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            delete this._fileSystemsForOrigin[securityOrigin][type];
98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._fileSystemRemoved(fileSystem);
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        delete this._fileSystemsForOrigin[securityOrigin];
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} origin
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} type
106a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(number, !FileSystemAgent.Entry=)} callback
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _requestFileSystemRoot: function(origin, type, callback)
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {number} errorCode
113a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!FileSystemAgent.Entry=} backendRootEntry
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function innerCallback(error, errorCode, backendRootEntry)
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error) {
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(FileError.SECURITY_ERR);
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
121f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(errorCode, backendRootEntry);
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
125a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this._agent.requestFileSystemRoot(origin, type, innerCallback);
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
129a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.FileSystemModel.FileSystem} fileSystem
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _fileSystemAdded: function(fileSystem)
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.FileSystemModel.EventTypes.FileSystemAdded, fileSystem);
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
137a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.FileSystemModel.FileSystem} fileSystem
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _fileSystemRemoved: function(fileSystem)
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.FileSystemModel.EventTypes.FileSystemRemoved, fileSystem);
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    refreshFileSystemList: function()
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
146926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._reset();
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} origin
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} type
152a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Object.<string, !WebInspector.FileSystemModel.FileSystem>} store
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} errorCode
154a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!FileSystemAgent.Entry=} backendRootEntry
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _fileSystemRootReceived: function(origin, type, store, errorCode, backendRootEntry)
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!errorCode && backendRootEntry && this._fileSystemsForOrigin[origin] === store) {
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var fileSystem = new WebInspector.FileSystemModel.FileSystem(this, origin, type, backendRootEntry);
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            store[type] = fileSystem;
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._fileSystemAdded(fileSystem);
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
166a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.FileSystemModel.Directory} directory
167a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(number, !Array.<!WebInspector.FileSystemModel.Entry>=)} callback
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestDirectoryContent: function(directory, callback)
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._requestDirectoryContent(directory.url, this._directoryContentReceived.bind(this, directory, callback));
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} url
176a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(number, !Array.<!FileSystemAgent.Entry>=)} callback
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _requestDirectoryContent: function(url, callback)
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {number} errorCode
183a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<!FileSystemAgent.Entry>=} backendEntries
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function innerCallback(error, errorCode, backendEntries)
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error) {
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(FileError.SECURITY_ERR);
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
191f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (errorCode !== 0) {
193a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                callback(errorCode);
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(errorCode, backendEntries);
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
200a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this._agent.requestDirectoryContent(url, innerCallback);
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
204a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.FileSystemModel.Directory} parentDirectory
205a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(number, !Array.<!WebInspector.FileSystemModel.Entry>=)} callback
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} errorCode
207a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!FileSystemAgent.Entry>=} backendEntries
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _directoryContentReceived: function(parentDirectory, callback, errorCode, backendEntries)
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
211a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        if (!backendEntries) {
212a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            callback(errorCode);
213a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            return;
214a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        }
215a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var entries = [];
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < backendEntries.length; ++i) {
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (backendEntries[i].isDirectory)
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                entries.push(new WebInspector.FileSystemModel.Directory(this, parentDirectory.fileSystem, backendEntries[i]));
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            else
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                entries.push(new WebInspector.FileSystemModel.File(this, parentDirectory.fileSystem, backendEntries[i]));
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        callback(errorCode, entries);
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
228a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.FileSystemModel.Entry} entry
229a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(number, !FileSystemAgent.Metadata=)} callback
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestMetadata: function(entry, callback)
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {number} errorCode
236a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!FileSystemAgent.Metadata=} metadata
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function innerCallback(error, errorCode, metadata)
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error) {
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(FileError.SECURITY_ERR);
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
244f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(errorCode, metadata);
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
248a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this._agent.requestMetadata(entry.url, innerCallback);
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
252a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.FileSystemModel.File} file
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} readAsText
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number=} start
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number=} end
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string=} charset
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(number, string=, string=)=} callback
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestFileContent: function(file, readAsText, start, end, charset, callback)
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._requestFileContent(file.url, readAsText, start, end, charset, callback);
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} url
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} readAsText
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number=} start
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number=} end
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string=} charset
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(number, string=, string=)=} callback
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _requestFileContent: function(url, readAsText, start, end, charset, callback)
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {number} errorCode
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {string=} content
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {string=} charset
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function innerCallback(error, errorCode, content, charset)
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error) {
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (callback)
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    callback(FileError.SECURITY_ERR);
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
287f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (callback)
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(errorCode, content, charset);
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
292a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this._agent.requestFileContent(url, readAsText, start, end, charset, innerCallback);
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
295a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.FileSystemModel.Entry} entry
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(number)=} callback
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    deleteEntry: function(entry, callback)
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var fileSystemModel = this;
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (entry === entry.fileSystem.root)
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._deleteEntry(entry.url, hookFileSystemDeletion);
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._deleteEntry(entry.url, callback);
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function hookFileSystemDeletion(errorCode)
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(errorCode);
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!errorCode)
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                fileSystemModel._removeFileSystem(entry.fileSystem);
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} url
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(number)=} callback
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _deleteEntry: function(url, callback)
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {number} errorCode
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function innerCallback(error, errorCode)
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error) {
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (callback)
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    callback(FileError.SECURITY_ERR);
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
331f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (callback)
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(errorCode);
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
336a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this._agent.deleteEntry(url, innerCallback);
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
340a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.FileSystemModel.FileSystem} fileSystem
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _removeFileSystem: function(fileSystem)
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var origin = fileSystem.origin;
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var type = fileSystem.type;
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._fileSystemsForOrigin[origin] && this._fileSystemsForOrigin[origin][type]) {
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._fileSystemsForOrigin[origin][type];
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._fileSystemRemoved(fileSystem);
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (Object.isEmpty(this._fileSystemsForOrigin[origin]))
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                delete this._fileSystemsForOrigin[origin];
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
355197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    __proto__: WebInspector.SDKObject.prototype
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileSystemModel.EventTypes = {
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FileSystemAdded: "FileSystemAdded",
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FileSystemRemoved: "FileSystemRemoved"
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
366a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.FileSystemModel} fileSystemModel
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} origin
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} type
369a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!FileSystemAgent.Entry} backendRootEntry
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileSystemModel.FileSystem = function(fileSystemModel, origin, type, backendRootEntry)
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.origin = origin;
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.type = type;
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.root = new WebInspector.FileSystemModel.Directory(fileSystemModel, this, backendRootEntry);
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileSystemModel.FileSystem.prototype = {
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @type {string}
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get name()
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return "filesystem:" + this.origin + "/" + this.type;
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
391a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.FileSystemModel} fileSystemModel
392a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.FileSystemModel.FileSystem} fileSystem
393a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!FileSystemAgent.Entry} backendEntry
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileSystemModel.Entry = function(fileSystemModel, fileSystem, backendEntry)
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._fileSystemModel = fileSystemModel;
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._fileSystem = fileSystem;
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._url = backendEntry.url;
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._name = backendEntry.name;
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._isDirectory = backendEntry.isDirectory;
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
406a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.FileSystemModel.Entry} x
407a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.FileSystemModel.Entry} y
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {number}
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileSystemModel.Entry.compare = function(x, y)
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (x.isDirectory != y.isDirectory)
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return y.isDirectory ? 1 : -1;
414926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return x.name.compareTo(y.name);
4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileSystemModel.Entry.prototype = {
4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
419a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @type {!WebInspector.FileSystemModel}
4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get fileSystemModel()
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._fileSystemModel;
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
427a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @type {!WebInspector.FileSystemModel.FileSystem}
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get fileSystem()
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._fileSystem;
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @type {string}
4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get url()
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._url;
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @type {string}
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get name()
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._name;
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @type {boolean}
4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get isDirectory()
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._isDirectory;
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
459a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(number, !FileSystemAgent.Metadata)} callback
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestMetadata: function(callback)
4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.fileSystemModel.requestMetadata(this, callback);
4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(number)} callback
4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    deleteEntry: function(callback)
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.fileSystemModel.deleteEntry(this, callback);
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.FileSystemModel.Entry}
478a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.FileSystemModel} fileSystemModel
479a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.FileSystemModel.FileSystem} fileSystem
480a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!FileSystemAgent.Entry} backendEntry
4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileSystemModel.Directory = function(fileSystemModel, fileSystem, backendEntry)
4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.FileSystemModel.Entry.call(this, fileSystemModel, fileSystem, backendEntry);
4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileSystemModel.Directory.prototype = {
4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
489a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(number, !Array.<!WebInspector.FileSystemModel.Directory>)} callback
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestDirectoryContent: function(callback)
4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.fileSystemModel.requestDirectoryContent(this, callback);
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.FileSystemModel.Entry.prototype
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.FileSystemModel.Entry}
502a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.FileSystemModel} fileSystemModel
503a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.FileSystemModel.FileSystem} fileSystem
504a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!FileSystemAgent.Entry} backendEntry
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileSystemModel.File = function(fileSystemModel, fileSystem, backendEntry)
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.FileSystemModel.Entry.call(this, fileSystemModel, fileSystem, backendEntry);
5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._mimeType = backendEntry.mimeType;
5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._resourceType = WebInspector.resourceTypes[backendEntry.resourceType];
5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._isTextFile = backendEntry.isTextFile;
5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileSystemModel.File.prototype = {
5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @type {string}
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get mimeType()
5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._mimeType;
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
525a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @type {!WebInspector.ResourceType}
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get resourceType()
5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._resourceType;
5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @type {boolean}
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get isTextFile()
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._isTextFile;
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} readAsText
5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number=} start
5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number=} end
5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string=} charset
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(number, string=)=} callback
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestFileContent: function(readAsText, start, end, charset, callback)
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.fileSystemModel.requestFileContent(this, readAsText, start, end, charset, callback);
5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.FileSystemModel.Entry.prototype
5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
554