1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
// 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
|