Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: chrome/browser/browsing_data/origin_filter_builder.cc

Issue 1741123002: Add removal filter support for Cookies, Storage, and Content Settings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed Cookies, Tests, etc Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/browsing_data/origin_filter_builder.h" 5 #include "chrome/browser/browsing_data/origin_filter_builder.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "components/content_settings/core/common/content_settings_pattern.h"
12 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
11 13
12 namespace { 14 namespace {
13 15
14 bool NoopFilter(const GURL& url) { 16 bool NoopFilter(const GURL& url) {
15 return true; 17 return true;
16 } 18 }
17 19
18 } // namespace 20 } // namespace
19 21
20 OriginFilterBuilder::OriginFilterBuilder(Mode mode) 22 OriginFilterBuilder::OriginFilterBuilder(Mode mode)
(...skipping 19 matching lines...) Expand all
40 // origin. This is currently not a problem, but if it becomes one, 42 // origin. This is currently not a problem, but if it becomes one,
41 // consider recognizing the URL path. 43 // consider recognizing the URL path.
42 44
43 origin_list_.insert(origin); 45 origin_list_.insert(origin);
44 } 46 }
45 47
46 void OriginFilterBuilder::SetMode(Mode mode) { 48 void OriginFilterBuilder::SetMode(Mode mode) {
47 mode_ = mode; 49 mode_ = mode;
48 } 50 }
49 51
52 bool OriginFilterBuilder::IsEmptyBlacklist() const {
53 return mode_ == Mode::BLACKLIST && origin_list_.empty();
54 }
55
50 base::Callback<bool(const GURL&)> 56 base::Callback<bool(const GURL&)>
51 OriginFilterBuilder::BuildSameOriginFilter() const { 57 OriginFilterBuilder::BuildSameOriginFilter() const {
52 std::set<url::Origin>* origins = new std::set<url::Origin>(origin_list_); 58 std::set<url::Origin>* origins = new std::set<url::Origin>(origin_list_);
53 return base::Bind(&OriginFilterBuilder::MatchesURL, 59 return base::Bind(&OriginFilterBuilder::MatchesURL,
54 base::Owned(origins), mode_); 60 base::Owned(origins), mode_);
55 } 61 }
56 62
63 base::Callback<bool(const ContentSettingsPattern& pattern)>
64 OriginFilterBuilder::BuildSameOriginContentSettingsFilter() const {
msramek 2016/03/10 20:10:08 Consider renaming to BuildWebsiteSettingsFilter().
dmurph 2016/03/10 23:00:11 Hmm.... sounds good, should I add more documentati
msramek 2016/03/11 20:54:50 We're currently only dealing with website settings
65 std::set<url::Origin>* origins = new std::set<url::Origin>(origin_list_);
66 return base::Bind(&OriginFilterBuilder::MatchesContentSettingsPattern,
67 base::Owned(origins), mode_);
68 }
69
70 base::Callback<bool(const net::CanonicalCookie& pattern)>
71 OriginFilterBuilder::BuildDomainCookieFilter() const {
72 std::set<url::Origin>* origins = new std::set<url::Origin>(origin_list_);
73 return base::Bind(&OriginFilterBuilder::MatchesCookieForTLDPlusOne,
74 base::Owned(origins), mode_);
75 }
76
57 base::Callback<bool(const GURL&)> 77 base::Callback<bool(const GURL&)>
58 OriginFilterBuilder::BuildDomainFilter() const { 78 OriginFilterBuilder::BuildDomainFilter() const {
59 std::set<url::Origin>* origins = new std::set<url::Origin>(origin_list_); 79 std::set<url::Origin>* origins = new std::set<url::Origin>(origin_list_);
60 return base::Bind(&OriginFilterBuilder::MatchesURLWithSubdomains, 80 return base::Bind(&OriginFilterBuilder::MatchesURLWithSubdomains,
61 base::Owned(origins), mode_); 81 base::Owned(origins), mode_);
62 } 82 }
63 83
64 // static 84 // static
65 base::Callback<bool(const GURL&)> OriginFilterBuilder::BuildNoopFilter() { 85 base::Callback<bool(const GURL&)> OriginFilterBuilder::BuildNoopFilter() {
66 return base::Bind(&NoopFilter); 86 return base::Bind(&NoopFilter);
67 } 87 }
68 88
69 // static 89 // static
70 bool OriginFilterBuilder::MatchesURL( 90 bool OriginFilterBuilder::MatchesURL(
71 std::set<url::Origin>* origins, Mode mode, const GURL& url) { 91 std::set<url::Origin>* origins, Mode mode, const GURL& url) {
72 return ((origins->find(url::Origin(url)) != origins->end()) == 92 return ((origins->find(url::Origin(url)) != origins->end()) ==
73 (mode == WHITELIST)); 93 (mode == WHITELIST));
74 } 94 }
75 95
76 // static 96 // static
97 bool OriginFilterBuilder::MatchesContentSettingsPattern(
98 std::set<url::Origin>* origins,
99 Mode mode,
100 const ContentSettingsPattern& pattern) {
101 for (const url::Origin& origin : *origins) {
102 if (pattern.Matches(GURL(origin.Serialize())))
103 return mode == WHITELIST;
104 }
105 return mode != WHITELIST;
106 }
107
108 // static
109 bool OriginFilterBuilder::MatchesCookieForTLDPlusOne(
110 std::set<url::Origin>* origins,
111 Mode mode,
112 const net::CanonicalCookie& cookie) {
113 if (origins->empty())
114 return mode == BLACKLIST;
115
116 bool found = false;
117 std::string cookie_domain = cookie.Domain();
118 if (cookie.IsDomainCookie()) {
119 cookie_domain = cookie_domain.substr(1);
120 }
Mike West 2016/03/11 08:36:10 Nit: No {} for single-line clauses.
dmurph 2016/04/05 00:16:28 Done.
121 std::string cookie_tld_plus_one =
122 net::registry_controlled_domains::GetDomainAndRegistry(
msramek 2016/03/10 20:10:08 I'm not really familiar with cookies, so I'll trus
dmurph 2016/03/10 23:00:11 We basically break websites unless we treat this a
123 cookie_domain,
124 net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
125 for (const url::Origin& origin : *origins) {
126 GURL origin_url(origin.Serialize());
127 if (origin_url.HostIsIPAddress()) {
128 if (origin_url.host() == cookie_domain) {
129 found = true;
130 break;
131 }
132 } else if (cookie_tld_plus_one ==
133 net::registry_controlled_domains::GetDomainAndRegistry(
134 origin.host(), net::registry_controlled_domains::
135 INCLUDE_PRIVATE_REGISTRIES)) {
136 found = true;
137 break;
138 }
139 }
140 return (mode == WHITELIST) == found;
141 }
142
143 // static
77 bool OriginFilterBuilder::MatchesURLWithSubdomains( 144 bool OriginFilterBuilder::MatchesURLWithSubdomains(
78 std::set<url::Origin>* origins, Mode mode, const GURL& url) { 145 std::set<url::Origin>* origins, Mode mode, const GURL& url) {
79 if (origins->empty()) 146 if (origins->empty())
80 return mode == BLACKLIST; 147 return mode == BLACKLIST;
81 148
82 // If there is no concept of subdomains, simply delegate to MatchesURL(). 149 // If there is no concept of subdomains, simply delegate to MatchesURL().
83 if (url.HostIsIPAddress()) 150 if (url.HostIsIPAddress())
84 return MatchesURL(origins, mode, url); 151 return MatchesURL(origins, mode, url);
85 152
86 // TODO(msramek): We do not expect filters to be particularly large. 153 // TODO(msramek): We do not expect filters to be particularly large.
(...skipping 15 matching lines...) Expand all
102 if (origins->find(url::Origin(origin_with_removed_subdomain)) 169 if (origins->find(url::Origin(origin_with_removed_subdomain))
103 != origins->end()) { 170 != origins->end()) {
104 return mode == WHITELIST; 171 return mode == WHITELIST;
105 } 172 }
106 } 173 }
107 174
108 // We do not recognize the URL. Return false for whitelist mode and true 175 // We do not recognize the URL. Return false for whitelist mode and true
109 // for blacklist mode. 176 // for blacklist mode.
110 return mode == BLACKLIST; 177 return mode == BLACKLIST;
111 } 178 }
OLDNEW
« no previous file with comments | « chrome/browser/browsing_data/origin_filter_builder.h ('k') | chrome/browser/browsing_data/origin_filter_builder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698