Title: [126426] trunk
Revision
126426
Author
pfeld...@chromium.org
Date
2012-08-23 08:08:29 -0700 (Thu, 23 Aug 2012)

Log Message

Web Inspector: extract ParsedURL into a separate file.
https://bugs.webkit.org/show_bug.cgi?id=94817

Reviewed by Alexander Pavlov.

* WebCore.gypi:
* WebCore.vcproj/WebCore.vcproj:
* inspector/compile-front-end.py:
* inspector/front-end/AuditRules.js:
(WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
(WebInspector.AuditRules.CssInHeadRule.prototype.doRun.externalStylesheetsReceived):
(WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.cssBeforeInlineReceived):
* inspector/front-end/DefaultTextEditor.js:
(WebInspector.TextEditorMainPanel.prototype._rewriteHref):
* inspector/front-end/ParsedURL.js: Added.
(WebInspector.ParsedURL):
(WebInspector.ParsedURL.completeURL):
(WebInspector.ParsedURL.prototype.get displayName):
(String.prototype.asParsedURL):
* inspector/front-end/ResourceUtils.js:
(WebInspector.resourceURLForRelatedNode):
* inspector/front-end/StylesSidebarPane.js:
(WebInspector.StylePropertyTreeElement.prototype.updateTitle.linkifyURL):
* inspector/front-end/WebKit.qrc:
* inspector/front-end/inspector.html:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/inspector/styles/styles-url-linkify.html (126425 => 126426)


--- trunk/LayoutTests/inspector/styles/styles-url-linkify.html	2012-08-23 14:59:13 UTC (rev 126425)
+++ trunk/LayoutTests/inspector/styles/styles-url-linkify.html	2012-08-23 15:08:29 UTC (rev 126426)
@@ -10,7 +10,7 @@
 {
     function completeURL(baseURL, href)
     {
-        InspectorTest.addResult(WebInspector.completeURL(baseURL, href));
+        InspectorTest.addResult(WebInspector.ParsedURL.completeURL(baseURL, href));
     }
 
     InspectorTest.addResult("URLs completed:");

Modified: trunk/Source/WebCore/ChangeLog (126425 => 126426)


--- trunk/Source/WebCore/ChangeLog	2012-08-23 14:59:13 UTC (rev 126425)
+++ trunk/Source/WebCore/ChangeLog	2012-08-23 15:08:29 UTC (rev 126426)
@@ -1,5 +1,33 @@
 2012-08-23  Pavel Feldman  <pfeld...@chromium.org>
 
+        Web Inspector: extract ParsedURL into a separate file.
+        https://bugs.webkit.org/show_bug.cgi?id=94817
+
+        Reviewed by Alexander Pavlov.
+
+        * WebCore.gypi:
+        * WebCore.vcproj/WebCore.vcproj:
+        * inspector/compile-front-end.py:
+        * inspector/front-end/AuditRules.js:
+        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
+        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.externalStylesheetsReceived):
+        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.cssBeforeInlineReceived):
+        * inspector/front-end/DefaultTextEditor.js:
+        (WebInspector.TextEditorMainPanel.prototype._rewriteHref):
+        * inspector/front-end/ParsedURL.js: Added.
+        (WebInspector.ParsedURL):
+        (WebInspector.ParsedURL.completeURL):
+        (WebInspector.ParsedURL.prototype.get displayName):
+        (String.prototype.asParsedURL):
+        * inspector/front-end/ResourceUtils.js:
+        (WebInspector.resourceURLForRelatedNode):
+        * inspector/front-end/StylesSidebarPane.js:
+        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.linkifyURL):
+        * inspector/front-end/WebKit.qrc:
+        * inspector/front-end/inspector.html:
+
+2012-08-23  Pavel Feldman  <pfeld...@chromium.org>
+
         Web Inspector: register context menu providers for lazily loaded panels.
         https://bugs.webkit.org/show_bug.cgi?id=94812
 

Modified: trunk/Source/WebCore/WebCore.gypi (126425 => 126426)


--- trunk/Source/WebCore/WebCore.gypi	2012-08-23 14:59:13 UTC (rev 126425)
+++ trunk/Source/WebCore/WebCore.gypi	2012-08-23 15:08:29 UTC (rev 126426)
@@ -6347,6 +6347,7 @@
             'inspector/front-end/ObjectPropertiesSection.js',
             'inspector/front-end/Panel.js',
             'inspector/front-end/PanelEnablerView.js',
