Chromium Code Reviews| 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()); |
|
alph
2017/04/26 22:00:05
Can't you just use lastPathComponentWithFragment()
luoe
2017/04/26 23:45:05
It doesn't include queryParams, but we could add i
|
| + 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 |
| }; |