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

Unified Diff: mojo/edk/system/broker_host.cc

Issue 2264543003: Adds sync brokering to Windows EDK (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge test interface Created 4 years, 3 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
Index: mojo/edk/system/broker_host.cc
diff --git a/mojo/edk/system/broker_host_posix.cc b/mojo/edk/system/broker_host.cc
similarity index 73%
rename from mojo/edk/system/broker_host_posix.cc
rename to mojo/edk/system/broker_host.cc
index ed8e213c1c0d04a8a3102301861e541473a27276..4e36593128cc56413279d3428512c1e3817316b2 100644
--- a/mojo/edk/system/broker_host_posix.cc
+++ b/mojo/edk/system/broker_host.cc
@@ -4,17 +4,12 @@
#include "mojo/edk/system/broker_host.h"
-#include <fcntl.h>
-#include <unistd.h>
-
#include <utility>
#include "base/logging.h"
#include "base/memory/ref_counted.h"
#include "base/message_loop/message_loop.h"
#include "base/threading/thread_task_runner_handle.h"
-#include "mojo/edk/embedder/embedder_internal.h"
-#include "mojo/edk/embedder/platform_channel_utils_posix.h"
#include "mojo/edk/embedder/platform_handle_vector.h"
#include "mojo/edk/embedder/platform_shared_buffer.h"
#include "mojo/edk/system/broker_messages.h"
@@ -23,18 +18,25 @@ namespace mojo {
namespace edk {
namespace {
+
// To prevent abuse, limit the maximum size of shared memory buffers.
-// TODO(amistry): Re-consider this limit, or do something smarter.
+// TODO(rockot): Re-consider this limit, or do something smarter.
const size_t kMaxSharedBufferSize = 16 * 1024 * 1024;
-}
-BrokerHost::BrokerHost(ScopedPlatformHandle platform_handle) {
+} // namespace
+
+BrokerHost::BrokerHost(base::ProcessHandle client_process,
+ ScopedPlatformHandle platform_handle)
+#if defined(OS_WIN)
+ : client_process_(client_process)
+#endif
+{
CHECK(platform_handle.is_valid());
base::MessageLoop::current()->AddDestructionObserver(this);
- channel_ = Channel::Create(this, std::move(platform_handle),
- base::ThreadTaskRunnerHandle::Get());
+ channel_ = Channel::Create(
+ this, std::move(platform_handle), base::ThreadTaskRunnerHandle::Get());
channel_->Start();
}
@@ -46,6 +48,18 @@ BrokerHost::~BrokerHost() {
channel_->ShutDown();
}
+void BrokerHost::PrepareHandlesForClient(PlatformHandleVector* handles) {
+#if defined(OS_WIN)
+ if (!Channel::Message::RewriteHandles(
+ base::GetCurrentProcessHandle(), client_process_, handles)) {
+ // NOTE: We only log an error here. We do not signal a logical error or
+ // prevent any message from being sent. The client should handle unexpected
+ // invalid handles appropriately.
+ DLOG(ERROR) << "Failed to rewrite one or more handles to broker client.";
+ }
+#endif
+}
+
void BrokerHost::SendChannel(ScopedPlatformHandle handle) {
CHECK(handle.is_valid());
CHECK(channel_);
@@ -55,8 +69,8 @@ void BrokerHost::SendChannel(ScopedPlatformHandle handle) {
ScopedPlatformHandleVectorPtr handles;
handles.reset(new PlatformHandleVector(1));
handles->at(0) = handle.release();
+ PrepareHandlesForClient(handles.get());
message->SetHandles(std::move(handles));
-
channel_->Write(std::move(message));
}
@@ -80,6 +94,7 @@ void BrokerHost::OnBufferRequest(size_t num_bytes) {
handles.reset(new PlatformHandleVector(2));
handles->at(0) = buffer->PassPlatformHandle().release();
handles->at(1) = read_only_buffer->PassPlatformHandle().release();
+ PrepareHandlesForClient(handles.get());
message->SetHandles(std::move(handles));
}
@@ -101,29 +116,18 @@ void BrokerHost::OnChannelMessage(const void* payload,
const BufferRequestData* request =
reinterpret_cast<const BufferRequestData*>(header + 1);
OnBufferRequest(request->size);
- return;
}
break;
default:
+ LOG(ERROR) << "Unexpected broker message type: " << header->type;
break;
}
-
- LOG(ERROR) << "Unexpected broker message type: " << header->type;
}
-void BrokerHost::OnChannelError() {
- if (channel_) {
- channel_->ShutDown();
- channel_ = nullptr;
- }
+void BrokerHost::OnChannelError() { delete this; }
- delete this;
-}
-
-void BrokerHost::WillDestroyCurrentMessageLoop() {
- delete this;
-}
+void BrokerHost::WillDestroyCurrentMessageLoop() { delete this; }
} // namespace edk
} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698