Index: ash/shell.cc |
diff --git a/ash/shell.cc b/ash/shell.cc |
index 532da3e7fd56a71f1e7faec89a07a28f571bab13..785bb6ff1a22c5a4e45ef754058fff1ee3cc9c09 100644 |
--- a/ash/shell.cc |
+++ b/ash/shell.cc |
@@ -583,6 +583,7 @@ Shell::Shell(ShellDelegate* delegate) |
// We can't do this with a root window listener because XI_HierarchyChanged |
// messages don't have a target window. |
base::MessagePumpX11::Current()->AddObserver(output_configurator()); |
+ MediaCaptureDevicesDispatcher::GetInstance()->AddObserver(this); |
#endif // defined(OS_CHROMEOS) |
#if defined(OS_CHROMEOS) |
@@ -710,6 +711,7 @@ Shell::~Shell() { |
base::MessagePumpX11::Current()->RemoveDispatcherForRootWindow( |
output_configurator()); |
base::MessagePumpX11::Current()->RemoveObserver(output_configurator()); |
+ MediaCaptureDevicesDispatcher::GetInstance()->RemoveObserver(this); |
display_change_observer_.reset(); |
#endif // defined(OS_CHROMEOS) |
@@ -1036,4 +1038,23 @@ void Shell::OnWindowActivated(aura::Window* gained_active, |
target_root_window_ = gained_active->GetRootWindow(); |
} |
+//////////////////////////////////////////////////////////////////////////////// |
+// Shell, MediaCaptureDevicesDispatcher::Observer implementation: |
+ |
+void Shell::OnRequestUpdate(int render_process_id, |
+ int render_view_id, |
+ const content::MediaStreamDevice& device, |
+ const content::MediaRequestState state) { |
+#if defined(OS_CHROMEOS) && defined(USE_X11) |
+ if (device.type == content::MEDIA_TAB_VIDEO_CAPTURE || |
+ device.type == content::MEDIA_DESKTOP_VIDEO_CAPTURE) { |
+ if (state == content::MEDIA_REQUEST_STATE_DONE) { |
+ output_configurator_->OnScreenSharingChanged(true); |
+ } else if (state == content::MEDIA_REQUEST_STATE_CLOSING) { |
+ output_configurator_->OnScreenSharingChanged(false); |
+ } |
+ } |
+#endif |
+} |
+ |
} // namespace ash |