diff --git a/camera/camera3_test/camera3_module_test.cc b/camera/camera3_test/camera3_module_test.cc
index bd3441c..31da918 100644
--- a/camera/camera3_test/camera3_module_test.cc
+++ b/camera/camera3_test/camera3_module_test.cc
@@ -26,7 +26,7 @@
 #include "camera3_test/camera3_perf_log.h"
 #include "camera3_test/camera3_test_data_forwarder.h"
 #include "common/utils/camera_hal_enumerator.h"
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 #include "cros-camera/cros_camera_hal.h"
 
 namespace camera3_test {
@@ -294,7 +294,7 @@
 // On successfully Initialized, |cam_module_| will pointed to valid
 // camera_module_t.
 static void InitCameraModule(const base::FilePath& camera_hal_path,
-                             cros::CameraMojoChannelManager* mojo_manager,
+                             cros::CameraMojoChannelManagerToken* token,
                              void** cam_hal_handle,
                              camera_module_t** cam_module,
                              cros::cros_camera_hal_t** cros_camera_hal) {
@@ -307,7 +307,7 @@
   // TODO(b/151270948): We should report error here if it fails to find the
   // symbol once all camera HALs have implemented the interface.
   if (*cros_camera_hal != nullptr) {
-    (*cros_camera_hal)->set_up(mojo_manager);
+    (*cros_camera_hal)->set_up(token);
   }
 
   camera_module_t* module = static_cast<camera_module_t*>(
@@ -329,19 +329,18 @@
 
 static void InitCameraModuleByHalPath(
     const base::FilePath& camera_hal_path,
-    cros::CameraMojoChannelManager* mojo_manager,
+    cros::CameraMojoChannelManagerToken* token,
     void** cam_hal_handle,
     cros::cros_camera_hal_t** cros_camera_hal) {
-  InitCameraModule(camera_hal_path, mojo_manager, cam_hal_handle, &g_cam_module,
+  InitCameraModule(camera_hal_path, token, cam_hal_handle, &g_cam_module,
                    cros_camera_hal);
 }
 
-static void InitCameraModuleByFacing(
-    int facing,
-    cros::CameraMojoChannelManager* mojo_manager,
-    void** cam_hal_handle,
-    cros::cros_camera_hal_t** cros_camera_hal,
-    base::FilePath* camera_hal_path) {
+static void InitCameraModuleByFacing(int facing,
+                                     cros::CameraMojoChannelManagerToken* token,
+                                     void** cam_hal_handle,
+                                     cros::cros_camera_hal_t** cros_camera_hal,
+                                     base::FilePath* camera_hal_path) {
   // Do cleanup when exit from ASSERT_XX
   struct CleanupModule {
     void operator()(void** cam_hal_handle) {
@@ -355,7 +354,7 @@
     }
   };
   for (const auto& hal_path : cros::GetCameraHalPaths()) {
-    InitCameraModule(hal_path, mojo_manager, cam_hal_handle, &g_cam_module,
+    InitCameraModule(hal_path, token, cam_hal_handle, &g_cam_module,
                      cros_camera_hal);
     std::unique_ptr<void*, CleanupModule> cleanup_ptr(cam_hal_handle);
     if (g_cam_module != NULL) {
@@ -1330,7 +1329,7 @@
 
 bool InitializeTest(int* argc,
                     char*** argv,
-                    cros::CameraMojoChannelManager* mojo_manager,
+                    cros::CameraMojoChannelManagerToken* token,
                     void** cam_hal_handle,
                     cros::cros_camera_hal_t** cros_camera_hal) {
   // Set up logging so we can enable VLOGs with -v / --vmodule.
@@ -1375,11 +1374,11 @@
   // Open camera HAL and get module
   if (facing != -ENOENT) {
     camera3_test::GetModuleThread().Start();
-    camera3_test::InitCameraModuleByFacing(facing, mojo_manager, cam_hal_handle,
+    camera3_test::InitCameraModuleByFacing(facing, token, cam_hal_handle,
                                            cros_camera_hal, &camera_hal_path);
   } else if (!camera_hal_path.empty()) {
     camera3_test::GetModuleThread().Start();
-    camera3_test::InitCameraModuleByHalPath(camera_hal_path, mojo_manager,
+    camera3_test::InitCameraModuleByHalPath(camera_hal_path, token,
                                             cam_hal_handle, cros_camera_hal);
   } else {
     if (camera3_test::CameraHalClient::GetInstance()->Start(
@@ -1418,10 +1417,10 @@
 
 extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) {
   void* cam_hal_handle = NULL;
-  std::unique_ptr<cros::CameraMojoChannelManager> mojo_manager =
-      cros::CameraMojoChannelManager::CreateInstance();
+  std::unique_ptr<cros::CameraMojoChannelManagerToken> mojo_manager_token(
+      cros::CameraMojoChannelManagerToken::CreateInstance());
   cros::cros_camera_hal_t* cros_camera_hal;
-  if (!InitializeTest(argc, argv, mojo_manager.get(), &cam_hal_handle,
+  if (!InitializeTest(argc, argv, mojo_manager_token.get(), &cam_hal_handle,
                       &cros_camera_hal)) {
     exit(EXIT_FAILURE);
   }
@@ -1450,9 +1449,9 @@
   message_loop.SetAsCurrent();
 
   cros::cros_camera_hal_t* cros_camera_hal = nullptr;
-  std::unique_ptr<cros::CameraMojoChannelManager> mojo_manager =
-      cros::CameraMojoChannelManager::CreateInstance();
-  if (InitializeTest(&argc, &argv, mojo_manager.get(), &cam_hal_handle,
+  std::unique_ptr<cros::CameraMojoChannelManagerToken> mojo_manager_token(
+      cros::CameraMojoChannelManagerToken::CreateInstance());
+  if (InitializeTest(&argc, &argv, mojo_manager_token.get(), &cam_hal_handle,
                      &cros_camera_hal)) {
     result = RUN_ALL_TESTS();
   }
@@ -1464,7 +1463,7 @@
   if (cros_camera_hal != nullptr) {
     cros_camera_hal->tear_down();
   }
-  mojo_manager.reset();
+  mojo_manager_token.reset();
 
   // Close Camera HAL
   if (cam_hal_handle && dlclose(cam_hal_handle) != 0) {
diff --git a/camera/common/camera_algorithm_bridge_impl.cc b/camera/common/camera_algorithm_bridge_impl.cc
index 8668520..95f215b 100644
--- a/camera/common/camera_algorithm_bridge_impl.cc
+++ b/camera/common/camera_algorithm_bridge_impl.cc
@@ -37,9 +37,10 @@
 
 // static
 std::unique_ptr<CameraAlgorithmBridge> CameraAlgorithmBridge::CreateInstance(
-    CameraAlgorithmBackend backend, CameraMojoChannelManager* mojo_manager) {
+    CameraAlgorithmBackend backend, CameraMojoChannelManagerToken* token) {
   VLOGF_ENTER();
-  return std::make_unique<CameraAlgorithmBridgeImpl>(backend, mojo_manager);
+  return std::make_unique<CameraAlgorithmBridgeImpl>(
+      backend, CameraMojoChannelManager::FromToken(token));
 }
 
 CameraAlgorithmBridgeImpl::CameraAlgorithmBridgeImpl(
diff --git a/camera/common/camera_mojo_channel_manager_impl.cc b/camera/common/camera_mojo_channel_manager_impl.cc
index 42c9839..04f0fc8 100644
--- a/camera/common/camera_mojo_channel_manager_impl.cc
+++ b/camera/common/camera_mojo_channel_manager_impl.cc
@@ -106,10 +106,8 @@
 }
 
 // static
-std::unique_ptr<CameraMojoChannelManager>
-CameraMojoChannelManager::CreateInstance() {
-  return base::WrapUnique<CameraMojoChannelManager>(
-      new CameraMojoChannelManagerImpl());
+CameraMojoChannelManagerToken* CameraMojoChannelManagerToken::CreateInstance() {
+  return new CameraMojoChannelManagerImpl();
 }
 
 // static
diff --git a/camera/common/jpeg/jpeg_decode_accelerator_impl.cc b/camera/common/jpeg/jpeg_decode_accelerator_impl.cc
index c636f74..727ee6e 100644
--- a/camera/common/jpeg/jpeg_decode_accelerator_impl.cc
+++ b/camera/common/jpeg/jpeg_decode_accelerator_impl.cc
@@ -69,9 +69,9 @@
 
 // static
 std::unique_ptr<JpegDecodeAccelerator> JpegDecodeAccelerator::CreateInstance(
-    CameraMojoChannelManager* mojo_manager) {
-  return base::WrapUnique<JpegDecodeAccelerator>(
-      new JpegDecodeAcceleratorImpl(mojo_manager));
+    CameraMojoChannelManagerToken* token) {
+  return base::WrapUnique<JpegDecodeAccelerator>(new JpegDecodeAcceleratorImpl(
+      CameraMojoChannelManager::FromToken(token)));
 }
 
 JpegDecodeAcceleratorImpl::JpegDecodeAcceleratorImpl(
diff --git a/camera/common/jpeg/jpeg_decode_accelerator_test.cc b/camera/common/jpeg/jpeg_decode_accelerator_test.cc
index ab768af..f77851c 100644
--- a/camera/common/jpeg/jpeg_decode_accelerator_test.cc
+++ b/camera/common/jpeg/jpeg_decode_accelerator_test.cc
@@ -106,21 +106,21 @@
 class JpegDecodeTestEnvironment : public ::testing::Environment {
  public:
   JpegDecodeTestEnvironment(const char* jpeg_filename1,
-                            const char* jpeg_filename2) {
+                            const char* jpeg_filename2)
+      : mojo_manager_token_(CameraMojoChannelManagerToken::CreateInstance()) {
     jpeg_filename1_ = jpeg_filename1 ? jpeg_filename1 : kDefaultJpegFilename1;
     jpeg_filename2_ = jpeg_filename2 ? jpeg_filename2 : kDefaultJpegFilename2;
-    mojo_manager_ = CameraMojoChannelManager::CreateInstance();
   }
 
   const char* jpeg_filename1_;
   const char* jpeg_filename2_;
-  std::unique_ptr<CameraMojoChannelManager> mojo_manager_;
+  std::unique_ptr<CameraMojoChannelManagerToken> mojo_manager_token_;
 };
 
 void JpegDecodeAcceleratorTest::SetUp() {
   for (size_t i = 0; i < kMaxDecoderNumber; i++) {
-    jpeg_decoder_[i] =
-        std::make_unique<JpegDecodeAcceleratorImpl>(g_env->mojo_manager_.get());
+    jpeg_decoder_[i] = std::make_unique<JpegDecodeAcceleratorImpl>(
+        g_env->mojo_manager_token_.get());
   }
 }
 
@@ -188,8 +188,8 @@
       output_size > frame->sw_out_shm_mapping.mapped_size()) {
     frame->sw_out_shm_region =
         base::WritableSharedMemoryRegion::Create(output_size);
-    frame->sw_out_shm_mapping = frame->ww_out_shm_region.Map();
-    LOG_ASSERT(frame->ww_out_shm_mapping.IsValid());
+    frame->sw_out_shm_mapping = frame->sw_out_shm_region.Map();
+    LOG_ASSERT(frame->sw_out_shm_mapping.IsValid());
   }
   memset(frame->sw_out_shm_mapping.memory(), 0, output_size);
 }
@@ -230,8 +230,8 @@
   memset(frame->hw_out_shm_mapping.memory(), 0,
          frame->hw_out_shm_mapping.mapped_size());
 
-  input_fd = in_platform_shm.GetPlatformHandle().fd;
-  output_fd = hw_out_platform_shm.GetPlatformHandle().fd;
+  input_fd = frame->in_shm_region.GetPlatformHandle().fd;
+  output_fd = frame->hw_out_shm_region.GetPlatformHandle().fd;
   VLOG(1) << "input fd " << input_fd << " output fd " << output_fd;
 
   // Pretend the shared memory as DMA buffer.
diff --git a/camera/common/jpeg/jpeg_encode_accelerator_impl.cc b/camera/common/jpeg/jpeg_encode_accelerator_impl.cc
index 1cb3c01..780378a 100644
--- a/camera/common/jpeg/jpeg_encode_accelerator_impl.cc
+++ b/camera/common/jpeg/jpeg_encode_accelerator_impl.cc
@@ -43,9 +43,9 @@
 
 // static
 std::unique_ptr<JpegEncodeAccelerator> JpegEncodeAccelerator::CreateInstance(
-    CameraMojoChannelManager* mojo_manager) {
-  return base::WrapUnique<JpegEncodeAccelerator>(
-      new JpegEncodeAcceleratorImpl(mojo_manager));
+    CameraMojoChannelManagerToken* token) {
+  return base::WrapUnique<JpegEncodeAccelerator>(new JpegEncodeAcceleratorImpl(
+      CameraMojoChannelManager::FromToken(token)));
 }
 
 JpegEncodeAcceleratorImpl::JpegEncodeAcceleratorImpl(
diff --git a/camera/common/jpeg/jpeg_encode_accelerator_test.cc b/camera/common/jpeg/jpeg_encode_accelerator_test.cc
index 7b233c3..8c3ddcb 100644
--- a/camera/common/jpeg/jpeg_encode_accelerator_test.cc
+++ b/camera/common/jpeg/jpeg_encode_accelerator_test.cc
@@ -19,6 +19,7 @@
 #include <libyuv.h>
 
 #include "cros-camera/camera_buffer_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 #include "cros-camera/exif_utils.h"
 #include "cros-camera/future.h"
 #include "cros-camera/jpeg_compressor.h"
@@ -119,22 +120,22 @@
  public:
   JpegEncodeTestEnvironment(const char* yuv_filename1,
                             const char* yuv_filename2,
-                            bool save_to_file) {
+                            bool save_to_file)
+      : mojo_manager_token_(CameraMojoChannelManagerToken::CreateInstance()) {
     yuv_filename1_ = yuv_filename1 ? yuv_filename1 : kDefaultJpegFilename1;
     yuv_filename2_ = yuv_filename2 ? yuv_filename2 : kDefaultJpegFilename2;
     save_to_file_ = save_to_file;
-    mojo_manager_ = CameraMojoChannelManager::CreateInstance();
   }
 
   const char* yuv_filename1_;
   const char* yuv_filename2_;
   bool save_to_file_;
-  std::unique_ptr<CameraMojoChannelManager> mojo_manager_;
+  std::unique_ptr<CameraMojoChannelManagerToken> mojo_manager_token_;
 };
 
 void JpegEncodeAcceleratorTest::SetUp() {
   jpeg_encoder_ =
-      JpegEncodeAccelerator::CreateInstance(g_env->mojo_manager_.get());
+      JpegEncodeAccelerator::CreateInstance(g_env->mojo_manager_token_.get());
   buffer_manager_ = CameraBufferManager::GetInstance();
 }
 
@@ -251,7 +252,7 @@
 
 bool JpegEncodeAcceleratorTest::GetSoftwareEncodeResult(Frame* frame) {
   std::unique_ptr<JpegCompressor> compressor(
-      JpegCompressor::GetInstance(g_env->mojo_manager_.get()));
+      JpegCompressor::GetInstance(g_env->mojo_manager_token_.get()));
   if (!compressor->CompressImage(frame->data_str.data(), frame->width,
                                  frame->height, kJpegDefaultQuality, nullptr, 0,
                                  frame->sw_out_shm_mapping.mapped_size(),
diff --git a/camera/common/jpeg_compressor_impl.cc b/camera/common/jpeg_compressor_impl.cc
index 96c70af..1fb5aa9 100644
--- a/camera/common/jpeg_compressor_impl.cc
+++ b/camera/common/jpeg_compressor_impl.cc
@@ -18,6 +18,7 @@
 #include <base/memory/writable_shared_memory_region.h>
 #include <base/timer/elapsed_timer.h>
 #include "cros-camera/camera_buffer_manager.h"
+#include "cros-camera/camera_mojo_channel_manager.h"
 #include "cros-camera/common.h"
 #include "cros-camera/jpeg_encode_accelerator.h"
 
@@ -42,11 +43,11 @@
 
 // static
 std::unique_ptr<JpegCompressor> JpegCompressor::GetInstance(
-    CameraMojoChannelManager* mojo_manager) {
-  return std::make_unique<JpegCompressorImpl>(mojo_manager);
+    CameraMojoChannelManagerToken* token) {
+  return std::make_unique<JpegCompressorImpl>(token);
 }
 
-JpegCompressorImpl::JpegCompressorImpl(CameraMojoChannelManager* mojo_manager)
+JpegCompressorImpl::JpegCompressorImpl(CameraMojoChannelManagerToken* token)
     : camera_metrics_(CameraMetrics::New()),
       hw_encoder_(nullptr),
       hw_encoder_started_(false),
@@ -54,7 +55,7 @@
       out_buffer_size_(0),
       out_data_size_(0),
       is_encode_success_(false),
-      mojo_manager_(mojo_manager) {}
+      mojo_manager_token_(token) {}
 
 JpegCompressorImpl::~JpegCompressorImpl() {}
 
@@ -349,7 +350,8 @@
                                         uint32_t* out_data_size) {
   base::ElapsedTimer timer;
   if (!hw_encoder_) {
-    hw_encoder_ = cros::JpegEncodeAccelerator::CreateInstance(mojo_manager_);
+    hw_encoder_ =
+        cros::JpegEncodeAccelerator::CreateInstance(mojo_manager_token_);
     hw_encoder_started_ = hw_encoder_->Start();
   }
 
@@ -523,7 +525,8 @@
   }
 
   if (!hw_encoder_) {
-    hw_encoder_ = cros::JpegEncodeAccelerator::CreateInstance(mojo_manager_);
+    hw_encoder_ =
+        cros::JpegEncodeAccelerator::CreateInstance(mojo_manager_token_);
     hw_encoder_started_ = hw_encoder_->Start();
   }
 
diff --git a/camera/common/jpeg_compressor_impl.h b/camera/common/jpeg_compressor_impl.h
index a9e3fb0..c16da85 100644
--- a/camera/common/jpeg_compressor_impl.h
+++ b/camera/common/jpeg_compressor_impl.h
@@ -31,7 +31,7 @@
 // Implementation of JpegCompressor. This class is not thread-safe.
 class JpegCompressorImpl : public JpegCompressor {
  public:
-  explicit JpegCompressorImpl(CameraMojoChannelManager* mojo_manager);
+  explicit JpegCompressorImpl(CameraMojoChannelManagerToken* token);
   ~JpegCompressorImpl() override;
 
   // To be deprecated.
@@ -160,8 +160,8 @@
   // buffer is enough to encode or not.
   bool is_encode_success_;
 
-  // Mojo manager which is used for Mojo communication.
-  CameraMojoChannelManager* mojo_manager_;
+  // Mojo manager token which is used for Mojo communication.
+  CameraMojoChannelManagerToken* mojo_manager_token_;
 };
 
 }  // namespace cros
diff --git a/camera/common/libcab_test_main.cc b/camera/common/libcab_test_main.cc
index 7c31a57..674d028 100644
--- a/camera/common/libcab_test_main.cc
+++ b/camera/common/libcab_test_main.cc
@@ -26,12 +26,14 @@
  public:
   const size_t kShmBufferSize = 2048;
 
-  CameraAlgorithmBridgeFixture() : req_id_(0) {
-    mojo_manager_ = cros::CameraMojoChannelManager::CreateInstance();
+  CameraAlgorithmBridgeFixture()
+      : mojo_manager_token_(
+            cros::CameraMojoChannelManagerToken::CreateInstance()),
+        req_id_(0) {
     CameraAlgorithmBridgeFixture::return_callback =
         CameraAlgorithmBridgeFixture::ReturnCallbackForwarder;
     bridge_ = cros::CameraAlgorithmBridge::CreateInstance(
-        cros::CameraAlgorithmBackend::kTest, mojo_manager_.get());
+        cros::CameraAlgorithmBackend::kTest, mojo_manager_token_.get());
     if (!bridge_ || bridge_->Initialize(this) != 0) {
       ADD_FAILURE() << "Failed to initialize camera algorithm bridge";
       return;
@@ -53,8 +55,8 @@
     bridge_->Request(req_id_++, req_header, buffer_handle);
   }
 
-  cros::CameraMojoChannelManager* GetMojoManagerInstance() {
-    return mojo_manager_.get();
+  cros::CameraMojoChannelManagerToken* GetMojoManagerTokenInstance() {
+    return mojo_manager_token_.get();
   }
 
  protected:
@@ -87,7 +89,7 @@
 
   // |mojo_manager_| should only be destroyed after any usage of it. So it
   // should be declared first.
-  std::unique_ptr<cros::CameraMojoChannelManager> mojo_manager_;
+  std::unique_ptr<cros::CameraMojoChannelManagerToken> mojo_manager_token_;
 
   std::unique_ptr<cros::CameraAlgorithmBridge> bridge_;
 
@@ -210,7 +212,7 @@
   ASSERT_NE(0, sem_timedwait(&return_sem_, &timeout));
   // Reconnect the bridge.
   bridge_ = cros::CameraAlgorithmBridge::CreateInstance(
-      cros::CameraAlgorithmBackend::kTest, GetMojoManagerInstance());
+      cros::CameraAlgorithmBackend::kTest, GetMojoManagerTokenInstance());
   ASSERT_NE(nullptr, bridge_);
   ASSERT_EQ(0, bridge_->Initialize(this));
   base::WritableSharedMemoryRegion shm_region =
diff --git a/camera/hal/usb/cached_frame.cc b/camera/hal/usb/cached_frame.cc
index 29c3b19..6e85b56 100644
--- a/camera/hal/usb/cached_frame.cc
+++ b/camera/hal/usb/cached_frame.cc
@@ -83,13 +83,13 @@
       jda_available_(false),
       force_jpeg_hw_encode_(false),
       force_jpeg_hw_decode_(false) {
-  auto* mojo_manager = CameraHal::GetInstance().GetMojoManagerInstance();
+  auto* mojo_manager_token = CameraHal::GetInstance().GetMojoManagerToken();
 
-  jda_ = JpegDecodeAccelerator::CreateInstance(mojo_manager);
+  jda_ = JpegDecodeAccelerator::CreateInstance(mojo_manager_token);
   jda_available_ = jda_->Start();
   LOGF(INFO) << "JDA available: " << jda_available_;
 
-  jpeg_compressor_ = JpegCompressor::GetInstance(mojo_manager);
+  jpeg_compressor_ = JpegCompressor::GetInstance(mojo_manager_token);
 
   // Read force_jpeg_hw_(enc|dec) configs
   std::unique_ptr<CameraConfig> camera_config =
diff --git a/camera/hal/usb/camera_hal.cc b/camera/hal/usb/camera_hal.cc
index df0116b..5357ed4 100644
--- a/camera/hal/usb/camera_hal.cc
+++ b/camera/hal/usb/camera_hal.cc
@@ -128,8 +128,8 @@
   return camera_hal;
 }
 
-CameraMojoChannelManager* CameraHal::GetMojoManagerInstance() {
-  return mojo_manager_;
+CameraMojoChannelManagerToken* CameraHal::GetMojoManagerToken() {
+  return mojo_manager_token_;
 }
 
 int CameraHal::OpenDevice(int id,
@@ -303,12 +303,12 @@
   return 0;
 }
 
-void CameraHal::SetUp(CameraMojoChannelManager* mojo_manager) {
-  mojo_manager_ = mojo_manager;
+void CameraHal::SetUp(CameraMojoChannelManagerToken* token) {
+  mojo_manager_token_ = token;
 }
 
 void CameraHal::TearDown() {
-  mojo_manager_ = nullptr;
+  mojo_manager_token_ = nullptr;
 }
 
 void CameraHal::SetPrivacySwitchCallback(
@@ -584,8 +584,8 @@
   return CameraHal::GetInstance().Init();
 }
 
-static void set_up(CameraMojoChannelManager* mojo_manager) {
-  CameraHal::GetInstance().SetUp(mojo_manager);
+static void set_up(CameraMojoChannelManagerToken* token) {
+  CameraHal::GetInstance().SetUp(token);
 }
 
 static void tear_down() {
diff --git a/camera/hal/usb/camera_hal.h b/camera/hal/usb/camera_hal.h
index 3ccf7ae..87d9d5f 100644
--- a/camera/hal/usb/camera_hal.h
+++ b/camera/hal/usb/camera_hal.h
@@ -17,7 +17,7 @@
 #include <base/threading/thread_checker.h>
 #include <hardware/camera_common.h>
 
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 #include "cros-camera/cros_camera_hal.h"
 #include "cros-camera/future.h"
 #include "cros-camera/udev_watcher.h"
@@ -44,7 +44,7 @@
 
   static CameraHal& GetInstance();
 
-  CameraMojoChannelManager* GetMojoManagerInstance();
+  CameraMojoChannelManagerToken* GetMojoManagerToken();
 
   // Implementations for camera_module_t.
   int OpenDevice(int id, const hw_module_t* module, hw_device_t** hw_device);
@@ -54,7 +54,7 @@
   int Init();
 
   // Implementations for cros_camera_hal_t.
-  void SetUp(CameraMojoChannelManager* mojo_manager);
+  void SetUp(CameraMojoChannelManagerToken* token);
   void TearDown();
   void SetPrivacySwitchCallback(PrivacySwitchStateChangeCallback callback);
 
@@ -121,8 +121,8 @@
   // integer here, and use the smallest free id when the camera is reconnected.
   std::map<std::string, std::set<int>> previous_ids_;
 
-  // Mojo manager which is used for Mojo communication.
-  CameraMojoChannelManager* mojo_manager_;
+  // Mojo manager token which is used for Mojo communication.
+  CameraMojoChannelManagerToken* mojo_manager_token_;
 };
 
 // Callback for camera_device.common.close().
diff --git a/camera/hal_adapter/camera_hal_adapter.cc b/camera/hal_adapter/camera_hal_adapter.cc
index 5168724..b04be15 100644
--- a/camera/hal_adapter/camera_hal_adapter.cc
+++ b/camera/hal_adapter/camera_hal_adapter.cc
@@ -43,7 +43,7 @@
 }  // namespace
 
 CameraHalAdapter::CameraHalAdapter(std::vector<camera_module_t*> camera_modules,
-                                   CameraMojoChannelManager* mojo_manager,
+                                   CameraMojoChannelManagerToken* token,
                                    CameraActivityCallback activity_callback)
     : camera_modules_(camera_modules),
       camera_module_thread_("CameraModuleThread"),
@@ -52,7 +52,7 @@
       callbacks_id_(0),
       vendor_tag_ops_id_(0),
       camera_metrics_(CameraMetrics::New()),
-      mojo_manager_(mojo_manager),
+      mojo_manager_token_(token),
       activity_callback_(activity_callback) {
   VLOGF_ENTER();
 }
@@ -479,7 +479,7 @@
   VLOGF_ENTER();
   DCHECK(camera_module_thread_.task_runner()->BelongsToCurrentThread());
 
-  if (reprocess_effect_manager_.Initialize(mojo_manager_) != 0) {
+  if (reprocess_effect_manager_.Initialize(mojo_manager_token_) != 0) {
     LOGF(ERROR) << "Failed to initialize reprocess effect manager";
     callback.Run(false);
     return;
diff --git a/camera/hal_adapter/camera_hal_adapter.h b/camera/hal_adapter/camera_hal_adapter.h
index c476288..264bc52 100644
--- a/camera/hal_adapter/camera_hal_adapter.h
+++ b/camera/hal_adapter/camera_hal_adapter.h
@@ -23,7 +23,7 @@
 #include "common/utils/common_types.h"
 #include "common/vendor_tag_manager.h"
 #include "cros-camera/camera_metrics.h"
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 #include "cros-camera/future.h"
 #include "hal_adapter/reprocess_effect/reprocess_effect_manager.h"
 #include "mojo/camera3.mojom.h"
@@ -54,7 +54,7 @@
       int32_t, bool, cros::mojom::CameraClientType)>;
 
   CameraHalAdapter(std::vector<camera_module_t*> camera_modules,
-                   CameraMojoChannelManager* mojo_manager,
+                   CameraMojoChannelManagerToken* token,
                    CameraActivityCallback activity_callback);
 
   virtual ~CameraHalAdapter();
@@ -247,8 +247,8 @@
   // Metrics for camera service.
   std::unique_ptr<CameraMetrics> camera_metrics_;
 
-  // Mojo manager which is used for Mojo communication.
-  CameraMojoChannelManager* mojo_manager_;
+  // Mojo manager token which is used for Mojo communication.
+  CameraMojoChannelManagerToken* mojo_manager_token_;
 
   CameraActivityCallback activity_callback_;
 
diff --git a/camera/hal_adapter/camera_hal_server_impl.cc b/camera/hal_adapter/camera_hal_server_impl.cc
index 63f39a2..770d680 100644
--- a/camera/hal_adapter/camera_hal_server_impl.cc
+++ b/camera/hal_adapter/camera_hal_server_impl.cc
@@ -42,7 +42,8 @@
 namespace cros {
 
 CameraHalServerImpl::CameraHalServerImpl()
-    : mojo_manager_(CameraMojoChannelManager::CreateInstance()),
+    : mojo_manager_(CameraMojoChannelManager::FromToken(
+          CameraMojoChannelManagerToken::CreateInstance())),
       ipc_bridge_(new IPCBridge(this, mojo_manager_.get())) {
   VLOGF_ENTER();
 }
diff --git a/camera/hal_adapter/camera_hal_test_adapter.cc b/camera/hal_adapter/camera_hal_test_adapter.cc
index 7554e3e..abf075d 100644
--- a/camera/hal_adapter/camera_hal_test_adapter.cc
+++ b/camera/hal_adapter/camera_hal_test_adapter.cc
@@ -14,12 +14,12 @@
 
 CameraHalTestAdapter::CameraHalTestAdapter(
     std::vector<camera_module_t*> camera_modules,
-    CameraMojoChannelManager* mojo_manager,
+    CameraMojoChannelManagerToken* token,
     CameraActivityCallback activity_callback,
     bool enable_front,
     bool enable_back,
     bool enable_external)
-    : CameraHalAdapter(camera_modules, mojo_manager, activity_callback),
+    : CameraHalAdapter(camera_modules, token, activity_callback),
       enable_front_(enable_front),
       enable_back_(enable_back),
       enable_external_(enable_external) {
diff --git a/camera/hal_adapter/camera_hal_test_adapter.h b/camera/hal_adapter/camera_hal_test_adapter.h
index 35a63c2..75d7327 100644
--- a/camera/hal_adapter/camera_hal_test_adapter.h
+++ b/camera/hal_adapter/camera_hal_test_adapter.h
@@ -21,7 +21,7 @@
 class CameraHalTestAdapter : public CameraHalAdapter {
  public:
   CameraHalTestAdapter(std::vector<camera_module_t*> camera_modules,
-                       CameraMojoChannelManager* mojo_manager,
+                       CameraMojoChannelManagerToken* token,
                        CameraActivityCallback activity_callback,
                        bool enable_front,
                        bool enable_back,
diff --git a/camera/hal_adapter/reprocess_effect/gpu_algo_manager.cc b/camera/hal_adapter/reprocess_effect/gpu_algo_manager.cc
index 1479b85..48737a6 100644
--- a/camera/hal_adapter/reprocess_effect/gpu_algo_manager.cc
+++ b/camera/hal_adapter/reprocess_effect/gpu_algo_manager.cc
@@ -16,19 +16,19 @@
 
 // static
 GPUAlgoManager* GPUAlgoManager::GetInstance(
-    CameraMojoChannelManager* mojo_manager) {
-  static GPUAlgoManager* m = new GPUAlgoManager(mojo_manager);
+    CameraMojoChannelManagerToken* token) {
+  static GPUAlgoManager* m = new GPUAlgoManager(token);
   if (!m->bridge_) {
     return nullptr;
   }
   return m;
 }
 
-GPUAlgoManager::GPUAlgoManager(CameraMojoChannelManager* mojo_manager)
+GPUAlgoManager::GPUAlgoManager(CameraMojoChannelManagerToken* token)
     : camera_algorithm_callback_ops_t{}, req_id_(0) {
   return_callback = GPUAlgoManager::ReturnCallbackForwarder;
   bridge_ = cros::CameraAlgorithmBridge::CreateInstance(
-      cros::CameraAlgorithmBackend::kGoogleGpu, mojo_manager);
+      cros::CameraAlgorithmBackend::kGoogleGpu, token);
   if (!bridge_ || bridge_->Initialize(this) != 0) {
     LOGF(WARNING) << "Failed to initialize camera GPU algorithm bridge";
     bridge_ = nullptr;
diff --git a/camera/hal_adapter/reprocess_effect/gpu_algo_manager.h b/camera/hal_adapter/reprocess_effect/gpu_algo_manager.h
index 3daed44..5308655 100644
--- a/camera/hal_adapter/reprocess_effect/gpu_algo_manager.h
+++ b/camera/hal_adapter/reprocess_effect/gpu_algo_manager.h
@@ -15,13 +15,13 @@
 #include <base/synchronization/lock.h>
 
 #include "cros-camera/camera_algorithm_bridge.h"
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 
 namespace cros {
 
 class GPUAlgoManager final : public camera_algorithm_callback_ops_t {
  public:
-  static GPUAlgoManager* GetInstance(CameraMojoChannelManager* mojo_manager);
+  static GPUAlgoManager* GetInstance(CameraMojoChannelManagerToken* token);
 
   int32_t RegisterBuffer(int buffer_fd);
 
@@ -32,7 +32,7 @@
   void DeregisterBuffers(const std::vector<int32_t>& buffer_handles);
 
  private:
-  explicit GPUAlgoManager(CameraMojoChannelManager* mojo_manager);
+  explicit GPUAlgoManager(CameraMojoChannelManagerToken* token);
   GPUAlgoManager(const GPUAlgoManager&) = delete;
   GPUAlgoManager& operator=(const GPUAlgoManager&) = delete;
 
diff --git a/camera/hal_adapter/reprocess_effect/portrait_mode_effect.cc b/camera/hal_adapter/reprocess_effect/portrait_mode_effect.cc
index d5fbf87..3fa8a82 100644
--- a/camera/hal_adapter/reprocess_effect/portrait_mode_effect.cc
+++ b/camera/hal_adapter/reprocess_effect/portrait_mode_effect.cc
@@ -58,13 +58,13 @@
 int32_t PortraitModeEffect::InitializeAndGetVendorTags(
     std::vector<VendorTagInfo>* request_vendor_tags,
     std::vector<VendorTagInfo>* result_vendor_tags,
-    CameraMojoChannelManager* mojo_manager) {
+    CameraMojoChannelManagerToken* token) {
   VLOGF_ENTER();
   if (!request_vendor_tags || !result_vendor_tags) {
     return -EINVAL;
   }
 
-  gpu_algo_manager_ = GPUAlgoManager::GetInstance(mojo_manager);
+  gpu_algo_manager_ = GPUAlgoManager::GetInstance(token);
   if (!gpu_algo_manager_) {
     LOGF(WARNING)
         << "Cannot connect to GPU algorithm service. Disable portrait mode.";
diff --git a/camera/hal_adapter/reprocess_effect/portrait_mode_effect.h b/camera/hal_adapter/reprocess_effect/portrait_mode_effect.h
index 56d94cb..19c7387 100644
--- a/camera/hal_adapter/reprocess_effect/portrait_mode_effect.h
+++ b/camera/hal_adapter/reprocess_effect/portrait_mode_effect.h
@@ -36,7 +36,7 @@
   int32_t InitializeAndGetVendorTags(
       std::vector<VendorTagInfo>* request_vendor_tags,
       std::vector<VendorTagInfo>* result_vendor_tags,
-      CameraMojoChannelManager* mojo_manager);
+      CameraMojoChannelManagerToken* token);
 
   int32_t SetVendorTags(uint32_t request_vendor_tag_start,
                         uint32_t request_vendor_tag_count,
diff --git a/camera/hal_adapter/reprocess_effect/reprocess_effect.h b/camera/hal_adapter/reprocess_effect/reprocess_effect.h
index f9baab0..1f65731 100644
--- a/camera/hal_adapter/reprocess_effect/reprocess_effect.h
+++ b/camera/hal_adapter/reprocess_effect/reprocess_effect.h
@@ -16,7 +16,7 @@
 #include <hardware/gralloc.h>
 #include <system/camera_metadata.h>
 
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 #include "hal_adapter/scoped_yuv_buffer_handle.h"
 
 struct VendorTagInfo {
@@ -41,13 +41,13 @@
   // Args:
   //    |request_vendor_tags|: names and types of request vendor tags
   //    |result_vendor_tags|: names and types of result vendor tags
-  //    |mojo_manager|: the mojo manager instance
+  //    |token|: the mojo manager token
   // Returns:
   //    0 on success; corresponding error code on failure.
   virtual int32_t InitializeAndGetVendorTags(
       std::vector<VendorTagInfo>* request_vendor_tags,
       std::vector<VendorTagInfo>* result_vendor_tags,
-      CameraMojoChannelManager* mojo_manager) = 0;
+      CameraMojoChannelManagerToken* token) = 0;
 
   // Sets the vendor tags that are allocated for the reprocessing effects.
   // Args:
diff --git a/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.cc b/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.cc
index 9ff77e1..0b4bed6 100644
--- a/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.cc
+++ b/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.cc
@@ -26,13 +26,13 @@
       buffer_manager_(CameraBufferManager::GetInstance()) {}
 
 int32_t ReprocessEffectManager::Initialize(
-    CameraMojoChannelManager* mojo_manager) {
+    CameraMojoChannelManagerToken* token) {
   VLOGF_ENTER();
   portrait_mode_ = std::make_unique<PortraitModeEffect>();
   std::vector<VendorTagInfo> request_vendor_tags;
   std::vector<VendorTagInfo> result_vendor_tags;
   if (portrait_mode_->InitializeAndGetVendorTags(
-          &request_vendor_tags, &result_vendor_tags, mojo_manager) != 0) {
+          &request_vendor_tags, &result_vendor_tags, token) != 0) {
     LOGF(ERROR) << "Failed to initialize portrait mode effect";
     return -ENODEV;
   }
diff --git a/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.h b/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.h
index 7a32fa2..b5eac7a 100644
--- a/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.h
+++ b/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.h
@@ -16,7 +16,7 @@
 #include <system/camera_vendor_tags.h>
 
 #include "cros-camera/camera_buffer_manager.h"
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 #include "hal_adapter/reprocess_effect/portrait_mode_effect.h"
 #include "hal_adapter/reprocess_effect/reprocess_effect.h"
 
@@ -33,7 +33,7 @@
 
   ~ReprocessEffectManager() = default;
 
-  int32_t Initialize(CameraMojoChannelManager* mojo_manager);
+  int32_t Initialize(CameraMojoChannelManagerToken* token);
 
   // Check whether there are vendor tags for reprocessing effects
   bool HasReprocessEffectVendorTag(const camera_metadata_t& settings);
diff --git a/camera/include/cros-camera/camera_algorithm_bridge.h b/camera/include/cros-camera/camera_algorithm_bridge.h
index a6806b0..6c80fce 100644
--- a/camera/include/cros-camera/camera_algorithm_bridge.h
+++ b/camera/include/cros-camera/camera_algorithm_bridge.h
@@ -13,7 +13,7 @@
 #include <vector>
 
 #include "cros-camera/camera_algorithm.h"
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 #include "cros-camera/export.h"
 
 namespace cros {
@@ -37,8 +37,8 @@
 // Example usage:
 //
 //  #include <cros-camera/camera_algorithm_bridge.h>
-//  auto* mojo_manager = GetMojoChannelManager();
-//  auto algo = CameraAlgorithmBridge::CreateInstance(backend, mojo_manager);
+//  auto* token = GetMojoChannelManagerToken();
+//  auto algo = CameraAlgorithmBridge::CreateInstance(backend, token);
 //  algo->Initialize(this);
 //  std::vector<int32_t> handles(2);
 //  handles[0] = algo->RegisterBuffer(buffer_fd0);
@@ -65,12 +65,12 @@
   // vendor algorithms.
   //
   // Args:
-  //    |mojo_manager|: The camera mojo channel manager instance which is used
-  //                    for mojo communication.
+  //    |token|: The camera mojo channel manager token which is used for mojo
+  //             communication.
   // Returns:
   //    Unique pointer to instance on success; nullptr on failure.
   static std::unique_ptr<CameraAlgorithmBridge> CreateInstance(
-      CameraAlgorithmBackend backend, CameraMojoChannelManager* mojo_manager);
+      CameraAlgorithmBackend backend, CameraMojoChannelManagerToken* token);
 
   virtual ~CameraAlgorithmBridge() {}
 
diff --git a/camera/include/cros-camera/camera_mojo_channel_manager.h b/camera/include/cros-camera/camera_mojo_channel_manager.h
index 4c42721..c9e16e4 100644
--- a/camera/include/cros-camera/camera_mojo_channel_manager.h
+++ b/camera/include/cros-camera/camera_mojo_channel_manager.h
@@ -14,7 +14,7 @@
 #include <base/callback_forward.h>
 #include <base/memory/ref_counted.h>
 
-#include "cros-camera/export.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 #include "mojo/algorithm/camera_algorithm.mojom.h"
 #include "mojo/cros_camera_service.mojom.h"
 #include "mojo/gpu/jpeg_encode_accelerator.mojom.h"
@@ -28,12 +28,11 @@
 
 // There are many places that need to initialize Mojo and use related channels.
 // This class is used to manage them together.
-class CROS_CAMERA_EXPORT CameraMojoChannelManager {
+class CROS_CAMERA_EXPORT CameraMojoChannelManager
+    : public CameraMojoChannelManagerToken {
  public:
   using Callback = base::OnceCallback<void(void)>;
 
-  static std::unique_ptr<CameraMojoChannelManager> CreateInstance();
-
   virtual ~CameraMojoChannelManager() {}
 
   // TODO(b/151270948): Remove this method once all camera HALs implement
@@ -41,6 +40,11 @@
   // to them.
   static CameraMojoChannelManager* GetInstance();
 
+  static CameraMojoChannelManager* FromToken(
+      CameraMojoChannelManagerToken* token) {
+    return static_cast<CameraMojoChannelManager*>(token);
+  }
+
   // Gets the task runner that the CameraHalDispatcher interface is bound to.
   virtual scoped_refptr<base::SingleThreadTaskRunner> GetIpcTaskRunner() = 0;
 
diff --git a/camera/include/cros-camera/camera_mojo_channel_manager_token.h b/camera/include/cros-camera/camera_mojo_channel_manager_token.h
new file mode 100644
index 0000000..cf3766e
--- /dev/null
+++ b/camera/include/cros-camera/camera_mojo_channel_manager_token.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2020 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef CAMERA_INCLUDE_CROS_CAMERA_CAMERA_MOJO_CHANNEL_MANAGER_TOKEN_H_
+#define CAMERA_INCLUDE_CROS_CAMERA_CAMERA_MOJO_CHANNEL_MANAGER_TOKEN_H_
+
+#include "cros-camera/export.h"
+
+namespace cros {
+
+class CROS_CAMERA_EXPORT CameraMojoChannelManagerToken {
+ public:
+  static CameraMojoChannelManagerToken* CreateInstance();
+};
+
+}  // namespace cros
+
+#endif  // CAMERA_INCLUDE_CROS_CAMERA_CAMERA_MOJO_CHANNEL_MANAGER_TOKEN_H_
diff --git a/camera/include/cros-camera/cros_camera_hal.h b/camera/include/cros-camera/cros_camera_hal.h
index 3d1d01a..88763e7 100644
--- a/camera/include/cros-camera/cros_camera_hal.h
+++ b/camera/include/cros-camera/cros_camera_hal.h
@@ -10,7 +10,9 @@
 #define CROS_CAMERA_HAL_INFO_SYM CCHI
 #define CROS_CAMERA_HAL_INFO_SYM_AS_STR "CCHI"
 
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include <base/callback.h>
+
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 
 namespace cros {
 
@@ -25,10 +27,10 @@
 
 typedef struct cros_camera_hal {
   /**
-   * Sets up the camera HAL. The |mojo_manager| can be used for communication
-   * through Mojo.
+   * Sets up the camera HAL. The |token| can be used for communication through
+   * Mojo.
    */
-  void (*set_up)(CameraMojoChannelManager* mojo_manager);
+  void (*set_up)(CameraMojoChannelManagerToken* token);
 
   /**
    * Tears down the camera HAL.
diff --git a/camera/include/cros-camera/jpeg_compressor.h b/camera/include/cros-camera/jpeg_compressor.h
index 9074504..596c9b7 100644
--- a/camera/include/cros-camera/jpeg_compressor.h
+++ b/camera/include/cros-camera/jpeg_compressor.h
@@ -11,7 +11,7 @@
 
 #include <memory>
 
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 #include "cros-camera/export.h"
 
 namespace cros {
@@ -39,7 +39,7 @@
   static std::unique_ptr<JpegCompressor> GetInstance();
 
   static std::unique_ptr<JpegCompressor> GetInstance(
-      CameraMojoChannelManager* mojo_manager);
+      CameraMojoChannelManagerToken* token);
 
   virtual ~JpegCompressor() {}
 
diff --git a/camera/include/cros-camera/jpeg_decode_accelerator.h b/camera/include/cros-camera/jpeg_decode_accelerator.h
index 8f4c778..fc50065 100644
--- a/camera/include/cros-camera/jpeg_decode_accelerator.h
+++ b/camera/include/cros-camera/jpeg_decode_accelerator.h
@@ -14,7 +14,7 @@
 
 #include <system/window.h>
 
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 
 namespace cros {
 
@@ -61,7 +61,7 @@
   static std::unique_ptr<JpegDecodeAccelerator> CreateInstance();
 
   static std::unique_ptr<JpegDecodeAccelerator> CreateInstance(
-      CameraMojoChannelManager* mojo_manager);
+      CameraMojoChannelManagerToken* token);
 
   virtual ~JpegDecodeAccelerator() {}
 
diff --git a/camera/include/cros-camera/jpeg_encode_accelerator.h b/camera/include/cros-camera/jpeg_encode_accelerator.h
index 8d065f2..31748ef 100644
--- a/camera/include/cros-camera/jpeg_encode_accelerator.h
+++ b/camera/include/cros-camera/jpeg_encode_accelerator.h
@@ -12,7 +12,7 @@
 #include <vector>
 
 #include <base/bind.h>
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
 #include "cros-camera/jpeg_compressor.h"
 
 namespace cros {
@@ -65,7 +65,7 @@
   };
 
   static std::unique_ptr<JpegEncodeAccelerator> CreateInstance(
-      CameraMojoChannelManager* mojo_manager);
+      CameraMojoChannelManagerToken* token);
 
   virtual ~JpegEncodeAccelerator() {}
 
