Title: [122104] trunk/Source/WebCore
Revision
122104
Author
[email protected]
Date
2012-07-09 05:33:48 -0700 (Mon, 09 Jul 2012)

Log Message

Web Inspector: Add FileContentView for FileSystemView
https://bugs.webkit.org/show_bug.cgi?id=90529

Adding FileContentView to Inspector.
This class provides preview of text files in FileSystem.

Patch by Taiju Tsuiki <[email protected]> on 2012-07-09
Reviewed by Vsevolod Vlasov.

* WebCore.gypi:
* WebCore.vcproj/WebCore.vcproj:
* inspector/compile-front-end.py:
* inspector/front-end/FileContentView.js: Added.
* inspector/front-end/FileSystemView.js:
(WebInspector.FileSystemView.prototype.get visibleView):
(WebInspector.FileSystemView.EntryTreeElement.prototype.onselect):
(WebInspector.FileSystemView.EntryTreeElement.prototype._directoryContentReceived):
(WebInspector.FileSystemView.EntryTreeElement.prototype.refresh):
* inspector/front-end/WebKit.qrc:
* inspector/front-end/inspector.html:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (122103 => 122104)


--- trunk/Source/WebCore/ChangeLog	2012-07-09 12:28:12 UTC (rev 122103)
+++ trunk/Source/WebCore/ChangeLog	2012-07-09 12:33:48 UTC (rev 122104)
@@ -1,3 +1,25 @@
+2012-07-09  Taiju Tsuiki  <[email protected]>
+
+        Web Inspector: Add FileContentView for FileSystemView
+        https://bugs.webkit.org/show_bug.cgi?id=90529
+
+        Adding FileContentView to Inspector.
+        This class provides preview of text files in FileSystem.
+
+        Reviewed by Vsevolod Vlasov.
+
+        * WebCore.gypi:
+        * WebCore.vcproj/WebCore.vcproj:
+        * inspector/compile-front-end.py:
+        * inspector/front-end/FileContentView.js: Added.
+        * inspector/front-end/FileSystemView.js:
+        (WebInspector.FileSystemView.prototype.get visibleView):
+        (WebInspector.FileSystemView.EntryTreeElement.prototype.onselect):
+        (WebInspector.FileSystemView.EntryTreeElement.prototype._directoryContentReceived):
+        (WebInspector.FileSystemView.EntryTreeElement.prototype.refresh):
+        * inspector/front-end/WebKit.qrc:
+        * inspector/front-end/inspector.html:
+
 2012-07-09  Carlos Garcia Campos  <[email protected]>
 
         [SOUP] Use soup_cookie_jar_is_persistent() to set whether cookie is a session one or not

Modified: trunk/Source/WebCore/WebCore.gypi (122103 => 122104)


--- trunk/Source/WebCore/WebCore.gypi	2012-07-09 12:28:12 UTC (rev 122103)
+++ trunk/Source/WebCore/WebCore.gypi	2012-07-09 12:33:48 UTC (rev 122104)
@@ -6279,6 +6279,7 @@
             'inspector/front-end/ExtensionRegistryStub.js',
             'inspector/front-end/ExtensionServer.js',
             'inspector/front-end/FileManager.js',
+            'inspector/front-end/FileContentView.js',
             'inspector/front-end/FileSystemModel.js',
             'inspector/front-end/FileSystemView.js',
             'inspector/front-end/FilteredItemSelectionDialog.js',

Modified: trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj (122103 => 122104)


--- trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj	2012-07-09 12:28:12 UTC (rev 122103)
+++ trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj	2012-07-09 12:33:48 UTC (rev 122104)
@@ -74922,6 +74922,10 @@
 					>
 				</File>
 				<File
+					RelativePath="..\inspector\front-end\FileContentView.js"
+					>
+				</File>
+				<File
 					RelativePath="..\inspector\front-end\FileManager.js"
 					>
 				</File>

Modified: trunk/Source/WebCore/inspector/compile-front-end.py (122103 => 122104)


