blob: 1075cd835a494b2683a17bab53996bf7f2f49d8d [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// 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_overridden_params_providers.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/settings_api_helpers.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "content/public/test/browser_test.h"
#include "extensions/browser/extension_system.h"
#include "extensions/common/extension_builder.h"
#include "extensions/common/value_builder.h"
class SettingsOverriddenParamsProvidersBrowserTest
: public extensions::ExtensionBrowserTest {
public:
// Installs a new extension that controls the default search engine.
const extensions::Extension* AddExtensionControllingSearch() {
const extensions::Extension* extension =
InstallExtensionWithPermissionsGranted(
test_data_dir_.AppendASCII("search_provider_override"), 1);
EXPECT_EQ(extension,
extensions::GetExtensionOverridingSearchEngine(profile()));
return extension;
}
};
// The chrome_settings_overrides API that allows extensions to override the
// default search provider is only available on Windows and Mac.
#if defined(OS_WIN) || defined(OS_MACOSX)
// NOTE: It's very unfortunate that this has to be a browsertest. Unfortunately,
// a few bits here - the TemplateURLService in particular - don't play nicely
// with a unittest environment.
IN_PROC_BROWSER_TEST_F(SettingsOverriddenParamsProvidersBrowserTest,
GetExtensionControllingSearch) {
// With no extensions installed, there should be no controlling extension.
EXPECT_EQ(base::nullopt,
settings_overridden_params::GetSearchOverriddenParams(profile()));
// Install an extension, but not one that overrides the default search engine.
// There should still be no controlling extension.
InstallExtensionWithPermissionsGranted(
test_data_dir_.AppendASCII("simple_with_icon"), 1);
EXPECT_EQ(base::nullopt,
settings_overridden_params::GetSearchOverriddenParams(profile()));
// Finally, install an extension that overrides the default search engine.
// It should be the controlling extension.
const extensions::Extension* search_extension =
AddExtensionControllingSearch();
base::Optional<ExtensionSettingsOverriddenDialog::Params> params =
settings_overridden_params::GetSearchOverriddenParams(profile());
ASSERT_TRUE(params);
EXPECT_EQ(search_extension->id(), params->controlling_extension_id);
// Validate the body message, since it has a bit of formatting applied.
EXPECT_EQ(
"The Search Override Extension extension changed search to use "
"example.com",
base::UTF16ToUTF8(params->dialog_message));
}
#endif // defined(OS_WIN) || defined(OS_MACOSX)