| 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..ed486e977e3e1b8447bef543d4f3be50af831680 100644
 | 
| --- a/chrome/renderer/chrome_render_thread_observer.cc
 | 
| +++ b/chrome/renderer/chrome_render_thread_observer.cc
 | 
| @@ -40,6 +40,7 @@
 | 
|  #include "chrome/renderer/security_filter_peer.h"
 | 
|  #include "components/visitedlink/renderer/visitedlink_slave.h"
 | 
|  #include "content/public/child/resource_dispatcher_delegate.h"
 | 
| +#include "content/public/common/associated_interface_registry.h"
 | 
|  #include "content/public/common/content_switches.h"
 | 
|  #include "content/public/renderer/render_thread.h"
 | 
|  #include "content/public/renderer/render_view.h"
 | 
| @@ -236,6 +237,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 +276,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 +303,10 @@ bool ChromeRenderThreadObserver::OnControlMessageReceived(
 | 
|  
 | 
|  void ChromeRenderThreadObserver::OnRenderProcessShutdown() {
 | 
|    visited_link_slave_.reset();
 | 
| +
 | 
| +  // Workaround for http://crbug.com/672646
 | 
| +  if (renderer_configuration_binding_.is_bound())
 | 
| +    renderer_configuration_binding_.Unbind();
 | 
|  }
 | 
|  
 | 
|  void ChromeRenderThreadObserver::OnFieldTrialGroupFinalized(
 | 
| @@ -301,11 +318,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;
 | 
| 
 |