--- trunk/Source/WebCore/inspector/compile-front-end.py	2012-07-09 12:28:12 UTC (rev 122103)
+++ trunk/Source/WebCore/inspector/compile-front-end.py	2012-07-09 12:33:48 UTC (rev 122104)
@@ -212,6 +212,7 @@
             "DatabaseTableView.js",
             "DirectoryContentView.js",
             "DOMStorageItemsView.js",
+            "FileContentView.js",
             "FileSystemView.js",
             "IndexedDBViews.js",
             "ResourcesPanel.js",

Added: trunk/Source/WebCore/inspector/front-end/FileContentView.js (0 => 122104)


--- trunk/Source/WebCore/inspector/front-end/FileContentView.js	                        (rev 0)
+++ trunk/Source/WebCore/inspector/front-end/FileContentView.js	2012-07-09 12:33:48 UTC (rev 122104)
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+/**
+ * @constructor
+ * @extends {WebInspector.View}
+ * @param {WebInspector.FileSystemModel.File} file
+ */
+WebInspector.FileContentView = function(file)
+{
+    WebInspector.View.call(this);
+
+    this._innerView = null;
+    this._file = file;
+    this._content = null;
+}
+
+WebInspector.FileContentView.prototype = {
+    wasShown: function()
+    {
+        if (!this._innerView) {
+            if (this._file.isTextFile)
+                this._innerView = new WebInspector.EmptyView(WebInspector.UIString("Loading..."));
+            else
+                this._innerView = new WebInspector.EmptyView(WebInspector.UIString("Binary File"));
+            this.refresh();
+        }
+
+        this._innerView.show(this.element);
+    },
+
+    /**
+     * @param {number} errorCode
+     * @param {FileSystemAgent.Metadata} metadata
+     */
+    _metadataReceived: function(errorCode, metadata)
+    {
+        if (errorCode || !metadata)
+            return;
+
+        if (this._content) {
+            if (!this._content.updateMetadata(metadata))
+                return;
+            var sourceFrame = /** @type {WebInspector.SourceFrame} */ this._innerView;
+            this._content.requestContent(sourceFrame.setContent.bind(sourceFrame));
+        } else {
+            this._innerView.detach();
+            this._content = new WebInspector.FileContentView.FileContentProvider(this._file, metadata);
+            this._innerView = new WebInspector.SourceFrame(this._content);
+            this._innerView.show(this.element);
+        }
+    },
+
+    refresh: function()
+    {
+        if (!this._innerView)
+            return;
+
+        if (this._file.isTextFile)
+            this._file.requestMetadata(this._metadataReceived.bind(this));
+    }
+}
+
+WebInspector.FileContentView.prototype.__proto__ = WebInspector.View.prototype;
+
+/**
+ * @constructor
+ * @implements {WebInspector.ContentProvider}
+ * @param {WebInspector.FileSystemModel.File} file
+ * @param {FileSystemAgent.Metadata} metadata
+ */
+WebInspector.FileContentView.FileContentProvider = function(file, metadata)
+{
+    this._file = file;
+    this._metadata = metadata;
+}
+
+WebInspector.FileContentView.FileContentProvider.prototype = {
+    /**
+     * @return {?string}
+     */
+    contentURL: function()
+    {
+        return this._file.url;
+    },
+
+    /**
+     * @return {WebInspector.ResourceType}
+     */
+    contentType: function()
+    {
+        return this._file.resourceType;
+    },
+
+    /**
+     * @param {function(?string, boolean, string)} callback
+     */
+    requestContent: function(callback)
+    {
+        var size = /** @type {number} */ this._metadata.size;
+        this._file.requestFileContent(true, 0, size, this._charset || "", this._fileContentReceived.bind(this, callback));
+    },
+
+    /**
+     * @param {function(?string, boolean, string)} callback
+     * @param {number} errorCode
+     * @param {string=} content
+     * @param {boolean=} base64Encoded
+     * @param {string=} charset
+     */
+    _fileContentReceived: function(callback, errorCode, content, base64Encoded, charset)
+    {
+        if (errorCode || !content) {
+            callback(null, false, "");
+            return;
+        }
+
+        this._charset = charset;
+        callback(content, false, this.contentType().canonicalMimeType());
+    },
+
+    /**
+     * @param {string} query
+     * @param {boolean} caseSensitive
+     * @param {boolean} isRegex
+     * @param {function(Array.<WebInspector.ContentProvider.SearchMatch>)} callback
+     */
+    searchInContent: function(query, caseSensitive, isRegex, callback)
+    {
+        setTimeout(callback.bind(null, []), 0);
+    },
+
+    /**
+     * @param {FileSystemAgent.Metadata} metadata
+     * @return {boolean}
+     */
+    updateMetadata: function(metadata)
+    {
+        if (this._metadata.modificationTime >= metadata.modificationTime)
+            return false;
+        this._metadata = metadata.modificationTime;
+        return true;
+    }
+}

