Index: chrome/browser/renderer_host/browser_render_process_host.cc |
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc |
index 14fedea031c1134828f5db6f288eda7f63c20d1c..a76700c1a8606d4c30b52d0e005b863b6ab90451 100644 |
--- a/chrome/browser/renderer_host/browser_render_process_host.cc |
+++ b/chrome/browser/renderer_host/browser_render_process_host.cc |
@@ -285,6 +285,7 @@ BrowserRenderProcessHost::BrowserRenderProcessHost(Profile* profile) |
this, &BrowserRenderProcessHost::ClearTransportDIBCache)), |
accessibility_enabled_(false), |
extension_process_(false), |
+ resource_message_filter_(NULL), |
callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
widget_helper_ = new RenderWidgetHelper(); |
@@ -360,6 +361,8 @@ bool BrowserRenderProcessHost::Init( |
// content, e.g. if an extension calls window.open. |
extension_process_ = extension_process_ || is_extensions_process; |
+ pref_change_registrar_.Init(profile()->GetPrefs()); |
+ |
// run the IPC channel on the shared IO thread. |
base::Thread* io_thread = g_browser_process->io_thread(); |
@@ -461,13 +464,14 @@ void BrowserRenderProcessHost::CreateMessageFilters() { |
scoped_refptr<RendererURLRequestContextOverride> url_request_context_override( |
new RendererURLRequestContextOverride(profile(), installed_app_)); |
- ResourceMessageFilter* resource_message_filter = new ResourceMessageFilter( |
+ resource_message_filter_ = new ResourceMessageFilter( |
id(), ChildProcessInfo::RENDER_PROCESS, |
g_browser_process->resource_dispatcher_host()); |
- resource_message_filter->set_url_request_context_override( |
+ resource_message_filter_->set_url_request_context_override( |
url_request_context_override); |
- channel_->AddFilter(resource_message_filter); |
- |
+ pref_change_registrar_.Add(prefs::kEnableReferrers, this); |
+ UpdateReferrersEnabled(); |
+ channel_->AddFilter(resource_message_filter_); |
channel_->AddFilter(new AudioRendererHost()); |
channel_->AddFilter( |
new AppCacheDispatcherHost(profile()->GetRequestContext(), id())); |
@@ -1096,6 +1100,8 @@ void BrowserRenderProcessHost::OnChannelError() { |
ClearTransportDIBCache(); |
+ pref_change_registrar_.RemoveAll(); |
+ |
// this object is not deleted at this point and may be reused later. |
// TODO(darin): clean this up |
} |
@@ -1169,6 +1175,15 @@ void BrowserRenderProcessHost::Observe(NotificationType type, |
prefs->GetBoolean(prefs::kEnableAutoSpellCorrect)); |
break; |
} |
+ case NotificationType::PREF_CHANGED: { |
+ std::string* pref = Details<std::string>(details).ptr(); |
+ if (*pref == prefs::kEnableReferrers) { |
+ UpdateReferrersEnabled(); |
+ } else { |
+ NOTREACHED(); |
+ } |
+ break; |
+ } |
default: { |
NOTREACHED(); |
break; |
@@ -1318,3 +1333,9 @@ void BrowserRenderProcessHost::OpenPhishingModelDone( |
Send(new SafeBrowsingMsg_SetPhishingModel(file)); |
} |
} |
+ |
+void BrowserRenderProcessHost::UpdateReferrersEnabled() { |
+ DCHECK(resource_message_filter_); |
+ resource_message_filter_->set_referrers_enabled( |
+ profile()->GetPrefs()->GetBoolean(prefs::kEnableReferrers)); |
+} |