ipc_channel_factory.cc 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ipc/ipc_channel_factory.h"
  5. #include "base/memory/ptr_util.h"
  6. #include "base/threading/thread_task_runner_handle.h"
  7. #include "build/build_config.h"
  8. #include "ipc/ipc_channel_mojo.h"
  9. #include "mojo/public/cpp/bindings/lib/message_quota_checker.h"
  10. namespace IPC {
  11. namespace {
  12. class PlatformChannelFactory : public ChannelFactory {
  13. public:
  14. PlatformChannelFactory(
  15. ChannelHandle handle,
  16. Channel::Mode mode,
  17. const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner)
  18. : handle_(handle),
  19. mode_(mode),
  20. ipc_task_runner_(ipc_task_runner),
  21. quota_checker_(mojo::internal::MessageQuotaChecker::MaybeCreate()) {}
  22. PlatformChannelFactory(const PlatformChannelFactory&) = delete;
  23. PlatformChannelFactory& operator=(const PlatformChannelFactory&) = delete;
  24. std::unique_ptr<Channel> BuildChannel(Listener* listener) override {
  25. #if BUILDFLAG(IS_NACL)
  26. return Channel::Create(handle_, mode_, listener);
  27. #else
  28. DCHECK(handle_.is_mojo_channel_handle());
  29. return ChannelMojo::Create(
  30. mojo::ScopedMessagePipeHandle(handle_.mojo_handle), mode_, listener,
  31. ipc_task_runner_, base::ThreadTaskRunnerHandle::Get(), quota_checker_);
  32. #endif
  33. }
  34. scoped_refptr<base::SingleThreadTaskRunner> GetIPCTaskRunner() override {
  35. return ipc_task_runner_;
  36. }
  37. scoped_refptr<mojo::internal::MessageQuotaChecker> GetQuotaChecker()
  38. override {
  39. return quota_checker_;
  40. }
  41. private:
  42. ChannelHandle handle_;
  43. Channel::Mode mode_;
  44. scoped_refptr<base::SingleThreadTaskRunner> ipc_task_runner_;
  45. scoped_refptr<mojo::internal::MessageQuotaChecker> quota_checker_;
  46. };
  47. } // namespace
  48. // static
  49. std::unique_ptr<ChannelFactory> ChannelFactory::Create(
  50. const ChannelHandle& handle,
  51. Channel::Mode mode,
  52. const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) {
  53. return std::make_unique<PlatformChannelFactory>(handle, mode,
  54. ipc_task_runner);
  55. }
  56. } // namespace IPC