+            'inspector/front-end/ParsedURL.js',
             'inspector/front-end/Placard.js',
             'inspector/front-end/Popover.js',
             'inspector/front-end/PresentationConsoleMessageHelper.js',

Modified: trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj (126425 => 126426)


--- trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj	2012-08-23 14:59:13 UTC (rev 126425)
+++ trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj	2012-08-23 15:08:29 UTC (rev 126426)
@@ -76190,6 +76190,10 @@
 					>
 				</File>
 				<File
+					RelativePath="..\inspector\front-end\ParsedURL.js"
+					>
+				</File>
+				<File
 					RelativePath="..\inspector\front-end\panelEnablerView.css"
 					>
 				</File>

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


--- trunk/Source/WebCore/inspector/compile-front-end.py	2012-08-23 14:59:13 UTC (rev 126425)
+++ trunk/Source/WebCore/inspector/compile-front-end.py	2012-08-23 15:08:29 UTC (rev 126426)
@@ -45,6 +45,7 @@
         "sources": [
             "Color.js",
             "Object.js",
+            "ParsedURL.js",
             "Settings.js",
             "UIString.js",
             "UserMetrics.js",

Modified: trunk/Source/WebCore/inspector/front-end/AuditRules.js (126425 => 126426)


--- trunk/Source/WebCore/inspector/front-end/AuditRules.js	2012-08-23 14:59:13 UTC (rev 126425)
+++ trunk/Source/WebCore/inspector/front-end/AuditRules.js	2012-08-23 15:08:29 UTC (rev 126426)
@@ -718,7 +718,7 @@
             if (!src.asParsedURL()) {
                 for (var frameOwnerCandidate = node; frameOwnerCandidate; frameOwnerCandidate = frameOwnerCandidate.parentNode) {
                     if (frameOwnerCandidate.documentURL) {
-                        var completeSrc = WebInspector.completeURL(frameOwnerCandidate.documentURL, src);
+                        var completeSrc = WebInspector.ParsedURL.completeURL(frameOwnerCandidate.documentURL, src);
                         break;
                     }
                 }
@@ -858,7 +858,7 @@
                 var externalStylesheetHrefs = [];
                 for (var j = 0; j < externalStylesheetNodeIds.length; ++j) {
                     var linkNode = WebInspector.domAgent.nodeForId(externalStylesheetNodeIds[j]);
-                    var completeHref = WebInspector.completeURL(linkNode.ownerDocument.documentURL, linkNode.getAttribute("href"));
+                    var completeHref = WebInspector.ParsedURL.completeURL(linkNode.ownerDocument.documentURL, linkNode.getAttribute("href"));
                     externalStylesheetHrefs.push(completeHref || "<empty>");
                 }
                 urlToViolationsArray[root.documentURL] = [inlineStyleNodeIds.length, externalStylesheetHrefs];
@@ -939,7 +939,7 @@
                 var lateStyleUrls = [];
                 for (var i = 0; i < lateStyleIds.length; ++i) {
                     var lateStyleNode = WebInspector.domAgent.nodeForId(lateStyleIds[i]);
-                    var completeHref = WebInspector.completeURL(lateStyleNode.ownerDocument.documentURL, lateStyleNode.getAttribute("href"));
+                    var completeHref = WebInspector.ParsedURL.completeURL(lateStyleNode.ownerDocument.documentURL, lateStyleNode.getAttribute("href"));
                     lateStyleUrls.push(completeHref || "<empty>");
                 }
                 result = [ lateStyleUrls, cssBeforeInlineCount ];

Modified: trunk/Source/WebCore/inspector/front-end/DefaultTextEditor.js (126425 => 126426)


--- trunk/Source/WebCore/inspector/front-end/DefaultTextEditor.js	2012-08-23 14:59:13 UTC (rev 126425)
+++ trunk/Source/WebCore/inspector/front-end/DefaultTextEditor.js	2012-08-23 15:08:29 UTC (rev 126426)
@@ -2110,7 +2110,7 @@
     {
         if (!this._url || !hrefValue || hrefValue.indexOf("://") > 0)
             return hrefValue;
-        return WebInspector.completeURL(this._url, hrefValue);
+        return WebInspector.ParsedURL.completeURL(this._url, hrefValue);
     },
 
     _handleDOMUpdates: function(e)

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


--- trunk/Source/WebCore/inspector/front-end/ParsedURL.js	                        (rev 0)
+++ trunk/Source/WebCore/inspector/front-end/ParsedURL.js	2012-08-23 15:08:29 UTC (rev 126426)
@@ -0,0 +1,176 @@
+/*
+ * 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:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS 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 GOOGLE INC.
+ * OR ITS 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
+ * @param {string} url
+ */
+WebInspector.ParsedURL = function(url)
+{
+    this.isValid = false;
+    this.url = ""
+    this.scheme = "";
+    this.host = "";
+    this.port = "";
+    this.path = "";
+    this.queryParams = "";
+    this.fragment = "";
+    this.folderPathComponents = "";
+    this.lastPathComponent = "";
+
+    // RegExp groups:
+    // 1 - scheme
+    // 2 - hostname
+    // 3 - ?port
+    // 4 - ?path
+    // 5 - ?fragment
+    var match = url.match(/^([^:]+):\/\/([^\/:]*)(?::([\d]+))?(?:(\/[^#]*)(?:#(.*))?)?$/i);
+    if (match) {
+        this.isValid = true;
+        this.scheme = match[1].toLowerCase();
+        this.host = match[2];
+        this.port = match[3];
+        this.path = match[4] || "/";
+        this.fragment = match[5];
+    } else {
+        if (this.url.startsWith("data:")) {
+            this.scheme = "data";
+            return;
+        }
+        if (this.url ="" "about:blank") {
+            this.scheme = "about";
+            return;
+        }
+        this.path = this.url;
+    }
+
+    if (this.path) {
+        // First cut the query params.
+        var path = this.path;
+        var indexOfQuery = path.indexOf("?");
+        if (indexOfQuery !== -1) {
+            this.queryParams = path.substring(indexOfQuery + 1)
+            path = path.substring(0, indexOfQuery);
+        }
+
+        // Then take last path component.
+        var lastSlashIndex = path.lastIndexOf("/");
+        if (lastSlashIndex !== -1) {
+            this.folderPathComponents = path.substring(0, lastSlashIndex);
+            this.lastPathComponent = path.substring(lastSlashIndex + 1);
+        } else
+            this.lastPathComponent = path;
+    }
+}
+
+/**
+ * @param {string} baseURL
+ * @param {string} href
+ * @return {?string}
+ */
+WebInspector.ParsedURL.completeURL = function(baseURL, href)
+{
+    if (href) {
+        // Return absolute URLs as-is.
+        var parsedHref = href.asParsedURL();
+        if (parsedHref && parsedHref.scheme)
+            return href;
+
+        // Return special URLs as-is.
+        var trimmedHref = href.trim();
+        if (trimmedHref.startsWith("data:") || trimmedHref.startsWith("_javascript_:") || trimmedHref.startsWith("blob:"))
+            return href;
+    }
+
+    var parsedURL = baseURL.asParsedURL();
+    if (parsedURL) {
+        var path = href;
+        if (path.charAt(0) !== "/") {
+            var basePath = parsedURL.path;
+
+            // Trim off the query part of the basePath.
+            var questionMarkIndex = basePath.indexOf("?");
+            if (questionMarkIndex > 0)
+                basePath = basePath.substring(0, questionMarkIndex);
+            // A href of "?foo=bar" implies "basePath?foo=bar".
+            // With "basePath?a=b" and "?foo=bar" we should get "basePath?foo=bar".
+            var prefix;
+            if (path.charAt(0) === "?") {
+                var basePathCutIndex = basePath.indexOf("?");
+                if (basePathCutIndex !== -1)
+                    prefix = basePath.substring(0, basePathCutIndex);
+                else
+                    prefix = basePath;
+            } else
+                prefix = basePath.substring(0, basePath.lastIndexOf("/")) + "/";
+
+            path = prefix + path;
+        } else if (path.length > 1 && path.charAt(1) === "/") {
+            // href starts with "//" which is a full URL with the protocol dropped (use the baseURL protocol).
+            return parsedURL.scheme + ":" + path;
+        }
+        return parsedURL.scheme + "://" + parsedURL.host + (parsedURL.port ? (":" + parsedURL.port) : "") + path;
+    }
+    return null;
+}
+
+WebInspector.ParsedURL.prototype = {
+    get displayName()
+    {
+        if (this._displayName)
+            return this._displayName;
+
+        if (this.scheme === "data") {
+            this._displayName = this.url.trimEnd(20);
+            return this._displayName;
+        }
+
+        if (this.url ="" "about:blank")
+            return this.url;
+
+        this._displayName = this.lastPathComponent;
+        if (!this._displayName)
+            this._displayName = WebInspector.displayDomain(this.host);
+        if (!this._displayName && this.url)
+            this._displayName = this.url.trimURL(WebInspector.inspectedPageDomain ? WebInspector.inspectedPageDomain : "");
+        if (this._displayName === "/")
+            this._displayName = this.url;
+        return this._displayName;
+    }
+}
+
+/**
+ * @return {?WebInspector.ParsedURL}
+ */
+String.prototype.asParsedURL = function()
+{
+    var parsedURL = new WebInspector.ParsedURL(this.toString());
+    if (parsedURL.isValid)
+        return parsedURL;
+    return null;
+}
Property changes on: trunk/Source/WebCore/inspector/front-end/ParsedURL.js
___________________________________________________________________

Added: svn:eol-style

Modified: trunk/Source/WebCore/inspector/front-end/ResourceUtils.js (126425 => 126426)


--- trunk/Source/WebCore/inspector/front-end/ResourceUtils.js	2012-08-23 14:59:13 UTC (rev 126425)
+++ trunk/Source/WebCore/inspector/front-end/ResourceUtils.js	2012-08-23 15:08:29 UTC (rev 126426)
@@ -29,104 +29,7 @@
  */
 
 /**
- * @constructor
  * @param {string} url
- */
-WebInspector.ParsedURL = function(url)
-{
-    this.isValid = false;
-    this.url = ""
-    this.scheme = "";
-    this.host = "";
-    this.port = "";
-    this.path = "";
-    this.queryParams = "";
-    this.fragment = "";
-    this.folderPathComponents = "";
-    this.lastPathComponent = "";
-
-    // RegExp groups:
-    // 1 - scheme
-    // 2 - hostname
-    // 3 - ?port
-    // 4 - ?path
-    // 5 - ?fragment
-    var match = url.match(/^([^:]+):\/\/([^\/:]*)(?::([\d]+))?(?:(\/[^#]*)(?:#(.*))?)?$/i);
-    if (match) {
-        this.isValid = true;
-        this.scheme = match[1].toLowerCase();
-        this.host = match[2];
-        this.port = match[3];
-        this.path = match[4] || "/";
-        this.fragment = match[5];
-    } else {
-        if (this.url.startsWith("data:")) {
-            this.scheme = "data";
-            return;
-        }
-        if (this.url ="" "about:blank") {
-            this.scheme = "about";
-            return;
-        }
-        this.path = this.url;
-    }
-
-    if (this.path) {
-        // First cut the query params.
-        var path = this.path;
-        var indexOfQuery = path.indexOf("?");
-        if (indexOfQuery !== -1) {
-            this.queryParams = path.substring(indexOfQuery + 1)
-            path = path.substring(0, indexOfQuery);
-        }
-
-        // Then take last path component.
-        var lastSlashIndex = path.lastIndexOf("/");
-        if (lastSlashIndex !== -1) {
-            this.folderPathComponents = path.substring(0, lastSlashIndex);
-            this.lastPathComponent = path.substring(lastSlashIndex + 1);
-        } else
-            this.lastPathComponent = path;
-    }
-}
-
-WebInspector.ParsedURL.prototype = {
-    get displayName()
-    {
-        if (this._displayName)
-            return this._displayName;
-
-        if (this.scheme === "data") {
-            this._displayName = this.url.trimEnd(20);
-            return this._displayName;
-        }
-
-        if (this.url ="" "about:blank")
-            return this.url;
-
-        this._displayName = this.lastPathComponent;
-        if (!this._displayName)
-            this._displayName = WebInspector.displayDomain(this.host);
-        if (!this._displayName && this.url)
-            this._displayName = this.url.trimURL(WebInspector.inspectedPageDomain ? WebInspector.inspectedPageDomain : "");
-        if (this._displayName === "/")
-            this._displayName = this.url;
-        return this._displayName;
-    }
-}
-/**
- * @return {?WebInspector.ParsedURL}
- */
-String.prototype.asParsedURL = function()
-{
-    var parsedURL = new WebInspector.ParsedURL(this.toString());
-    if (parsedURL.isValid)
-        return parsedURL;
-    return null;
-}
-
-/**
- * @param {string} url
  * @return {?WebInspector.Resource}
  */
 WebInspector.resourceForURL = function(url)
@@ -347,7 +250,7 @@
 
     for (var frameOwnerCandidate = node; frameOwnerCandidate; frameOwnerCandidate = frameOwnerCandidate.parentNode) {
         if (frameOwnerCandidate.documentURL) {
-            var result = WebInspector.completeURL(frameOwnerCandidate.documentURL, url);
+            var result = WebInspector.ParsedURL.completeURL(frameOwnerCandidate.documentURL, url);
             if (result)
                 return result;
             break;
@@ -366,54 +269,3 @@
     WebInspector.forAllResources(callback);
     return resourceURL;
 }
-
-/**
- * @param {string} baseURL
- * @param {string} href
- * @return {?string}
- */
-WebInspector.completeURL = function(baseURL, href)
-{
-    if (href) {
-        // Return absolute URLs as-is.
-        var parsedHref = href.asParsedURL();
-        if (parsedHref && parsedHref.scheme)
-            return href;
-
-        // Return special URLs as-is.
-        var trimmedHref = href.trim();
-        if (trimmedHref.startsWith("data:") || trimmedHref.startsWith("_javascript_:") || trimmedHref.startsWith("blob:"))
-            return href;
-    }
-
-    var parsedURL = baseURL.asParsedURL();
-    if (parsedURL) {
-        var path = href;
-        if (path.charAt(0) !== "/") {
-            var basePath = parsedURL.path;
-
-            // Trim off the query part of the basePath.
-            var questionMarkIndex = basePath.indexOf("?");
-            if (questionMarkIndex > 0)
-                basePath = basePath.substring(0, questionMarkIndex);
-            // A href of "?foo=bar" implies "basePath?foo=bar".
-            // With "basePath?a=b" and "?foo=bar" we should get "basePath?foo=bar".
-            var prefix;
-            if (path.charAt(0) === "?") {
-                var basePathCutIndex = basePath.indexOf("?");
-                if (basePathCutIndex !== -1)
-                    prefix = basePath.substring(0, basePathCutIndex);
-                else
-                    prefix = basePath;
-            } else
-                prefix = basePath.substring(0, basePath.lastIndexOf("/")) + "/";
-
-            path = prefix + path;
-        } else if (path.length > 1 && path.charAt(1) === "/") {
-            // href starts with "//" which is a full URL with the protocol dropped (use the baseURL protocol).
-            return parsedURL.scheme + ":" + path;
-        }
-        return parsedURL.scheme + "://" + parsedURL.host + (parsedURL.port ? (":" + parsedURL.port) : "") + path;
-    }
-    return null;
-}

Modified: trunk/Source/WebCore/inspector/front-end/StylesSidebarPane.js (126425 => 126426)


--- trunk/Source/WebCore/inspector/front-end/StylesSidebarPane.js	2012-08-23 14:59:13 UTC (rev 126425)
+++ trunk/Source/WebCore/inspector/front-end/StylesSidebarPane.js	2012-08-23 15:08:29 UTC (rev 126426)
@@ -1717,7 +1717,7 @@
                 var container = document.createDocumentFragment();
                 container.appendChild(document.createTextNode("url("));
                 if (self._styleRule.sourceURL)
-                    hrefUrl = WebInspector.completeURL(self._styleRule.sourceURL, hrefUrl);
+                    hrefUrl = WebInspector.ParsedURL.completeURL(self._styleRule.sourceURL, hrefUrl);
                 else if (this._parentPane.node)
                     hrefUrl = WebInspector.resourceURLForRelatedNode(this._parentPane.node, hrefUrl);
                 var hasResource = !!WebInspector.resourceForURL(hrefUrl);

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


--- trunk/Source/WebCore/inspector/front-end/WebKit.qrc	2012-08-23 14:59:13 UTC (rev 126425)
+++ trunk/Source/WebCore/inspector/front-end/WebKit.qrc	2012-08-23 15:08:29 UTC (rev 126426)
@@ -117,6 +117,7 @@
     <file>ObjectPropertiesSection.js</file>
     <file>Panel.js</file>
     <file>PanelEnablerView.js</file>
+    <file>ParsedURL.js</file>
     <file>Placard.js</file>
     <file>Popover.js</file>
     <file>PresentationConsoleMessageHelper.js</file>

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


--- trunk/Source/WebCore/inspector/front-end/inspector.html	2012-08-23 14:59:13 UTC (rev 126425)
+++ trunk/Source/WebCore/inspector/front-end/inspector.html	2012-08-23 15:08:29 UTC (rev 126426)
@@ -74,6 +74,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
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to