Modified: trunk/Source/WebCore/inspector/front-end/FileSystemView.js (122103 => 122104)


--- trunk/Source/WebCore/inspector/front-end/FileSystemView.js	2012-07-09 12:28:12 UTC (rev 122103)
+++ trunk/Source/WebCore/inspector/front-end/FileSystemView.js	2012-07-09 12:33:48 UTC (rev 122104)
@@ -65,6 +65,14 @@
     },
 
     /**
+     * @type {WebInspector.View}
+     */
+    get visibleView()
+    {
+        return this._visibleView;
+    },
+
+    /**
      * @param {WebInspector.View} view
      */
     showView: function(view)
@@ -111,8 +119,10 @@
         if (!this._view) {
             if (this._entry.isDirectory)
                 this._view = new WebInspector.DirectoryContentView();
-            else
-                return;
+            else {
+                var file = /** @type {WebInspector.FileSystemModel.File} */ this._entry;
+                this._view = new WebInspector.FileContentView(file);
+            }
         }
         this._fileSystemView.showView(this._view);
         this.refresh();
@@ -157,6 +167,9 @@
             if (order === 0) {
                 if (oldChild._entry.isDirectory)
                     oldChild.shouldRefreshChildren = true;
+                else
+                    oldChild.refresh();
+
                 ++newEntryIndex;
                 ++oldChildIndex;
                 ++currentTreeItem;
@@ -181,9 +194,13 @@
 
     refresh: function()
     {
-        if (!this._entry.isDirectory)
-            return;
-        this._entry.requestDirectoryContent(this._directoryContentReceived.bind(this));
+        if (!this._entry.isDirectory) {
+            if (this._view && this._view === this._fileSystemView.visibleView) {
+                var fileContentView = /** @type {WebInspector.FileContentView} */ this._view;
+                fileContentView.refresh();
+            }
+        } else
+            this._entry.requestDirectoryContent(this._directoryContentReceived.bind(this));
     }
 }
 

Modified: trunk/Source/WebCore/inspector/front-end/WebKit.qrc (122103 => 122104)


--- trunk/Source/WebCore/inspector/front-end/WebKit.qrc	2012-07-09 12:28:12 UTC (rev 122103)
+++ trunk/Source/WebCore/inspector/front-end/WebKit.qrc	2012-07-09 12:33:48 UTC (rev 122104)
@@ -57,6 +57,7 @@
     <file>ExtensionPanel.js</file>
     <file>ExtensionRegistryStub.js</file>
     <file>ExtensionServer.js</file>
+    <file>FileContentView.js</file>
     <file>FileManager.js</file>
     <file>FileSystemModel.js</file>
     <file>FileSystemView.js</file>

Modified: trunk/Source/WebCore/inspector/front-end/inspector.html (122103 => 122104)


--- trunk/Source/WebCore/inspector/front-end/inspector.html	2012-07-09 12:28:12 UTC (rev 122103)
+++ trunk/Source/WebCore/inspector/front-end/inspector.html	2012-07-09 12:33:48 UTC (rev 122104)
@@ -162,6 +162,7 @@
     <script type="text/_javascript_" src=""
     <script type="text/_javascript_" src=""
     <script type="text/_javascript_" src=""
+    <script type="text/_javascript_" src=""
     <script type="text/_javascript_" src=""
     <script type="text/_javascript_" src=""
     <script type="text/_javascript_" src=""
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to