summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/inspector/front-end/FileSystemView.js
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/inspector/front-end/FileSystemView.js')
-rw-r--r--Source/WebCore/inspector/front-end/FileSystemView.js207
1 files changed, 207 insertions, 0 deletions
diff --git a/Source/WebCore/inspector/front-end/FileSystemView.js b/Source/WebCore/inspector/front-end/FileSystemView.js
new file mode 100644
index 0000000..14ecf46
--- /dev/null
+++ b/Source/WebCore/inspector/front-end/FileSystemView.js
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.FileSystem = {}
+
+// Keep in sync with Type in AsyncFileSystem.h
+WebInspector.FileSystem.TEMPORARY = 0;
+WebInspector.FileSystem.PERSISTENT = 1;
+
+WebInspector.FileSystem.getFileSystemPathsAsync = function(origin)
+{
+ InspectorBackend.getFileSystemPathAsync(WebInspector.FileSystem.PERSISTENT, origin);
+ InspectorBackend.getFileSystemPathAsync(WebInspector.FileSystem.TEMPORARY, origin);
+}
+
+WebInspector.FileSystem.didGetFileSystemPath = function(root, type, origin)
+{
+ WebInspector.panels.resources.updateFileSystemPath(root, type, origin);
+}
+
+WebInspector.FileSystem.didGetFileSystemError = function(type, origin)
+{
+ WebInspector.panels.resources.updateFileSystemError(type, origin);
+}
+
+WebInspector.FileSystem.didGetFileSystemDisabled = function()
+{
+ WebInspector.panels.resources.setFileSystemDisabled();
+}
+
+InspectorBackend.registerDomainDispatcher("FileSystem", WebInspector.FileSystem);
+
+WebInspector.FileSystemView = function(treeElement, fileSystemOrigin)
+{
+ WebInspector.View.call(this);
+
+ this.element.addStyleClass("resource-view");
+ this._treeElement = treeElement;
+ this._origin = fileSystemOrigin;
+ this._tabbedPane = new WebInspector.TabbedPane(this.element);
+
+ this._persistentFileSystemElement = document.createElement("div");
+ this._persistentFileSystemElement.className = "resource-view-headers";
+ this._tabbedPane.appendTab("persistent", WebInspector.UIString("Persistent File System"), this._persistentFileSystemElement, this._selectFileSystemTab.bind(this, true));
+
+ this._tempFileSystemElement = document.createElement("div");
+ this._tempFileSystemElement.className = "resource-view-headers";
+ this._tabbedPane.appendTab("temp", WebInspector.UIString("Temporary File System"), this._tempFileSystemElement, this.selectTemporaryFileSystemTab.bind(this, true));
+
+ this._temporaryRoot = "";
+ this._persistentRoot = "";
+ this._isFileSystemDisabled = false;
+ this._persistentRootError = false;
+ this._temporaryRootError = false;
+ this.fileSystemVisible = true;
+ this._selectFileSystemTab();
+ this.refreshFileSystem();
+}
+
+WebInspector.FileSystemView.prototype = {
+ show: function(parentElement)
+ {
+ WebInspector.View.prototype.show.call(this, parentElement);
+ this._update();
+ },
+
+ set fileSystemVisible(x)
+ {
+ if (x === this._fileSystemVisible)
+ return;
+ this._fileSystemVisible = x;
+ if (x)
+ this.element.addStyleClass("headers-visible");
+ else
+ this.element.removeStyleClass("headers-visible");
+ this._selectFileSystemTab();
+ },
+
+ _update: function()
+ {
+ this._selectFileSystemTab();
+ WebInspector.FileSystem.getFileSystemPathsAsync(this._origin);
+ },
+
+ updateFileSystemPath: function(root, type, origin)
+ {
+ if (origin == this._origin && type == WebInspector.FileSystem.PERSISTENT) {
+ this._persistentRoot = root;
+ this._persistentRootError = false;
+ }
+
+ if (origin == this._origin && type == WebInspector.FileSystem.TEMPORARY) {
+ this._temporaryRoot = root;
+ this._temporaryRootErrorError = false;
+ }
+
+ this.refreshFileSystem();
+ },
+
+ updateFileSystemError: function(type, origin)
+ {
+ if (type == WebInspector.FileSystem.PERSISTENT)
+ this._persistentRootError = true;
+
+ if (type == WebInspector.FileSystem.TEMPORARY)
+ this._temporaryRootError = true;
+
+ this.refreshFileSystem();
+ },
+
+ setFileSystemDisabled: function()
+ {
+ this._isFileSystemDisabled = true;
+ this.refreshFileSystem();
+ },
+ _selectFileSystemTab: function()
+ {
+ this._tabbedPane.selectTab("persistent");
+ },
+
+ selectTemporaryFileSystemTab: function()
+ {
+ this._tabbedPane.selectTab("temp");
+ },
+
+ _revealPersistentFolderInOS: function()
+ {
+ InspectorBackend.revealFolderInOS(this._persistentRoot);
+ },
+
+ _revealTemporaryFolderInOS: function()
+ {
+ InspectorBackend.revealFolderInOS(this._temporaryRoot);
+ },
+
+ _createTextAndButton: function(fileSystemElement, rootPathText, type, isError)
+ {
+ fileSystemElement.removeChildren();
+ var rootPath = WebInspector.UIString("File System root path not available.");
+ if (this._isFileSystemDisabled)
+ rootPath = WebInspector.UIString("File System is disabled.");
+ else if (isError)
+ rootPath = WebInspector.UIString("Error in fetching root path for file system.");
+ else if (rootPathText)
+ rootPath = rootPathText;
+
+ var rootTextNode = document.createTextNode("Root: " + rootPath.escapeHTML());
+ var rootSystemElement = document.createElement("div");
+ rootSystemElement.className = "header-value source-code";
+ rootSystemElement.appendChild(rootTextNode);
+ fileSystemElement.appendChild(rootSystemElement);
+
+ if (!isError && rootPathText) {
+ // Append Browse button iff root path is available and it is not an error.
+ var contentElement = document.createElement("div");
+ contentElement.className = "panel-enabler-view-content";
+ fileSystemElement.appendChild(contentElement);
+ var choicesForm = document.createElement("form");
+ contentElement.appendChild(choicesForm);
+ var enableButton = document.createElement("button");
+ enableButton.setAttribute("type", "button");
+ enableButton.textContent = WebInspector.UIString("Reveal folder in OS");
+ // FIXME: Bind this directly to InspectorBackend.
+ if (type == WebInspector.FileSystem.PERSISTENT)
+ enableButton.addEventListener("click", this._revealPersistentFolderInOS.bind(this), false);
+ if (type == WebInspector.FileSystem.TEMPORARY)
+ enableButton.addEventListener("click", this._revealTemporaryFolderInOS.bind(this), false);
+ choicesForm.appendChild(enableButton);
+ fileSystemElement.appendChild(contentElement);
+ }
+ },
+
+ refreshFileSystem: function()
+ {
+ this._createTextAndButton(this._persistentFileSystemElement, this._persistentRoot, WebInspector.FileSystem.PERSISTENT, this._persistentRootError);
+ this._createTextAndButton(this._tempFileSystemElement, this._temporaryRoot, WebInspector.FileSystem.TEMPORARY, this._temporaryRootError);
+ },
+}
+
+WebInspector.FileSystemView.prototype.__proto__ = WebInspector.View.prototype;