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

Unified Diff: chrome/browser/extensions/tab_helper.cc

Issue 1166393002: Reland "Encapsulate CSS selector declarative content condition tracking" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: address comments Created 5 years, 6 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
« no previous file with comments | « chrome/browser/extensions/tab_helper.h ('k') | chrome/chrome_browser_extensions.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/tab_helper.cc
diff --git a/chrome/browser/extensions/tab_helper.cc b/chrome/browser/extensions/tab_helper.cc
index 53c7127bca8d605c61649d00e8d0a554f89c95ca..5a96901f4f5ababfcd4f5e7267384dbe95144955 100644
--- a/chrome/browser/extensions/tab_helper.cc
+++ b/chrome/browser/extensions/tab_helper.cc
@@ -74,10 +74,9 @@ namespace extensions {
TabHelper::TabHelper(content::WebContents* web_contents)
: content::WebContentsObserver(web_contents),
+ profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())),
extension_app_(NULL),
- extension_function_dispatcher_(
- Profile::FromBrowserContext(web_contents->GetBrowserContext()),
- this),
+ extension_function_dispatcher_(profile_, this),
pending_web_app_action_(NONE),
last_committed_nav_entry_unique_id_(0),
update_shortcut_on_load_complete_(false),
@@ -97,14 +96,14 @@ TabHelper::TabHelper(content::WebContents* web_contents)
active_tab_permission_granter_.reset(new ActiveTabPermissionGranter(
web_contents,
SessionTabHelper::IdForTab(web_contents),
- Profile::FromBrowserContext(web_contents->GetBrowserContext())));
-
- // If more classes need to listen to global content script activity, then
- // a separate routing class with an observer interface should be written.
- profile_ = Profile::FromBrowserContext(web_contents->GetBrowserContext());
+ profile_));
AddScriptExecutionObserver(ActivityLog::GetInstance(profile_));
+ InvokeForContentRulesRegistries([this](ContentRulesRegistry* registry) {
+ registry->MonitorWebContentsForRuleEvaluation(this->web_contents());
+ });
+
registrar_.Add(this,
content::NOTIFICATION_LOAD_STOP,
content::Source<NavigationController>(
@@ -192,6 +191,30 @@ SkBitmap* TabHelper::GetExtensionAppIcon() {
return &extension_app_icon_;
}
+// Encapsulates the logic to decide which ContentRulesRegistries need to be
+// invoked, depending on whether this WebContents is associated with an Original
+// or OffTheRecord profile. In the latter case, we need to invoke on both the
+// Original and OffTheRecord ContentRulesRegistries since the Original registry
+// handles spanning-mode incognito extensions.
+template <class Func>
+void TabHelper::InvokeForContentRulesRegistries(const Func& func) {
+ RulesRegistryService* rules_registry_service =
+ RulesRegistryService::Get(profile_);
+ if (rules_registry_service) {
+ func(rules_registry_service->content_rules_registry());
+ if (profile_->IsOffTheRecord()) {
+ // The original profile's content rules registry handles rules for
+ // spanning extensions in incognito profiles, so invoke it also.
+ RulesRegistryService* original_profile_rules_registry_service =
+ RulesRegistryService::Get(profile_->GetOriginalProfile());
+ DCHECK_NE(rules_registry_service,
+ original_profile_rules_registry_service);
+ if (original_profile_rules_registry_service)
+ func(original_profile_rules_registry_service->content_rules_registry());
+ }
+ }
+}
+
void TabHelper::FinishCreateBookmarkApp(
const Extension* extension,
const WebApplicationInfo& web_app_info) {
@@ -205,27 +228,10 @@ void TabHelper::RenderFrameCreated(content::RenderFrameHost* host) {
void TabHelper::DidNavigateMainFrame(
const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) {
- RulesRegistryService* rules_registry_service =
- RulesRegistryService::Get(profile_);
- if (rules_registry_service) {
- rules_registry_service->content_rules_registry()->
- DidNavigateMainFrame(web_contents(), details, params);
- // The original profile's content rules registry handles rules for spanning
- // extensions in incognito profiles, so let it know about the navigation
- // also.
- if (profile_->IsOffTheRecord()) {
- RulesRegistryService* incognito_rules_registry_service =
- RulesRegistryService::Get(profile_->GetOriginalProfile());
- // The content and web request rules registries depend on separate
- // instances for original/incognito profiles. See the comment on
- // ChromeContentRulesRegistry.
- DCHECK_NE(rules_registry_service, incognito_rules_registry_service);
- if (incognito_rules_registry_service) {
- incognito_rules_registry_service->content_rules_registry()->
- DidNavigateMainFrame(web_contents(), details, params);
- }
- }
- }
+ InvokeForContentRulesRegistries(
+ [this, &details, &params](ContentRulesRegistry* registry) {
+ registry->DidNavigateMainFrame(web_contents(), details, params);
+ });
content::BrowserContext* context = web_contents()->GetBrowserContext();
ExtensionRegistry* registry = ExtensionRegistry::Get(context);
@@ -262,8 +268,6 @@ bool TabHelper::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(ExtensionHostMsg_GetAppInstallState,
OnGetAppInstallState);
IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest)
- IPC_MESSAGE_HANDLER(ExtensionHostMsg_OnWatchedPageChange,
- OnWatchedPageChange)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -356,12 +360,9 @@ void TabHelper::OnInlineWebstoreInstall(int install_id,
}
// Inform the Webstore API that an inline install is happening, in case the
// page requested status updates.
- Profile* profile =
- Profile::FromBrowserContext(web_contents()->GetBrowserContext());
-
- ExtensionRegistry* registry = ExtensionRegistry::Get(profile);
+ ExtensionRegistry* registry = ExtensionRegistry::Get(profile_);
if (registry->disabled_extensions().Contains(webstore_item_id) &&
- (ExtensionPrefs::Get(profile)->GetDisableReasons(webstore_item_id) &
+ (ExtensionPrefs::Get(profile_)->GetDisableReasons(webstore_item_id) &
Extension::DISABLE_PERMISSIONS_INCREASE) != 0) {
// The extension was disabled due to permissions increase. Prompt for
// re-enable.
@@ -371,7 +372,7 @@ void TabHelper::OnInlineWebstoreInstall(int install_id,
extension_reenabler_.reset();
extension_reenabler_ = ExtensionReenabler::PromptForReenable(
registry->disabled_extensions().GetByID(webstore_item_id),
- profile,
+ profile_,
web_contents(),
requestor_url,
base::Bind(&TabHelper::OnReenableComplete,
@@ -381,7 +382,7 @@ void TabHelper::OnInlineWebstoreInstall(int install_id,
} else {
// TODO(devlin): We should adddress the case of the extension already
// being installed and enabled.
- WebstoreAPI::Get(profile)->OnInlineInstallStart(
+ WebstoreAPI::Get(profile_)->OnInlineInstallStart(
return_route_id, this, webstore_item_id, listeners_mask);
WebstoreStandaloneInstaller::Callback callback =
@@ -433,15 +434,6 @@ void TabHelper::OnContentScriptsExecuting(
OnScriptsExecuted(web_contents(), executing_scripts_map, on_url));
}
-void TabHelper::OnWatchedPageChange(
- const std::vector<std::string>& css_selectors) {
- if (ExtensionSystem::Get(profile_)->extension_service() &&
- RulesRegistryService::Get(profile_)) {
- RulesRegistryService::Get(profile_)->content_rules_registry()->Apply(
- web_contents(), css_selectors);
- }
-}
-
void TabHelper::OnDetailedConsoleMessageAdded(
const base::string16& message,
const base::string16& source,
@@ -480,9 +472,7 @@ void TabHelper::UpdateExtensionAppIcon(const Extension* extension) {
// Enqueue OnImageLoaded callback.
if (extension) {
- Profile* profile =
- Profile::FromBrowserContext(web_contents()->GetBrowserContext());
- ImageLoader* loader = ImageLoader::Get(profile);
+ ImageLoader* loader = ImageLoader::Get(profile_);
loader->LoadImageAsync(
extension,
IconsInfo::GetIconResource(extension,
« no previous file with comments | « chrome/browser/extensions/tab_helper.h ('k') | chrome/chrome_browser_extensions.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698