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=""