OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/host/basic_desktop_environment.h" | 5 #include "remoting/host/basic_desktop_environment.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
10 #include "media/video/capture/screen/screen_capturer.h" | 10 #include "media/video/capture/screen/screen_capturer.h" |
11 #include "remoting/host/audio_capturer.h" | 11 #include "remoting/host/audio_capturer.h" |
12 #include "remoting/host/client_session_control.h" | 12 #include "remoting/host/client_session_control.h" |
13 #include "remoting/host/host_window.h" | |
14 #include "remoting/host/host_window_proxy.h" | |
15 #include "remoting/host/input_injector.h" | 13 #include "remoting/host/input_injector.h" |
16 #include "remoting/host/local_input_monitor.h" | |
17 #include "remoting/host/screen_controls.h" | 14 #include "remoting/host/screen_controls.h" |
18 #include "remoting/host/ui_strings.h" | |
19 | |
20 #if defined(OS_POSIX) | |
21 #include <sys/types.h> | |
22 #include <unistd.h> | |
23 #endif // defined(OS_POSIX) | |
24 | 15 |
25 namespace remoting { | 16 namespace remoting { |
26 | 17 |
27 BasicDesktopEnvironment::~BasicDesktopEnvironment() { | 18 BasicDesktopEnvironment::~BasicDesktopEnvironment() { |
28 DCHECK(caller_task_runner_->BelongsToCurrentThread()); | 19 DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
29 } | 20 } |
30 | 21 |
31 scoped_ptr<AudioCapturer> BasicDesktopEnvironment::CreateAudioCapturer() { | 22 scoped_ptr<AudioCapturer> BasicDesktopEnvironment::CreateAudioCapturer() { |
32 DCHECK(caller_task_runner_->BelongsToCurrentThread()); | 23 DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
33 | 24 |
(...skipping 25 matching lines...) Expand all Loading... |
59 | 50 |
60 // The basic desktop environment does not use X DAMAGE, since it is | 51 // The basic desktop environment does not use X DAMAGE, since it is |
61 // broken on many systems - see http://crbug.com/73423. | 52 // broken on many systems - see http://crbug.com/73423. |
62 return media::ScreenCapturer::Create(); | 53 return media::ScreenCapturer::Create(); |
63 } | 54 } |
64 | 55 |
65 BasicDesktopEnvironment::BasicDesktopEnvironment( | 56 BasicDesktopEnvironment::BasicDesktopEnvironment( |
66 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, | 57 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
67 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, | 58 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, |
68 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, | 59 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
69 const UiStrings* ui_strings) | 60 base::WeakPtr<ClientSessionControl> client_session_control, |
| 61 const UiStrings& ui_strings) |
70 : caller_task_runner_(caller_task_runner), | 62 : caller_task_runner_(caller_task_runner), |
71 input_task_runner_(input_task_runner), | 63 input_task_runner_(input_task_runner), |
72 ui_task_runner_(ui_task_runner), | 64 ui_task_runner_(ui_task_runner) { |
73 ui_strings_(ui_strings) { | |
74 DCHECK(caller_task_runner_->BelongsToCurrentThread()); | 65 DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
75 } | 66 } |
76 | 67 |
77 void BasicDesktopEnvironment::InitNonCurtainedSessionUI( | |
78 base::WeakPtr<ClientSessionControl> client_session_control) { | |
79 // Create the local input monitor. | |
80 local_input_monitor_ = LocalInputMonitor::Create(caller_task_runner_, | |
81 input_task_runner_, | |
82 ui_task_runner_, | |
83 client_session_control); | |
84 | |
85 bool show_disconnect_window = true; | |
86 #if defined(OS_MACOSX) | |
87 // Don't try to display any UI on top of the system's login screen as this | |
88 // is rejected by the Window Server on OS X 10.7.4, and prevents the | |
89 // capturer from working (http://crbug.com/140984). | |
90 | |
91 // TODO(lambroslambrou): Use a better technique of detecting whether we're | |
92 // running in the LoginWindow context, and refactor this into a separate | |
93 // function to be used here and in CurtainMode::ActivateCurtain(). | |
94 show_disconnect_window = getuid() != 0; | |
95 #endif // OS_MACOSX | |
96 | |
97 // Create the disconnect window. | |
98 if (show_disconnect_window) { | |
99 disconnect_window_ = HostWindow::CreateDisconnectWindow(*ui_strings_); | |
100 disconnect_window_.reset(new HostWindowProxy( | |
101 caller_task_runner_, | |
102 ui_task_runner_, | |
103 disconnect_window_.Pass())); | |
104 disconnect_window_->Start(client_session_control); | |
105 } | |
106 } | |
107 | |
108 BasicDesktopEnvironmentFactory::BasicDesktopEnvironmentFactory( | 68 BasicDesktopEnvironmentFactory::BasicDesktopEnvironmentFactory( |
109 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, | 69 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
110 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, | 70 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, |
111 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, | 71 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
112 const UiStrings& ui_strings) | 72 const UiStrings& ui_strings) |
113 : caller_task_runner_(caller_task_runner), | 73 : caller_task_runner_(caller_task_runner), |
114 input_task_runner_(input_task_runner), | 74 input_task_runner_(input_task_runner), |
115 ui_task_runner_(ui_task_runner), | 75 ui_task_runner_(ui_task_runner), |
116 ui_strings_(ui_strings) { | 76 ui_strings_(ui_strings) { |
117 } | 77 } |
118 | 78 |
119 BasicDesktopEnvironmentFactory::~BasicDesktopEnvironmentFactory() { | 79 BasicDesktopEnvironmentFactory::~BasicDesktopEnvironmentFactory() { |
120 } | 80 } |
121 | 81 |
122 scoped_ptr<DesktopEnvironment> BasicDesktopEnvironmentFactory::Create( | 82 scoped_ptr<DesktopEnvironment> BasicDesktopEnvironmentFactory::Create( |
123 base::WeakPtr<ClientSessionControl> client_session_control) { | 83 base::WeakPtr<ClientSessionControl> client_session_control) { |
124 DCHECK(caller_task_runner_->BelongsToCurrentThread()); | 84 DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
125 | 85 |
126 scoped_ptr<BasicDesktopEnvironment> result( | 86 return scoped_ptr<DesktopEnvironment>( |
127 new BasicDesktopEnvironment(caller_task_runner(), | 87 new BasicDesktopEnvironment(caller_task_runner(), |
128 input_task_runner(), | 88 input_task_runner(), |
129 ui_task_runner(), | 89 ui_task_runner(), |
130 &ui_strings_)); | 90 client_session_control, |
131 result->InitNonCurtainedSessionUI(client_session_control); | 91 ui_strings_)); |
132 | |
133 return result.PassAs<DesktopEnvironment>(); | |
134 } | 92 } |
135 | 93 |
136 bool BasicDesktopEnvironmentFactory::SupportsAudioCapture() const { | 94 bool BasicDesktopEnvironmentFactory::SupportsAudioCapture() const { |
137 DCHECK(caller_task_runner_->BelongsToCurrentThread()); | 95 DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
138 | 96 |
139 return AudioCapturer::IsSupported(); | 97 return AudioCapturer::IsSupported(); |
140 } | 98 } |
141 | 99 |
142 } // namespace remoting | 100 } // namespace remoting |
OLD | NEW |