chromium/chrome/browser/lacros/clipboard_history_lacros.cc

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/lacros/clipboard_history_lacros.h"

#include <utility>

#include "base/functional/bind.h"
#include "chromeos/constants/chromeos_features.h"
#include "chromeos/crosapi/mojom/clipboard_history.mojom.h"

namespace crosapi {

namespace {
ClipboardHistoryLacros* g_instance = nullptr;
}  // namespace

ClipboardHistoryLacros::ClipboardHistoryLacros(mojom::ClipboardHistory* remote)
    : receiver_(this) {
  CHECK(chromeos::features::IsClipboardHistoryRefreshEnabled());
  CHECK(!g_instance);
  g_instance = this;

  // Register on the Ash side to receive descriptor updates.
  CHECK(remote);
  remote->RegisterClient(receiver_.BindNewPipeAndPassRemote());

  // `receiver_` is a class member so it is safe to use `this` pointer here.
  receiver_.set_disconnect_handler(base::BindOnce(
      &ClipboardHistoryLacros::OnDisconnected, base::Unretained(this)));
}

ClipboardHistoryLacros::~ClipboardHistoryLacros() {
  CHECK(g_instance);
  g_instance = nullptr;
}

// static
ClipboardHistoryLacros* ClipboardHistoryLacros::Get() {
  CHECK(g_instance);
  return g_instance;
}

void ClipboardHistoryLacros::SetClipboardHistoryItemDescriptors(
    std::vector<mojom::ClipboardHistoryItemDescriptorPtr> descriptor_ptrs) {
  std::vector<mojom::ClipboardHistoryItemDescriptor> filtered_items;
  for (const auto& descriptor_ptr : descriptor_ptrs) {
    // Ignore the received descriptors of unknown types.
    if (descriptor_ptr->display_format ==
        mojom::ClipboardHistoryDisplayFormat::kUnknown) {
      continue;
    }
    filtered_items.emplace_back(
        descriptor_ptr->item_id, descriptor_ptr->display_format,
        descriptor_ptr->display_text, descriptor_ptr->file_count);
  }
  cached_descriptors_ = std::move(filtered_items);
}

void ClipboardHistoryLacros::OnDisconnected() {
  receiver_.reset();
}

}  // namespace crosapi