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

Unified Diff: chrome/browser/subresource_filter/subresource_filter_content_settings_observer_factory.cc

Issue 2777093007: [subresource_filter] Add metrics for UI / related things (Closed)
Patch Set: Created 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/subresource_filter/subresource_filter_content_settings_observer_factory.cc
diff --git a/chrome/browser/subresource_filter/subresource_filter_content_settings_observer_factory.cc b/chrome/browser/subresource_filter/subresource_filter_content_settings_observer_factory.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f09944e1e75fc5bce3b0d4f4218f9a2970853898
--- /dev/null
+++ b/chrome/browser/subresource_filter/subresource_filter_content_settings_observer_factory.cc
@@ -0,0 +1,111 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/subresource_filter/subresource_filter_content_settings_observer_factory.h"
+
+#include "base/logging.h"
+#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/subresource_filter/chrome_subresource_filter_client.h"
+#include "components/content_settings/core/browser/content_settings_details.h"
+#include "components/content_settings/core/browser/host_content_settings_map.h"
+#include "components/content_settings/core/common/content_settings_pattern.h"
+#include "components/content_settings/core/common/content_settings_types.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "url/gurl.h"
+
+SubresourceFilterContentSettingsObserver::
+ SubresourceFilterContentSettingsObserver(Profile* profile)
+ : settings_map_(HostContentSettingsMapFactory::GetForProfile(profile)) {
+ DCHECK(profile);
+ settings_map_->AddObserver(this);
+}
+
+void SubresourceFilterContentSettingsObserver::OnContentSettingChanged(
msramek 2017/03/29 09:41:25 This method probably deserves a unittest. You ment
Charlie Harrison 2017/03/29 15:23:32 Done.
+ const ContentSettingsPattern& primary_pattern,
+ const ContentSettingsPattern& secondary_pattern,
msramek 2017/03/29 09:41:25 Do we care about the secondary pattern? If a user
Charlie Harrison 2017/03/29 15:23:32 Done. We may add this functionality in the future
+ ContentSettingsType content_type,
+ std::string resource_identifier) {
+ DCHECK(settings_map_);
+ if (content_type != CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER ||
+ !primary_pattern.IsValid()) {
+ return;
+ }
+
+ const ContentSettingsDetails details(primary_pattern, secondary_pattern,
+ content_type, resource_identifier);
+ if (details.update_all()) {
+ ContentSetting global_setting =
+ GetContentSettingForUrl(GURL("https://example.com"));
msramek 2017/03/29 09:41:25 I'm so going to mess with your metrics by flipping
Charlie Harrison 2017/03/29 15:23:32 Ha! Done. I knew there was a better way than this.
+ if (global_setting == CONTENT_SETTING_BLOCK) {
msramek 2017/03/29 09:41:25 style nit: Use a switch instead of NOTREACHED() to
Charlie Harrison 2017/03/29 15:23:32 There are 5 content settings that I'm not handling
msramek 2017/03/29 17:37:30 Sigh... For a moment, I completely forgot that we'
Charlie Harrison 2017/03/29 17:47:34 No worries! Reverted back to the if chain.
+ ChromeSubresourceFilterClient::LogSubresourceFilterAction(
+ kActionContentSettingsBlockedGlobal);
+ } else if (global_setting == CONTENT_SETTING_ALLOW) {
+ ChromeSubresourceFilterClient::LogSubresourceFilterAction(
+ kActionContentSettingsAllowedGlobal);
+ } else {
+ NOTREACHED();
+ }
+ return;
+ }
+
+ GURL url = GURL(primary_pattern.ToString());
+ if (!url.is_valid()) {
+ ChromeSubresourceFilterClient::LogSubresourceFilterAction(
+ kActionContentSettingsWildcardUpdate);
+ return;
+ }
+
+ ContentSetting setting = GetContentSettingForUrl(url);
+ if (setting == CONTENT_SETTING_BLOCK) {
msramek 2017/03/29 09:41:25 Ditto.
Charlie Harrison 2017/03/29 15:23:32 Done.
+ ChromeSubresourceFilterClient::LogSubresourceFilterAction(
+ kActionContentSettingsBlocked);
+ } else if (setting == CONTENT_SETTING_ALLOW) {
+ ChromeSubresourceFilterClient::LogSubresourceFilterAction(
+ kActionContentSettingsAllowed);
+ } else {
+ NOTREACHED();
+ }
+}
+
+void SubresourceFilterContentSettingsObserver::Shutdown() {
+ settings_map_->RemoveObserver(this);
+ settings_map_ = nullptr;
+}
+
+ContentSetting
+SubresourceFilterContentSettingsObserver::GetContentSettingForUrl(
+ const GURL& url) {
+ return settings_map_->GetContentSetting(
+ url, url, ContentSettingsType::CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER,
+ std::string());
+}
+
+// static
+SubresourceFilterContentSettingsObserver*
+SubresourceFilterContentSettingsObserverFactory::GetForProfile(
+ Profile* profile) {
+ return static_cast<SubresourceFilterContentSettingsObserver*>(
+ GetInstance()->GetServiceForBrowserContext(profile, true /* create */));
+}
+
+// static
+SubresourceFilterContentSettingsObserverFactory*
+SubresourceFilterContentSettingsObserverFactory::GetInstance() {
+ return base::Singleton<
+ SubresourceFilterContentSettingsObserverFactory>::get();
+}
+
+SubresourceFilterContentSettingsObserverFactory::
+ SubresourceFilterContentSettingsObserverFactory()
+ : BrowserContextKeyedServiceFactory(
+ "SubresourceFilterContentSettingsObserver",
+ BrowserContextDependencyManager::GetInstance()) {}
+
+KeyedService*
+SubresourceFilterContentSettingsObserverFactory::BuildServiceInstanceFor(
+ content::BrowserContext* profile) const {
+ return new SubresourceFilterContentSettingsObserver(
+ static_cast<Profile*>(profile));
+}

Powered by Google App Engine
This is Rietveld 408576698