blob: 590a1a6cdd0f774a2e5bc4c7d4fd7d2a160359b0 [file] [log] [blame]
// Copyright 2017 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/ui/extensions/settings_api_bubble_helpers.h"
#include <memory>
#include "base/functional/bind.h"
#include "base/values.h"
#include "chrome/browser/extensions/extension_service_test_base.h"
#include "chrome/browser/extensions/extension_web_ui_override_registrar.h"
#include "chrome/browser/profiles/profile.h"
#include "components/crx_file/id_util.h"
#include "extensions/browser/extension_registrar.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_builder.h"
namespace extensions {
namespace {
std::unique_ptr<KeyedService> BuildOverrideRegistrar(
content::BrowserContext* context) {
return std::make_unique<ExtensionWebUIOverrideRegistrar>(context);
}
scoped_refptr<const Extension> GetNtpExtension(const std::string& name) {
return ExtensionBuilder()
.SetManifest(base::Value::Dict()
.Set("name", name)
.Set("version", "1.0")
.Set("manifest_version", 2)
.Set("chrome_url_overrides",
base::Value::Dict().Set("newtab", "newtab.html")))
.SetID(crx_file::id_util::GenerateId(name))
.Build();
}
} // namespace
using SettingsApiBubbleHelpersUnitTest = ExtensionServiceTestBase;
TEST_F(SettingsApiBubbleHelpersUnitTest, TestAcknowledgeExistingExtensions) {
base::AutoReset<bool> ack_existing =
SetAcknowledgeExistingNtpExtensionsForTesting(true);
InitializeEmptyExtensionService();
ExtensionWebUIOverrideRegistrar::GetFactoryInstance()->SetTestingFactory(
profile(), base::BindRepeating(&BuildOverrideRegistrar));
// We need to trigger the instantiation of the WebUIOverrideRegistrar for
// it to be constructed, since by default it's not constructed in tests.
ExtensionWebUIOverrideRegistrar::GetFactoryInstance()->Get(profile());
// Create an extension overriding the NTP.
scoped_refptr<const Extension> first = GetNtpExtension("first");
registrar()->AddExtension(first);
auto is_acknowledged = [this](const ExtensionId& id) {
bool is_acked = false;
return ExtensionPrefs::Get(profile())->ReadPrefAsBoolean(
id, kNtpOverridingExtensionAcknowledged, &is_acked) &&
is_acked;
};
// By default, the extension should not be acknowledged.
EXPECT_FALSE(is_acknowledged(first->id()));
// Acknowledge existing extensions. Now, `first` should be acknowledged.
AcknowledgePreExistingNtpExtensions(profile());
EXPECT_TRUE(is_acknowledged(first->id()));
// Install a second NTP-overriding extension. The new extension should not be
// acknowledged.
scoped_refptr<const Extension> second = GetNtpExtension("second");
registrar()->AddExtension(second);
EXPECT_FALSE(is_acknowledged(second->id()));
// Try acknowledging existing extensions. Since we already did this once for
// this profile, this should have no effect, and we should still consider the
// second extension unacknowledged.
AcknowledgePreExistingNtpExtensions(profile());
EXPECT_FALSE(is_acknowledged(second->id()));
// But the first should still be acknowledged.
EXPECT_TRUE(is_acknowledged(first->id()));
}
} // namespace extensions