Index: chrome/browser/subresource_filter/chrome_subresource_filter_client.cc |
diff --git a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc b/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc |
index 8326fc3d2f978c81e58371fdfb12e94ae5ed1348..2c1620d18ab684b844d69f9988da0efa2d07feac 100644 |
--- a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc |
+++ b/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc |
@@ -12,19 +12,24 @@ |
#include "chrome/browser/content_settings/tab_specific_content_settings.h" |
#include "chrome/browser/infobars/infobar_service.h" |
#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/subresource_filter/subresource_filter_activation_tracker.h" |
+#include "chrome/browser/subresource_filter/subresource_filter_profile_context.h" |
#include "chrome/browser/subresource_filter/subresource_filter_profile_context_factory.h" |
#include "chrome/browser/ui/android/content_settings/subresource_filter_infobar_delegate.h" |
#include "components/content_settings/core/browser/host_content_settings_map.h" |
#include "components/content_settings/core/common/content_settings_types.h" |
#include "components/subresource_filter/content/browser/content_ruleset_service.h" |
+#include "components/subresource_filter/core/common/activation_level.h" |
+#include "components/subresource_filter/core/common/activation_state.h" |
#include "content/public/browser/navigation_handle.h" |
ChromeSubresourceFilterClient::ChromeSubresourceFilterClient( |
content::WebContents* web_contents) |
- : web_contents_(web_contents), did_show_ui_for_navigation_(false) { |
- DCHECK(web_contents); |
- SubresourceFilterProfileContextFactory::EnsureForProfile( |
- Profile::FromBrowserContext(web_contents_->GetBrowserContext())); |
+ : content::WebContentsObserver(web_contents), |
+ profile_context_(SubresourceFilterProfileContextFactory::GetForProfile( |
+ Profile::FromBrowserContext(web_contents->GetBrowserContext()))), |
+ did_show_ui_for_navigation_(false) { |
+ DCHECK(profile_context_); |
} |
ChromeSubresourceFilterClient::~ChromeSubresourceFilterClient() {} |
@@ -36,7 +41,7 @@ void ChromeSubresourceFilterClient::ToggleNotificationVisibility( |
did_show_ui_for_navigation_ = visibility; |
TabSpecificContentSettings* content_settings = |
- TabSpecificContentSettings::FromWebContents(web_contents_); |
+ TabSpecificContentSettings::FromWebContents(web_contents()); |
// |visibility| is false when a new navigation starts. |
if (visibility) { |
@@ -45,7 +50,7 @@ void ChromeSubresourceFilterClient::ToggleNotificationVisibility( |
LogAction(kActionUIShown); |
#if defined(OS_ANDROID) |
InfoBarService* infobar_service = |
- InfoBarService::FromWebContents(web_contents_); |
+ InfoBarService::FromWebContents(web_contents()); |
SubresourceFilterInfobarDelegate::Create(infobar_service); |
#endif |
} else { |
@@ -65,7 +70,7 @@ void ChromeSubresourceFilterClient::WhitelistByContentSettings( |
const GURL& url) { |
// Whitelist via content settings. |
Profile* profile = |
- Profile::FromBrowserContext(web_contents_->GetBrowserContext()); |
+ Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
DCHECK(profile); |
HostContentSettingsMap* settings_map = |
HostContentSettingsMapFactory::GetForProfile(profile); |
@@ -82,6 +87,18 @@ void ChromeSubresourceFilterClient::WhitelistInCurrentWebContents( |
whitelisted_hosts_.insert(url.host()); |
} |
+void ChromeSubresourceFilterClient::OnPageActivated( |
+ const subresource_filter::ActivationState& state) { |
+ DCHECK_NE(state.activation_level, |
+ subresource_filter::ActivationLevel::DISABLED); |
+ |
+ // Do not care about DRYRUN mode. |
+ bool activated = |
+ state.activation_level == subresource_filter::ActivationLevel::ENABLED; |
+ profile_context_->activation_tracker()->OnWebContentsActivated(web_contents(), |
+ activated); |
+} |
+ |
// static |
void ChromeSubresourceFilterClient::LogAction(SubresourceFilterAction action) { |
UMA_HISTOGRAM_ENUMERATION("SubresourceFilter.Actions", action, |
@@ -91,7 +108,7 @@ void ChromeSubresourceFilterClient::LogAction(SubresourceFilterAction action) { |
ContentSetting ChromeSubresourceFilterClient::GetContentSettingForUrl( |
const GURL& url) { |
Profile* profile = |
- Profile::FromBrowserContext(web_contents_->GetBrowserContext()); |
+ Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
DCHECK(profile); |
HostContentSettingsMap* settings_map = |
HostContentSettingsMapFactory::GetForProfile(profile); |
@@ -106,3 +123,16 @@ ChromeSubresourceFilterClient::GetRulesetDealer() { |
g_browser_process->subresource_filter_ruleset_service(); |
return ruleset_service ? ruleset_service->ruleset_dealer() : nullptr; |
} |
+ |
+void ChromeSubresourceFilterClient::DidStartNavigation( |
+ content::NavigationHandle* navigation_handle) { |
+ if (navigation_handle->IsInMainFrame()) { |
+ profile_context_->activation_tracker()->OnWebContentsActivated( |
+ web_contents(), false /* activated */); |
+ } |
+} |
+ |
+void ChromeSubresourceFilterClient::WebContentsDestroyed() { |
+ profile_context_->activation_tracker()->OnWebContentsDestroyed( |
+ web_contents()); |
+} |