// Copyright 2021 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/force_installed_tracker_lacros.h"
#include "base/memory/raw_ptr.h"
#include "chrome/browser/extensions/forced_extensions/force_installed_test_base.h"
#include "extensions/common/extension.h"
#include "testing/gtest/include/gtest/gtest.h"
using extensions::Extension;
using extensions::ForceInstalledTracker;
using ExtensionStatus = ForceInstalledTracker::ExtensionStatus;
class FakeForceInstalledTrackerLacros : public ForceInstalledTrackerLacros {
public:
FakeForceInstalledTrackerLacros() = default;
~FakeForceInstalledTrackerLacros() override = default;
// ForceInstalledTrackerLacros:
void OnForceInstalledExtensionsReady() override { is_ready_ = true; }
// Skip the check of service availability for testing.
bool IsServiceAvailable() const override { return true; }
// Use a plug-in `ForceInstalledTracker` instance for testing.
ForceInstalledTracker* GetExtensionForceInstalledTracker() override {
return tracker_;
}
bool is_ready() const { return is_ready_; }
void set_tracker(ForceInstalledTracker* tracker) { tracker_ = tracker; }
private:
bool is_ready_ = false;
raw_ptr<ForceInstalledTracker> tracker_;
};
class ForceInstalledTrackerLacrosTest
: public extensions::ForceInstalledTestBase {
public:
ForceInstalledTrackerLacrosTest() = default;
ForceInstalledTrackerLacrosTest(const ForceInstalledTrackerLacrosTest&) =
delete;
ForceInstalledTrackerLacrosTest& operator=(
const ForceInstalledTrackerLacrosTest&) = delete;
FakeForceInstalledTrackerLacros* tracker_in_lacros() {
return &tracker_in_lacros_;
}
void InitialAndStartTrackerInLacros() {
tracker_in_lacros_.set_tracker(force_installed_tracker());
tracker_in_lacros_.Start();
}
private:
FakeForceInstalledTrackerLacros tracker_in_lacros_;
};
TEST_F(ForceInstalledTrackerLacrosTest, UnavailableTracker) {
SetupEmptyForceList();
tracker_in_lacros()->set_tracker(nullptr);
tracker_in_lacros()->Start();
EXPECT_FALSE(tracker_in_lacros()->is_ready());
}
TEST_F(ForceInstalledTrackerLacrosTest, EmptyForceList) {
SetupEmptyForceList();
InitialAndStartTrackerInLacros();
EXPECT_TRUE(tracker_in_lacros()->is_ready());
}
TEST_F(ForceInstalledTrackerLacrosTest, ForceList) {
scoped_refptr<const Extension> ext1 = CreateNewExtension(
kExtensionName1, kExtensionId1, ExtensionStatus::kPending);
scoped_refptr<const Extension> ext2 = CreateNewExtension(
kExtensionName2, kExtensionId2, ExtensionStatus::kPending);
SetupForceList(ExtensionOrigin::kWebStore);
InitialAndStartTrackerInLacros();
EXPECT_FALSE(tracker_in_lacros()->is_ready());
force_installed_tracker()->OnExtensionLoaded(profile(), ext1.get());
force_installed_tracker()->OnExtensionLoaded(profile(), ext2.get());
EXPECT_FALSE(tracker_in_lacros()->is_ready());
force_installed_tracker()->OnExtensionReady(profile(), ext1.get());
force_installed_tracker()->OnExtensionReady(profile(), ext2.get());
EXPECT_TRUE(tracker_in_lacros()->is_ready());
}