chromium/chrome/browser/ash/crosapi/magic_boost_ash_browsertest.cc

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

#include "base/test/bind.h"
#include "chrome/browser/ash/crosapi/crosapi_ash.h"
#include "chrome/browser/ash/crosapi/crosapi_manager.h"
#include "chrome/browser/ash/magic_boost/magic_boost_controller_ash.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chromeos/crosapi/mojom/magic_boost.mojom.h"
#include "content/public/test/browser_test.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/display/screen.h"

namespace crosapi {

namespace {

using OptInFeatures = crosapi::mojom::MagicBoostController::OptInFeatures;

// Calls all crosapi::mojom::MagicBoostControlle methods over mojo.
void CallMagicBoostControllerMethods(
    mojo::Remote<mojom::MagicBoostController>& remote) {
  auto display_id = display::Screen::GetScreen()->GetPrimaryDisplay().id();
  remote->ShowDisclaimerUi(
      /*display_id=*/display_id,
      /*action=*/
      crosapi::mojom::MagicBoostController::TransitionAction::kDoNothing,
      /*opt_in_features=*/OptInFeatures::kOrcaAndHmr);
  remote->ShowDisclaimerUi(
      /*display_id=*/display_id,
      /*action=*/
      crosapi::mojom::MagicBoostController::TransitionAction::kShowEditorPanel,
      /*opt_in_features=*/OptInFeatures::kOrcaAndHmr);
}

// Calls all crosapi::mojom::MagicBoostController methods directly.
void CallMagicBoostControllerMethods(
    ash::MagicBoostControllerAsh* magic_boost_controller) {
  auto display_id = display::Screen::GetScreen()->GetPrimaryDisplay().id();
  magic_boost_controller->ShowDisclaimerUi(
      /*display_id=*/display_id,
      /*action=*/
      crosapi::mojom::MagicBoostController::TransitionAction::kDoNothing,
      /*opt_in_features=*/OptInFeatures::kOrcaAndHmr);
  magic_boost_controller->ShowDisclaimerUi(
      /*display_id=*/display_id,
      /*action=*/
      crosapi::mojom::MagicBoostController::TransitionAction::kShowEditorPanel,
      /*opt_in_features=*/OptInFeatures::kOrcaAndHmr);
}

using MagicBoostAshBrowserTest = InProcessBrowserTest;

// Make sure `MagicBoostController` api calls don't crash.
IN_PROC_BROWSER_TEST_F(MagicBoostAshBrowserTest, Basics) {
  ASSERT_TRUE(CrosapiManager::IsInitialized());
  auto* magic_boost_controller =
      CrosapiManager::Get()->crosapi_ash()->magic_boost_controller_ash();
  {
    mojo::Remote<mojom::MagicBoostController> remote1;
    magic_boost_controller->BindReceiver(remote1.BindNewPipeAndPassReceiver());

    CallMagicBoostControllerMethods(remote1);
    CallMagicBoostControllerMethods(magic_boost_controller);
  }

  // Disconnect old clients and try again to ensure manager's API doesn't crash
  // after any client disconnects.
  mojo::Remote<mojom::MagicBoostController> remote2;
  magic_boost_controller->BindReceiver(remote2.BindNewPipeAndPassReceiver());
  CallMagicBoostControllerMethods(remote2);
  CallMagicBoostControllerMethods(magic_boost_controller);

  // TODO(b/341832244): Test that widget is shown after `ShowDisclaimerUi` is
  // called.
}

}  // namespace

}  // namespace crosapi