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/desktop_session_proxy.h" | 5 #include "remoting/host/desktop_session_proxy.h" |
6 | 6 |
7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/process/process_handle.h" | 9 #include "base/process/process_handle.h" |
10 #include "base/memory/shared_memory.h" | 10 #include "base/memory/shared_memory.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 : id_(id), | 48 : id_(id), |
49 #if defined(OS_WIN) | 49 #if defined(OS_WIN) |
50 shared_memory_(handle, kReadOnly, process), | 50 shared_memory_(handle, kReadOnly, process), |
51 #else // !defined(OS_WIN) | 51 #else // !defined(OS_WIN) |
52 shared_memory_(handle, kReadOnly), | 52 shared_memory_(handle, kReadOnly), |
53 #endif // !defined(OS_WIN) | 53 #endif // !defined(OS_WIN) |
54 size_(size) { | 54 size_(size) { |
55 if (!shared_memory_.Map(size)) { | 55 if (!shared_memory_.Map(size)) { |
56 LOG(ERROR) << "Failed to map a shared buffer: id=" << id | 56 LOG(ERROR) << "Failed to map a shared buffer: id=" << id |
57 #if defined(OS_WIN) | 57 #if defined(OS_WIN) |
58 << ", handle=" << handle | 58 << ", handle=" << handle.GetHandle() |
59 #else | 59 #else |
60 << ", handle.fd=" | 60 << ", handle.fd=" |
61 << base::SharedMemory::GetFdFromSharedMemoryHandle(handle) | 61 << base::SharedMemory::GetFdFromSharedMemoryHandle(handle) |
62 #endif | 62 #endif |
63 << ", size=" << size; | 63 << ", size=" << size; |
64 } | 64 } |
65 } | 65 } |
66 | 66 |
67 int id() { return id_; } | 67 int id() { return id_; } |
68 size_t size() { return size_; } | 68 size_t size() { return size_; } |
69 void* memory() { return shared_memory_.memory(); } | 69 void* memory() { return shared_memory_.memory(); } |
70 webrtc::SharedMemory::Handle handle() { | 70 webrtc::SharedMemory::Handle handle() { |
71 #if defined(OS_WIN) | 71 #if defined(OS_WIN) |
72 return shared_memory_.handle(); | 72 return shared_memory_.handle().GetHandle(); |
73 #else | 73 #else |
74 return base::SharedMemory::GetFdFromSharedMemoryHandle( | 74 return base::SharedMemory::GetFdFromSharedMemoryHandle( |
75 shared_memory_.handle()); | 75 shared_memory_.handle()); |
76 #endif | 76 #endif |
77 } | 77 } |
78 | 78 |
79 private: | 79 private: |
80 virtual ~IpcSharedBufferCore() {} | 80 virtual ~IpcSharedBufferCore() {} |
81 friend class base::RefCountedThreadSafe<IpcSharedBufferCore>; | 81 friend class base::RefCountedThreadSafe<IpcSharedBufferCore>; |
82 | 82 |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 FROM_HERE, base::Bind(&IpcAudioCapturer::OnAudioPacket, audio_capturer_, | 477 FROM_HERE, base::Bind(&IpcAudioCapturer::OnAudioPacket, audio_capturer_, |
478 base::Passed(&packet))); | 478 base::Passed(&packet))); |
479 } | 479 } |
480 | 480 |
481 void DesktopSessionProxy::OnCreateSharedBuffer( | 481 void DesktopSessionProxy::OnCreateSharedBuffer( |
482 int id, | 482 int id, |
483 IPC::PlatformFileForTransit handle, | 483 IPC::PlatformFileForTransit handle, |
484 uint32 size) { | 484 uint32 size) { |
485 DCHECK(caller_task_runner_->BelongsToCurrentThread()); | 485 DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
486 | 486 |
| 487 #if defined(OS_WIN) |
| 488 base::SharedMemoryHandle shm_handle = |
| 489 base::SharedMemoryHandle(handle, base::GetCurrentProcId()); |
| 490 #else |
487 base::SharedMemoryHandle shm_handle = base::SharedMemoryHandle(handle); | 491 base::SharedMemoryHandle shm_handle = base::SharedMemoryHandle(handle); |
| 492 #endif |
488 scoped_refptr<IpcSharedBufferCore> shared_buffer = | 493 scoped_refptr<IpcSharedBufferCore> shared_buffer = |
489 new IpcSharedBufferCore(id, shm_handle, desktop_process_.Handle(), size); | 494 new IpcSharedBufferCore(id, shm_handle, desktop_process_.Handle(), size); |
490 | 495 |
491 if (shared_buffer->memory() != nullptr && | 496 if (shared_buffer->memory() != nullptr && |
492 !shared_buffers_.insert(std::make_pair(id, shared_buffer)).second) { | 497 !shared_buffers_.insert(std::make_pair(id, shared_buffer)).second) { |
493 LOG(ERROR) << "Duplicate shared buffer id " << id << " encountered"; | 498 LOG(ERROR) << "Duplicate shared buffer id " << id << " encountered"; |
494 } | 499 } |
495 } | 500 } |
496 | 501 |
497 void DesktopSessionProxy::OnReleaseSharedBuffer(int id) { | 502 void DesktopSessionProxy::OnReleaseSharedBuffer(int id) { |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
578 } | 583 } |
579 | 584 |
580 // static | 585 // static |
581 void DesktopSessionProxyTraits::Destruct( | 586 void DesktopSessionProxyTraits::Destruct( |
582 const DesktopSessionProxy* desktop_session_proxy) { | 587 const DesktopSessionProxy* desktop_session_proxy) { |
583 desktop_session_proxy->caller_task_runner_->DeleteSoon(FROM_HERE, | 588 desktop_session_proxy->caller_task_runner_->DeleteSoon(FROM_HERE, |
584 desktop_session_proxy); | 589 desktop_session_proxy); |
585 } | 590 } |
586 | 591 |
587 } // namespace remoting | 592 } // namespace remoting |
OLD | NEW |