// Copyright 2025 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/win/taskbar_manager.h"

#include "base/run_loop.h"
#include "base/test/metrics/histogram_tester.h"
#include "build/branding_buildflags.h"
#include "chrome/installer/util/shell_util.h"
#include "content/public/test/browser_task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"

// Because accessing limited access features requires adding a resource
// to the .rc file, and tests don't have .rc files, all we can test
// is that requesting taskbar operations calls the callback with the
// kFeatureNotAvailable failure result.

static constexpr char kShouldPinResultMetric[] =
    "Windows.ShouldPinToTaskbarResult";
static constexpr char kPinResultMetric[] = "Windows.TaskbarPinResult";

class TaskbarManagerTest : public testing::Test {
 public:
  void OnCanPinToTaskbarResult(bool result) {
    result_ = result;
    got_result_.Quit();
  }

 protected:
  content::BrowserTaskEnvironment task_environment_;
  bool result_ = false;
  base::RunLoop got_result_;
  base::HistogramTester histogram_tester_;
};

TEST_F(TaskbarManagerTest, ShouldOfferToPin) {
  browser_util::ShouldOfferToPin(
      ShellUtil::GetBrowserModelId(/*is_per_user_install=*/true),
      base::BindOnce(&TaskbarManagerTest::OnCanPinToTaskbarResult,
                     base::Unretained(this)));

  got_result_.Run();
  EXPECT_FALSE(result_);
  histogram_tester_.ExpectBucketCount(
      kShouldPinResultMetric,
      browser_util::PinResultMetric::kFeatureNotAvailable, 1);
}

TEST_F(TaskbarManagerTest, PinToTaskbar) {
  browser_util::PinAppToTaskbar(
      ShellUtil::GetBrowserModelId(/*is_per_user_install=*/true),
      base::BindOnce(&TaskbarManagerTest::OnCanPinToTaskbarResult,
                     base::Unretained(this)));

  got_result_.Run();
  histogram_tester_.ExpectBucketCount(
      kPinResultMetric, browser_util::PinResultMetric::kFeatureNotAvailable, 1);
  EXPECT_FALSE(result_);
}
