Chromium Code Reviews| 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; |