OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/safe_browsing_db/remote_database_manager.h" | 5 #include "components/safe_browsing_db/remote_database_manager.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/metrics/histogram_macros.h" | 10 #include "base/metrics/histogram_macros.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
92 // CancelCheck() will delete *this. | 92 // CancelCheck() will delete *this. |
93 db_manager_->CancelCheck(client_); | 93 db_manager_->CancelCheck(client_); |
94 } | 94 } |
95 | 95 |
96 // | 96 // |
97 // RemoteSafeBrowsingDatabaseManager methods | 97 // RemoteSafeBrowsingDatabaseManager methods |
98 // | 98 // |
99 | 99 |
100 // TODO(nparker): Add more tests for this class | 100 // TODO(nparker): Add more tests for this class |
101 RemoteSafeBrowsingDatabaseManager::RemoteSafeBrowsingDatabaseManager() { | 101 RemoteSafeBrowsingDatabaseManager::RemoteSafeBrowsingDatabaseManager() { |
102 // Adding one element at a time to a base::flat_set is inefficient. Creating | |
103 // the list of elements in a vector first avoids extra allocations. | |
104 std::vector<content::ResourceType> types_to_check; | |
Nathan Parker
2017/04/25 15:23:14
This seems seems like overkill for 18 elements tha
Adam Rice
2017/04/26 05:18:27
I've tried adding directly to the set in patch set
| |
102 // Decide which resource types to check. These two are the minimum. | 105 // Decide which resource types to check. These two are the minimum. |
103 resource_types_to_check_.insert(content::RESOURCE_TYPE_MAIN_FRAME); | 106 types_to_check.push_back(content::RESOURCE_TYPE_MAIN_FRAME); |
104 resource_types_to_check_.insert(content::RESOURCE_TYPE_SUB_FRAME); | 107 types_to_check.push_back(content::RESOURCE_TYPE_SUB_FRAME); |
105 | 108 |
106 // The param is expected to be a comma-separated list of ints | 109 // The param is expected to be a comma-separated list of ints |
107 // corresponding to the enum types. We're keeping this finch | 110 // corresponding to the enum types. We're keeping this finch |
108 // control around so we can add back types if they later become dangerous. | 111 // control around so we can add back types if they later become dangerous. |
109 const std::string ints_str = variations::GetVariationParamValue( | 112 const std::string ints_str = variations::GetVariationParamValue( |
110 kAndroidFieldExperiment, kAndroidTypesToCheckParam); | 113 kAndroidFieldExperiment, kAndroidTypesToCheckParam); |
111 if (ints_str.empty()) { | 114 if (ints_str.empty()) { |
112 // By default, we check all types except a few. | 115 // By default, we check all types except a few. |
113 static_assert(content::RESOURCE_TYPE_LAST_TYPE == | 116 static_assert(content::RESOURCE_TYPE_LAST_TYPE == |
114 content::RESOURCE_TYPE_PLUGIN_RESOURCE + 1, | 117 content::RESOURCE_TYPE_PLUGIN_RESOURCE + 1, |
115 "Decide if new resource type should be skipped on mobile."); | 118 "Decide if new resource type should be skipped on mobile."); |
116 for (int t_int = 0; t_int < content::RESOURCE_TYPE_LAST_TYPE; t_int++) { | 119 for (int t_int = 0; t_int < content::RESOURCE_TYPE_LAST_TYPE; t_int++) { |
117 content::ResourceType t = static_cast<content::ResourceType>(t_int); | 120 content::ResourceType t = static_cast<content::ResourceType>(t_int); |
118 switch (t) { | 121 switch (t) { |
119 case content::RESOURCE_TYPE_STYLESHEET: | 122 case content::RESOURCE_TYPE_STYLESHEET: |
120 case content::RESOURCE_TYPE_IMAGE: | 123 case content::RESOURCE_TYPE_IMAGE: |
121 case content::RESOURCE_TYPE_FONT_RESOURCE: | 124 case content::RESOURCE_TYPE_FONT_RESOURCE: |
122 case content::RESOURCE_TYPE_FAVICON: | 125 case content::RESOURCE_TYPE_FAVICON: |
123 break; | 126 break; |
124 default: | 127 default: |
125 resource_types_to_check_.insert(t); | 128 types_to_check.push_back(t); |
126 } | 129 } |
127 } | 130 } |
128 } else { | 131 } else { |
129 // Use the finch param. | 132 // Use the finch param. |
130 for (const std::string& val_str : base::SplitString( | 133 for (const std::string& val_str : base::SplitString( |
131 ints_str, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) { | 134 ints_str, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) { |
132 int i; | 135 int i; |
133 if (base::StringToInt(val_str, &i) && i >= 0 && | 136 if (base::StringToInt(val_str, &i) && i >= 0 && |
134 i < content::RESOURCE_TYPE_LAST_TYPE) { | 137 i < content::RESOURCE_TYPE_LAST_TYPE) { |
135 resource_types_to_check_.insert(static_cast<content::ResourceType>(i)); | 138 types_to_check.push_back(static_cast<content::ResourceType>(i)); |
136 } | 139 } |
137 } | 140 } |
138 } | 141 } |
142 base::flat_set<content::ResourceType> resource_types_to_check_temporary( | |
143 std::move(types_to_check), base::KEEP_FIRST_OF_DUPES); | |
144 resource_types_to_check_.swap(resource_types_to_check_temporary); | |
139 } | 145 } |
140 | 146 |
141 RemoteSafeBrowsingDatabaseManager::~RemoteSafeBrowsingDatabaseManager() { | 147 RemoteSafeBrowsingDatabaseManager::~RemoteSafeBrowsingDatabaseManager() { |
142 DCHECK(!enabled_); | 148 DCHECK(!enabled_); |
143 } | 149 } |
144 | 150 |
145 void RemoteSafeBrowsingDatabaseManager::CancelCheck(Client* client) { | 151 void RemoteSafeBrowsingDatabaseManager::CancelCheck(Client* client) { |
146 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 152 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
147 DCHECK(enabled_); | 153 DCHECK(enabled_); |
148 for (auto itr = current_requests_.begin(); itr != current_requests_.end(); | 154 for (auto itr = current_requests_.begin(); itr != current_requests_.end(); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
300 for (auto* req : to_callback) { | 306 for (auto* req : to_callback) { |
301 DVLOG(1) << "Stopping: Invoking unfinished req for URL " << req->url(); | 307 DVLOG(1) << "Stopping: Invoking unfinished req for URL " << req->url(); |
302 req->OnRequestDone(SB_THREAT_TYPE_SAFE, ThreatMetadata()); | 308 req->OnRequestDone(SB_THREAT_TYPE_SAFE, ThreatMetadata()); |
303 } | 309 } |
304 enabled_ = false; | 310 enabled_ = false; |
305 | 311 |
306 SafeBrowsingDatabaseManager::StopOnIOThread(shutdown); | 312 SafeBrowsingDatabaseManager::StopOnIOThread(shutdown); |
307 } | 313 } |
308 | 314 |
309 } // namespace safe_browsing | 315 } // namespace safe_browsing |
OLD | NEW |