Index: third_party/WebKit/Source/devtools/front_end/common/ParsedURL.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/common/ParsedURL.js b/third_party/WebKit/Source/devtools/front_end/common/ParsedURL.js |
index a662928943705cce19fd302f1a2b73c9a074ecb0..ba434c58e2596b364a80c0d0afdd7a4ccb8e0b8c 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/common/ParsedURL.js |
+++ b/third_party/WebKit/Source/devtools/front_end/common/ParsedURL.js |
@@ -48,12 +48,12 @@ Common.ParsedURL = class { |
var match = url.match(Common.ParsedURL._urlRegex()); |
if (match) { |
this.isValid = true; |
- this.scheme = match[1].toLowerCase(); |
- this.host = match[2]; |
- this.port = match[3]; |
- this.path = match[4] || '/'; |
- this.queryParams = match[5] || ''; |
- this.fragment = match[6]; |
+ this.scheme = match[2].toLowerCase(); |
+ this.host = match[3]; |
+ this.port = match[4]; |
+ this.path = match[5] || '/'; |
+ this.queryParams = match[6] || ''; |
+ this.fragment = match[7]; |
} else { |
if (this.url.startsWith('data:')) { |
this.scheme = 'data'; |
@@ -97,12 +97,13 @@ Common.ParsedURL = class { |
if (Common.ParsedURL._urlRegexInstance) |
return Common.ParsedURL._urlRegexInstance; |
// RegExp groups: |
- // 1 - scheme (using the RFC3986 grammar) |
- // 2 - hostname |
- // 3 - ?port |
- // 4 - ?path |
- // 5 - ?query |
- // 6 - ?fragment |
+ // 1 - scheme, hostname, ?port |
+ // 2 - scheme (using the RFC3986 grammar) |
+ // 3 - hostname |
+ // 4 - ?port |
+ // 5 - ?path |
+ // 6 - ?query |
+ // 7 - ?fragment |
var schemeRegex = /([A-Za-z][A-Za-z0-9+.-]*):\/\//; |
var hostRegex = /([^\s\/:]*)/; |
var portRegex = /(?::([\d]+))?/; |
@@ -111,7 +112,7 @@ Common.ParsedURL = class { |
var fragmentRegex = /(?:#(.*))?/; |
Common.ParsedURL._urlRegexInstance = new RegExp( |
- '^' + schemeRegex.source + hostRegex.source + portRegex.source + pathRegex.source + queryRegex.source + |
+ '^(' + schemeRegex.source + hostRegex.source + portRegex.source + ')' + pathRegex.source + queryRegex.source + |
fragmentRegex.source + '$'); |
return Common.ParsedURL._urlRegexInstance; |
} |
@@ -210,8 +211,17 @@ Common.ParsedURL = class { |
* @return {!{url: string, lineNumber: (number|undefined), columnNumber: (number|undefined)}} |
*/ |
static splitLineAndColumn(string) { |
+ // Only look for line and column numbers in the path to avoid matching port numbers. |
+ var beforePathMatch = string.match(Common.ParsedURL._urlRegex()); |
+ var beforePath = ''; |
+ var pathAndAfter = string; |
+ if (beforePathMatch) { |
+ beforePath = beforePathMatch[1]; |
+ pathAndAfter = string.substring(beforePathMatch[1].length); |
+ } |
+ |
var lineColumnRegEx = /(?::(\d+))?(?::(\d+))?$/; |
- var lineColumnMatch = lineColumnRegEx.exec(string); |
+ var lineColumnMatch = lineColumnRegEx.exec(pathAndAfter); |
var lineNumber; |
var columnNumber; |
console.assert(lineColumnMatch); |
@@ -227,7 +237,7 @@ Common.ParsedURL = class { |
} |
return { |
- url: string.substring(0, string.length - lineColumnMatch[0].length), |
+ url: beforePath + pathAndAfter.substring(0, pathAndAfter.length - lineColumnMatch[0].length), |
lineNumber: lineNumber, |
columnNumber: columnNumber |
}; |