Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Unified Diff: remoting/host/desktop_session_proxy.cc

Issue 12096071: Adding a unit test to verify the IPC channel between the network and desktop processes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix posix #2 Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/host/desktop_session_proxy.h ('k') | remoting/host/ipc_desktop_environment.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/desktop_session_proxy.cc
diff --git a/remoting/host/desktop_session_proxy.cc b/remoting/host/desktop_session_proxy.cc
index c557853f69a0519d8c9b3d60c341703530f0964f..55f7fc597df2d4f4ff9ab5b4185dd584fbf81fb3 100644
--- a/remoting/host/desktop_session_proxy.cc
+++ b/remoting/host/desktop_session_proxy.cc
@@ -7,6 +7,7 @@
#include "base/compiler_specific.h"
#include "base/logging.h"
#include "base/platform_file.h"
+#include "base/process_util.h"
#include "base/single_thread_task_runner.h"
#include "ipc/ipc_channel_proxy.h"
#include "ipc/ipc_message_macros.h"
@@ -29,12 +30,15 @@ namespace remoting {
DesktopSessionProxy::DesktopSessionProxy(
scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
+ scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
const std::string& client_jid,
const base::Closure& disconnect_callback)
: caller_task_runner_(caller_task_runner),
+ io_task_runner_(io_task_runner),
audio_capturer_(NULL),
client_jid_(client_jid),
disconnect_callback_(disconnect_callback),
+ desktop_process_(base::kNullProcessHandle),
pending_capture_frame_requests_(0),
video_capturer_(NULL) {
DCHECK(caller_task_runner_->BelongsToCurrentThread());
@@ -106,18 +110,19 @@ void DesktopSessionProxy::OnChannelError() {
}
bool DesktopSessionProxy::AttachToDesktop(
- IPC::PlatformFileForTransit desktop_process,
+ base::ProcessHandle desktop_process,
IPC::PlatformFileForTransit desktop_pipe) {
DCHECK(caller_task_runner_->BelongsToCurrentThread());
DCHECK(!client_jid_.empty());
DCHECK(!desktop_channel_);
+ DCHECK_EQ(desktop_process_, base::kNullProcessHandle);
DCHECK(!disconnect_callback_.is_null());
+ desktop_process_ = desktop_process;
+
#if defined(OS_WIN)
// On Windows: |desktop_process| is a valid handle, but |desktop_pipe| needs
// to be duplicated from the desktop process.
- desktop_process_.Set(desktop_process);
-
base::win::ScopedHandle pipe;
if (!DuplicateHandle(desktop_process_, desktop_pipe, GetCurrentProcess(),
pipe.Receive(), 0, FALSE, DUPLICATE_SAME_ACCESS)) {
@@ -126,29 +131,24 @@ bool DesktopSessionProxy::AttachToDesktop(
return false;
}
- // Connect to the desktop process.
- desktop_channel_.reset(new IPC::ChannelProxy(IPC::ChannelHandle(pipe),
- IPC::Channel::MODE_CLIENT,
- this,
- caller_task_runner_));
+ IPC::ChannelHandle desktop_channel_handle(pipe);
+
#elif defined(OS_POSIX)
- // On posix: both |desktop_process| and |desktop_pipe| are valid file
- // descriptors.
- DCHECK(desktop_process.auto_close);
+ // On posix: |desktop_pipe| is a valid file descriptor.
DCHECK(desktop_pipe.auto_close);
- base::ClosePlatformFile(desktop_process.fd);
+ IPC::ChannelHandle desktop_channel_handle("", desktop_pipe);
- // Connect to the desktop process.
- desktop_channel_.reset(new IPC::ChannelProxy(
- IPC::ChannelHandle("", desktop_pipe),
- IPC::Channel::MODE_CLIENT,
- this,
- caller_task_runner_));
#else
#error Unsupported platform.
#endif
+ // Connect to the desktop process.
+ desktop_channel_.reset(new IPC::ChannelProxy(desktop_channel_handle,
+ IPC::Channel::MODE_CLIENT,
+ this,
+ io_task_runner_));
+
// Pass ID of the client (which is authenticated at this point) to the desktop
// session agent and start the agent.
SendToDesktop(new ChromotingNetworkDesktopMsg_StartSessionAgent(client_jid_));
@@ -160,9 +160,10 @@ void DesktopSessionProxy::DetachFromDesktop() {
desktop_channel_.reset();
-#if defined(OS_WIN)
- desktop_process_.Close();
-#endif // defined(OS_WIN)
+ if (desktop_process_ != base::kNullProcessHandle) {
+ base::CloseProcessHandle(desktop_process_);
+ desktop_process_ = base::kNullProcessHandle;
+ }
shared_buffers_.clear();
@@ -194,12 +195,14 @@ void DesktopSessionProxy::InvalidateRegion(const SkRegion& invalid_region) {
return;
}
- std::vector<SkIRect> invalid_rects;
- for (SkRegion::Iterator i(invalid_region); !i.done(); i.next())
- invalid_rects.push_back(i.rect());
+ if (desktop_channel_) {
+ std::vector<SkIRect> invalid_rects;
+ for (SkRegion::Iterator i(invalid_region); !i.done(); i.next())
+ invalid_rects.push_back(i.rect());
- SendToDesktop(
- new ChromotingNetworkDesktopMsg_InvalidateRegion(invalid_rects));
+ SendToDesktop(
+ new ChromotingNetworkDesktopMsg_InvalidateRegion(invalid_rects));
+ }
}
void DesktopSessionProxy::CaptureFrame() {
@@ -209,8 +212,12 @@ void DesktopSessionProxy::CaptureFrame() {
return;
}
- ++pending_capture_frame_requests_;
- SendToDesktop(new ChromotingNetworkDesktopMsg_CaptureFrame());
+ if (desktop_channel_) {
+ ++pending_capture_frame_requests_;
+ SendToDesktop(new ChromotingNetworkDesktopMsg_CaptureFrame());
+ } else {
+ PostCaptureCompleted(scoped_refptr<media::ScreenCaptureData>());
+ }
}
void DesktopSessionProxy::StartVideoCapturer(
@@ -282,6 +289,10 @@ void DesktopSessionProxy::StartEventExecutor(
}
DesktopSessionProxy::~DesktopSessionProxy() {
+ if (desktop_process_ != base::kNullProcessHandle) {
+ base::CloseProcessHandle(desktop_process_);
+ desktop_process_ = base::kNullProcessHandle;
+ }
}
scoped_refptr<media::SharedBuffer> DesktopSessionProxy::GetSharedBuffer(
« no previous file with comments | « remoting/host/desktop_session_proxy.h ('k') | remoting/host/ipc_desktop_environment.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698