Index: chrome/renderer/chrome_render_thread_observer.cc |
diff --git a/chrome/renderer/chrome_render_thread_observer.cc b/chrome/renderer/chrome_render_thread_observer.cc |
index 3b96a1577756971a9e423e4953ee1101aaf440de..4ab4663eaef9370aeceb9e42ab5c3b89271c8ab9 100644 |
--- a/chrome/renderer/chrome_render_thread_observer.cc |
+++ b/chrome/renderer/chrome_render_thread_observer.cc |
@@ -236,6 +236,7 @@ bool ChromeRenderThreadObserver::is_incognito_process_ = false; |
ChromeRenderThreadObserver::ChromeRenderThreadObserver() |
: field_trial_syncer_(this), |
visited_link_slave_(new visitedlink::VisitedLinkSlave), |
+ renderer_configuration_binding_(this), |
weak_factory_(this) { |
const base::CommandLine& command_line = |
*base::CommandLine::ForCurrentProcess(); |
@@ -274,12 +275,23 @@ ChromeRenderThreadObserver::ChromeRenderThreadObserver() |
ChromeRenderThreadObserver::~ChromeRenderThreadObserver() {} |
+void ChromeRenderThreadObserver::RegisterMojoInterfaces( |
+ content::AssociatedInterfaceRegistry* associated_interfaces) { |
+ associated_interfaces->AddInterface( |
+ base::Bind(&ChromeRenderThreadObserver::OnRendererInterfaceRequest, |
+ base::Unretained(this))); |
+} |
+ |
+void ChromeRenderThreadObserver::UnregisterMojoInterfaces( |
+ content::AssociatedInterfaceRegistry* associated_interfaces) { |
+ associated_interfaces->RemoveInterface( |
+ chrome::mojom::RendererConfiguration::Name_); |
+} |
+ |
bool ChromeRenderThreadObserver::OnControlMessageReceived( |
const IPC::Message& message) { |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP(ChromeRenderThreadObserver, message) |
- IPC_MESSAGE_HANDLER(ChromeViewMsg_SetIsIncognitoProcess, |
- OnSetIsIncognitoProcess) |
IPC_MESSAGE_HANDLER(ChromeViewMsg_SetFieldTrialGroup, OnSetFieldTrialGroup) |
IPC_MESSAGE_HANDLER(ChromeViewMsg_SetContentSettingRules, |
OnSetContentSettingRules) |
@@ -290,6 +302,13 @@ bool ChromeRenderThreadObserver::OnControlMessageReceived( |
void ChromeRenderThreadObserver::OnRenderProcessShutdown() { |
visited_link_slave_.reset(); |
+ // This renderer_configuration_binding_.Unbind call works around tests that |
Ken Rockot(use gerrit already)
2016/12/09 04:29:08
nit: Probably sufficient to just way "Workaround f
nigeltao1
2016/12/09 04:59:40
Done.
|
+ // run in single-process mode, where the renderer_configuration_binding_ |
+ // destructor is (mistakenly??) run on the wrong thread during teardown. See |
+ // https://groups.google.com/a/chromium.org/d/msg/chromium-mojo/BKjxN1DLdrc/vBCU5Pw5AAAJ |
+ // and http://crbug.com/672646 |
+ if (renderer_configuration_binding_.is_bound()) |
+ renderer_configuration_binding_.Unbind(); |
} |
void ChromeRenderThreadObserver::OnFieldTrialGroupFinalized( |
@@ -301,11 +320,17 @@ void ChromeRenderThreadObserver::OnFieldTrialGroupFinalized( |
field_trial_recorder->FieldTrialActivated(trial_name); |
} |
-void ChromeRenderThreadObserver::OnSetIsIncognitoProcess( |
+void ChromeRenderThreadObserver::SetInitialConfiguration( |
bool is_incognito_process) { |
is_incognito_process_ = is_incognito_process; |
} |
+void ChromeRenderThreadObserver::OnRendererInterfaceRequest( |
+ chrome::mojom::RendererConfigurationAssociatedRequest request) { |
+ DCHECK(!renderer_configuration_binding_.is_bound()); |
+ renderer_configuration_binding_.Bind(std::move(request)); |
+} |
+ |
void ChromeRenderThreadObserver::OnSetContentSettingRules( |
const RendererContentSettingRules& rules) { |
content_setting_rules_ = rules; |