Index: chrome/common/extensions/matcher/url_matcher.cc |
diff --git a/chrome/common/extensions/matcher/url_matcher.cc b/chrome/common/extensions/matcher/url_matcher.cc |
index 722efd9c3c633e6898c7f4462cdc181fbd387dac..0eb5ab507351d641e4655d34802bbe4bf4224f77 100644 |
--- a/chrome/common/extensions/matcher/url_matcher.cc |
+++ b/chrome/common/extensions/matcher/url_matcher.cc |
@@ -8,7 +8,9 @@ |
#include <iterator> |
#include "base/logging.h" |
+#include "content/public/common/url_constants.h" |
#include "googleurl/src/gurl.h" |
+#include "googleurl/src/url_canon.h" |
namespace extensions { |
@@ -88,19 +90,23 @@ namespace extensions { |
// Case 2: url_{prefix,suffix,equals,contains} searches. |
// ===================================================== |
// |
-// Step 1: as above |
+// Step 1: as above, except that |
+// - the scheme is not removed |
+// - the port is not removed if it is specified and does not match the default |
+// port for the given scheme. |
// |
// Step 2: |
// Translate URL to String and add the following position markers: |
// - BU = Beginning of URL |
// - EU = End of URL |
-// Furthermore, the hostname is canonicalized to start with a ".". |
// |
-// -> www.example.com/index.html?search=foo becomes |
-// BU .www.example.com/index.html?search=foo EU |
+// -> http://www.example.com:8080/index.html?search=foo#first_match becomes |
+// BU http://www.example.com:8080/index.html?search=foo EU |
+// -> http://www.example.com:80/index.html?search=foo#first_match becomes |
+// BU http://www.example.com/index.html?search=foo EU |
// |
-// url_prefix(prefix) = BU add_missing_dot_prefix(prefix) |
-// -> url_prefix("www.example") = BU .www.example |
+// url_prefix(prefix) = BU prefix |
+// -> url_prefix("http://www.example") = BU http://www.example |
// |
// url_contains(substring) = substring |
// -> url_contains("index") = index |
@@ -113,7 +119,7 @@ namespace extensions { |
// by a combination of a url_contains() query followed by an explicit test: |
// |
// host_contains(str) = url_contains(str) followed by test whether str occurs |
-// in host comonent of original URL. |
+// in host component of original URL. |
// -> host_contains("example.co") = example.co |
// followed by gurl.host().find("example.co"); |
// |
@@ -160,7 +166,7 @@ bool URLMatcherCondition::operator<(const URLMatcherCondition& rhs) const { |
bool URLMatcherCondition::IsFullURLCondition() const { |
// For these criteria the SubstringMatcher needs to be executed on the |
- // GURL that is canonlizaliced with |
+ // GURL that is canonicalized with |
// URLMatcherConditionFactory::CanonicalizeURLForFullSearches. |
switch (criterion_) { |
case HOST_CONTAINS: |
@@ -314,14 +320,26 @@ URLMatcherConditionFactory::CreateHostEqualsPathPrefixCondition( |
std::string URLMatcherConditionFactory::CanonicalizeURLForFullSearches( |
const GURL& url) { |
- return kBeginningOfURL + CanonicalizeHostname(url.host()) + url.path() + |
- (url.has_query() ? "?" + url.query() : "") + kEndOfURL; |
+ GURL::Replacements replacements; |
+ replacements.ClearPassword(); |
+ replacements.ClearUsername(); |
+ replacements.ClearRef(); |
+ // Clear port if it is implicit from scheme. |
+ if (url.has_port()) { |
+ const std::string& port = url.scheme(); |
+ if (url_canon::DefaultPortForScheme(port.c_str(), port.size()) == |
+ url.EffectiveIntPort()) { |
+ replacements.ClearPort(); |
+ } |
+ } |
+ return kBeginningOfURL + url.ReplaceComponents(replacements).spec() + |
+ kEndOfURL; |
} |
URLMatcherCondition URLMatcherConditionFactory::CreateURLPrefixCondition( |
const std::string& prefix) { |
return CreateCondition(URLMatcherCondition::URL_PREFIX, |
- kBeginningOfURL + CanonicalizeHostname(prefix)); |
+ kBeginningOfURL + prefix); |
} |
URLMatcherCondition URLMatcherConditionFactory::CreateURLSuffixCondition( |
@@ -337,7 +355,7 @@ URLMatcherCondition URLMatcherConditionFactory::CreateURLContainsCondition( |
URLMatcherCondition URLMatcherConditionFactory::CreateURLEqualsCondition( |
const std::string& str) { |
return CreateCondition(URLMatcherCondition::URL_EQUALS, |
- kBeginningOfURL + CanonicalizeHostname(str) + kEndOfURL); |
+ kBeginningOfURL + str + kEndOfURL); |
} |
void URLMatcherConditionFactory::ForgetUnusedPatterns( |