Chromium Code Reviews| Index: components/content_settings/core/common/content_settings_pattern.cc |
| diff --git a/components/content_settings/core/common/content_settings_pattern.cc b/components/content_settings/core/common/content_settings_pattern.cc |
| index 74a9ffaf86d16c055e4613fe3daac1f076becb74..d6dd272f3a8fe8968f03daebd22d6b3863e518f6 100644 |
| --- a/components/content_settings/core/common/content_settings_pattern.cc |
| +++ b/components/content_settings/core/common/content_settings_pattern.cc |
| @@ -439,6 +439,60 @@ ContentSettingsPattern ContentSettingsPattern::FromString( |
| } |
| // static |
| +bool ContentSettingsPattern::MigrateFromDomainToOrigin( |
| + const ContentSettingsPattern& domain_pattern, |
| + ContentSettingsPattern* origin_pattern) { |
| + DCHECK(origin_pattern); |
| + |
| + // Generated patterns with ::FromURL (which we want to migrate) must either |
| + // have a scheme wildcard or be https. |
| + if (domain_pattern.parts_.scheme != url::kHttpsScheme && |
| + !domain_pattern.parts_.is_scheme_wildcard) { |
| + return false; |
| + } |
| + |
| + // Generated patterns using ::FromURL with the HTTPs scheme can not have a |
| + // port wildcard. |
| + if (domain_pattern.parts_.is_port_wildcard && |
| + domain_pattern.parts_.scheme == url::kHttpsScheme) { |
| + return false; |
| + } |
| + |
| + // Patterns generated with ::FromURL will always have a domain wildcard. Those |
| + // generated with ::FromURLNoWildcard don't. |
| + if (!domain_pattern.parts_.has_domain_wildcard) |
| + return false; |
| + |
| + // Generated patterns with ::FromURL will always have a host. |
| + if (domain_pattern.parts_.host.empty()) |
| + return false; |
| + |
| + std::unique_ptr<ContentSettingsPattern::BuilderInterface> builder( |
| + ContentSettingsPattern::CreateBuilder(false)); |
| + |
| + if (domain_pattern.parts_.is_scheme_wildcard) |
| + builder->WithScheme(url::kHttpScheme); |
| + else |
| + builder->WithScheme(domain_pattern.parts_.scheme); |
| + |
| + builder->WithHost(domain_pattern.parts_.host); |
| + |
| + if (domain_pattern.parts_.is_port_wildcard) { |
|
msramek
2016/07/07 12:19:24
This logic is exactly what the PatternParser does
lshang
2016/07/08 01:19:43
Since we need to generate a new pattern which is b
|
| + if (domain_pattern.parts_.scheme == url::kHttpsScheme) { |
| + builder->WithPort(GetDefaultPort(url::kHttpsScheme)); |
| + } else { |
| + builder->WithPort(GetDefaultPort(url::kHttpScheme)); |
| + } |
| + } else { |
| + builder->WithPort(domain_pattern.parts_.port); |
| + } |
| + |
| + *origin_pattern = builder->Build(); |
| + |
| + return true; |
| +} |
| + |
| +// static |
| void ContentSettingsPattern::SetNonWildcardDomainNonPortScheme( |
| const char* scheme) { |
| DCHECK(scheme); |