OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/extensions/activity_log/uma_policy.h" | 5 #include "chrome/browser/extensions/activity_log/uma_policy.h" |
6 | 6 |
7 #include "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
10 #include "chrome/browser/extensions/active_script_controller.h" | 10 #include "chrome/browser/extensions/active_script_controller.h" |
11 #include "chrome/browser/extensions/activity_log/activity_action_constants.h" | 11 #include "chrome/browser/extensions/activity_log/activity_action_constants.h" |
12 #include "chrome/browser/extensions/activity_log/ad_network_database.h" | 12 #include "chrome/browser/extensions/activity_log/ad_network_database.h" |
13 #include "chrome/browser/sessions/session_id.h" | 13 #include "chrome/browser/sessions/session_id.h" |
14 #include "chrome/browser/ui/browser.h" | 14 #include "chrome/browser/ui/browser.h" |
15 #include "chrome/browser/ui/browser_list.h" | 15 #include "chrome/browser/ui/browser_list.h" |
16 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 16 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
17 #include "chrome/common/url_constants.h" | 17 #include "chrome/common/url_constants.h" |
18 #include "content/public/browser/web_contents.h" | 18 #include "content/public/browser/web_contents.h" |
19 #include "content/public/common/url_constants.h" | 19 #include "content/public/common/url_constants.h" |
| 20 #include "extensions/browser/extension_registry.h" |
20 #include "extensions/common/dom_action_types.h" | 21 #include "extensions/common/dom_action_types.h" |
| 22 #include "extensions/common/extension.h" |
| 23 #include "extensions/common/manifest.h" |
21 | 24 |
22 namespace extensions { | 25 namespace extensions { |
23 | 26 |
24 namespace { | 27 namespace { |
25 | 28 |
26 // For convenience. | 29 // For convenience. |
27 const int kNoStatus = UmaPolicy::NONE; | 30 const int kNoStatus = UmaPolicy::NONE; |
28 const int kContentScript = 1 << UmaPolicy::CONTENT_SCRIPT; | 31 const int kContentScript = 1 << UmaPolicy::CONTENT_SCRIPT; |
29 const int kReadDom = 1 << UmaPolicy::READ_DOM; | 32 const int kReadDom = 1 << UmaPolicy::READ_DOM; |
30 const int kModifiedDom = 1 << UmaPolicy::MODIFIED_DOM; | 33 const int kModifiedDom = 1 << UmaPolicy::MODIFIED_DOM; |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 cleaned_url == chrome::kChromeUINewTabURL) | 190 cleaned_url == chrome::kChromeUINewTabURL) |
188 return; | 191 return; |
189 | 192 |
190 int statuses[MAX_STATUS - 1]; | 193 int statuses[MAX_STATUS - 1]; |
191 std::memset(statuses, 0, sizeof(statuses)); | 194 std::memset(statuses, 0, sizeof(statuses)); |
192 | 195 |
193 ActiveScriptController* active_script_controller = | 196 ActiveScriptController* active_script_controller = |
194 ActiveScriptController::GetForWebContents(web_contents); | 197 ActiveScriptController::GetForWebContents(web_contents); |
195 SiteMap::iterator site_lookup = url_status_.find(cleaned_url); | 198 SiteMap::iterator site_lookup = url_status_.find(cleaned_url); |
196 const ExtensionMap& exts = site_lookup->second; | 199 const ExtensionMap& exts = site_lookup->second; |
197 std::vector<std::string> ad_injectors; | 200 std::set<std::string> ad_injectors; |
198 for (ExtensionMap::const_iterator ext_iter = exts.begin(); | 201 for (ExtensionMap::const_iterator ext_iter = exts.begin(); |
199 ext_iter != exts.end(); | 202 ext_iter != exts.end(); |
200 ++ext_iter) { | 203 ++ext_iter) { |
201 if (ext_iter->first == kNumberOfTabs) | 204 if (ext_iter->first == kNumberOfTabs) |
202 continue; | 205 continue; |
203 for (int i = NONE + 1; i < MAX_STATUS; ++i) { | 206 for (int i = NONE + 1; i < MAX_STATUS; ++i) { |
204 if (ext_iter->second & (1 << i)) | 207 if (ext_iter->second & (1 << i)) |
205 statuses[i-1]++; | 208 statuses[i-1]++; |
206 } | 209 } |
207 | 210 |
208 if ((ext_iter->second & kAnyAdActivity) && active_script_controller) | 211 if (ext_iter->second & kAnyAdActivity) |
209 ad_injectors.push_back(ext_iter->first); | 212 ad_injectors.insert(ext_iter->first); |
210 } | 213 } |
211 if (active_script_controller) | 214 if (active_script_controller) |
212 active_script_controller->OnAdInjectionDetected(ad_injectors); | 215 active_script_controller->OnAdInjectionDetected(ad_injectors); |
213 | 216 |
| 217 ExtensionRegistry* registry = ExtensionRegistry::Get(profile_); |
| 218 for (std::set<std::string>::const_iterator iter = ad_injectors.begin(); |
| 219 iter != ad_injectors.end(); |
| 220 ++iter) { |
| 221 const Extension* extension = |
| 222 registry->GetExtensionById(*iter, ExtensionRegistry::EVERYTHING); |
| 223 if (extension) { |
| 224 UMA_HISTOGRAM_ENUMERATION("Extensions.AdInjection.InstallLocation", |
| 225 extension->location(), |
| 226 Manifest::NUM_LOCATIONS); |
| 227 } |
| 228 } |
| 229 |
214 std::string prefix = "ExtensionActivity."; | 230 std::string prefix = "ExtensionActivity."; |
215 if (GURL(cleaned_url).host() != "www.google.com") { | 231 if (GURL(cleaned_url).host() != "www.google.com") { |
216 UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(CONTENT_SCRIPT), | 232 UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(CONTENT_SCRIPT), |
217 statuses[CONTENT_SCRIPT - 1]); | 233 statuses[CONTENT_SCRIPT - 1]); |
218 UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(READ_DOM), | 234 UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(READ_DOM), |
219 statuses[READ_DOM - 1]); | 235 statuses[READ_DOM - 1]); |
220 UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(MODIFIED_DOM), | 236 UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(MODIFIED_DOM), |
221 statuses[MODIFIED_DOM - 1]); | 237 statuses[MODIFIED_DOM - 1]); |
222 UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(DOM_METHOD), | 238 UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(DOM_METHOD), |
223 statuses[DOM_METHOD - 1]); | 239 statuses[DOM_METHOD - 1]); |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 return "AdLikelyReplaced"; | 454 return "AdLikelyReplaced"; |
439 case NONE: | 455 case NONE: |
440 case MAX_STATUS: | 456 case MAX_STATUS: |
441 default: | 457 default: |
442 NOTREACHED(); | 458 NOTREACHED(); |
443 return ""; | 459 return ""; |
444 } | 460 } |
445 } | 461 } |
446 | 462 |
447 } // namespace extensions | 463 } // namespace extensions |
OLD | NEW |