| Index: content/browser/renderer_host/render_view_host_impl.cc | 
| diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc | 
| index 27f9a45fc1c1a884b0473ebf7d8966ece433723b..1d6c9d6bc622f1c53c2968b9a48ebe91c71b3135 100644 | 
| --- a/content/browser/renderer_host/render_view_host_impl.cc | 
| +++ b/content/browser/renderer_host/render_view_host_impl.cc | 
| @@ -233,6 +233,8 @@ RenderViewHostImpl::RenderViewHostImpl( | 
|  | 
| close_timeout_.reset(new TimeoutMonitor(base::Bind( | 
| &RenderViewHostImpl::ClosePageTimeout, weak_factory_.GetWeakPtr()))); | 
| + | 
| +  input_device_change_observer_ = new InputDeviceChangeObserver(this); | 
| } | 
|  | 
| RenderViewHostImpl::~RenderViewHostImpl() { | 
| @@ -243,7 +245,7 @@ RenderViewHostImpl::~RenderViewHostImpl() { | 
| base::Unretained(ResourceDispatcherHostImpl::Get()), | 
| GetProcess()->GetID(), GetRoutingID())); | 
| } | 
| - | 
| +  delete input_device_change_observer_; | 
| delegate_->RenderViewDeleted(this); | 
| GetProcess()->RemoveObserver(this); | 
| } | 
| @@ -905,6 +907,15 @@ void RenderViewHostImpl::OnWebkitPreferencesChanged() { | 
| updating_web_preferences_ = false; | 
| } | 
|  | 
| +bool RenderViewHostImpl::InputDeviceFeaturesChanged() { | 
| +  WebPreferences prefs = GetWebkitPreferences(); | 
| +  int available_pointer_types, available_hover_types; | 
| +  std::tie(available_pointer_types, available_hover_types) = | 
| +      ui::GetAvailablePointerAndHoverTypes(); | 
| +  return prefs.available_pointer_types != available_pointer_types || | 
| +         prefs.available_hover_types != available_hover_types; | 
| +} | 
| + | 
| void RenderViewHostImpl::DisableScrollbarsForThreshold(const gfx::Size& size) { | 
| Send(new ViewMsg_DisableScrollbarsForSmallWindows(GetRoutingID(), size)); | 
| } | 
|  |