Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(115)

Unified Diff: chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model_browsertest.cc

Issue 2727063006: Settings reset prompt: add startup logic (Closed)
Patch Set: Nits Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model_browsertest.cc
diff --git a/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model_browsertest.cc b/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model_browsertest.cc
deleted file mode 100644
index c76d9f725045799018378ae2ef1c258c275474cf..0000000000000000000000000000000000000000
--- a/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model_browsertest.cc
+++ /dev/null
@@ -1,795 +0,0 @@
-// Copyright 2017 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/safe_browsing/settings_reset_prompt/settings_reset_prompt_model.h"
-
-#include <memory>
-#include <string>
-#include <unordered_set>
-#include <utility>
-
-#include "base/callback.h"
-#include "base/memory/ptr_util.h"
-#include "base/run_loop.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/values.h"
-#include "chrome/browser/extensions/extension_browsertest.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/test_extension_dir.h"
-#include "chrome/browser/profile_resetter/resettable_settings_snapshot.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_test_utils.h"
-#include "chrome/browser/search_engines/template_url_service_factory.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/test/base/search_test_utils.h"
-#include "components/prefs/pref_service.h"
-#include "components/search_engines/template_url.h"
-#include "components/search_engines/template_url_data.h"
-#include "components/search_engines/template_url_service.h"
-#include "extensions/common/extension.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-namespace safe_browsing {
-namespace {
-
-using extensions::Extension;
-using testing::_;
-using testing::Bool;
-using testing::Combine;
-using testing::ElementsAre;
-using testing::IsEmpty;
-using testing::NiceMock;
-using testing::Pair;
-using testing::UnorderedElementsAre;
-
-const char kDefaultHomepage[] = "http://myhomepage.com";
-const char kDefaultSearchUrl[] = "http://mygoogle.com/s?q={searchTerms}";
-const char kDefaultStartupUrl1[] = "http://mystart1.com";
-const char kDefaultStartupUrl2[] = "http://mystart2.com";
-
-// Some tests and parts of tests should only be run on platforms where settings
-// override for extensions is available. The settings reset prompt is currently
-// designed for desktop, and Windows in particular. Getting the tests to run on
-// other platforms that do not allow extensions to override settings (e.g.,
-// Linux) would require more #ifdefs and platform specific considerations than
-// it is worth.
-#if defined(OS_WIN) || defined(OS_MACOSX)
-const char kHomepage1[] = "http://homepage.com/";
-const char kHomepage2[] = "http://otherhomepage.com/";
-const char kSearchUrl1[] = "http://mysearch.com/s?q={searchTerms}";
-const char kSearchUrl2[] = "http://othersearch.com/s?q={searchTerms}";
-const char kStartupUrl1[] = "http://super-startup.com";
-const char kStartupUrl2[] = "http://awesome-start-page.com";
-#endif // defined(OS_WIN) || defined(OS_MACOSX)
-
-// Extension manifests to override settings.
-const char kManifestNoOverride[] =
- "{"
- " 'name': 'Safe Extension',"
- " 'version': '1',"
- " 'manifest_version': 2"
- "}";
-
-const char kManifestToOverrideHomepage[] =
- "{"
- " 'name': 'Homepage Extension',"
- " 'version': '1',"
- " 'manifest_version': 2,"
- " 'chrome_settings_overrides' : {"
- " 'homepage': '%s'"
- " }"
- "}";
-
-const char kManifestToOverrideSearch[] =
- "{"
- " 'name': 'Search Extension',"
- " 'version': '0.1',"
- " 'manifest_version': 2,"
- " 'chrome_settings_overrides': {"
- " 'search_provider': {"
- " 'name': 'name',"
- " 'keyword': 'keyword',"
- " 'search_url': '%s',"
- " 'favicon_url': 'http://someplace.com/favicon.ico',"
- " 'encoding': 'UTF-8',"
- " 'is_default': true"
- " }"
- " }"
- "}";
-
-const char kManifestToOverrideStartupUrls[] =
- "{"
- " 'name': 'Startup URLs Extension',"
- " 'version': '1',"
- " 'manifest_version': 2,"
- " 'chrome_settings_overrides' : {"
- " 'startup_pages': ['%s']"
- " }"
- "}";
-
-class SettingsResetPromptModelBrowserTest : public ExtensionBrowserTest {
- public:
- virtual void OnResetDone() { ++reset_callbacks_; }
-
- protected:
- using ModelPointer = std::unique_ptr<SettingsResetPromptModel>;
-
- SettingsResetPromptModelBrowserTest()
- : startup_pref_(SessionStartupPref::URLS) {}
-
- void SetUpOnMainThread() override {
- ExtensionBrowserTest::SetUpOnMainThread();
-
- // Set up an active homepage with visible homepage button.
- PrefService* prefs = profile()->GetPrefs();
- ASSERT_TRUE(prefs);
- prefs->SetBoolean(prefs::kShowHomeButton, true);
- prefs->SetBoolean(prefs::kHomePageIsNewTabPage, false);
- prefs->SetString(prefs::kHomePage, kDefaultHomepage);
-
- // Set up a default search with known URL.
- TemplateURLService* template_url_service =
- TemplateURLServiceFactory::GetForProfile(profile());
- ASSERT_TRUE(template_url_service);
-
- TemplateURLData data;
- data.SetShortName(base::ASCIIToUTF16("default"));
- data.SetKeyword(base::ASCIIToUTF16("default"));
- data.SetURL(kDefaultSearchUrl);
-
- TemplateURL* template_url =
- template_url_service->Add(base::MakeUnique<TemplateURL>(data));
- template_url_service->SetUserSelectedDefaultSearchProvider(template_url);
-
- // Set up a couple of startup URLs.
- startup_pref_.urls.push_back(GURL(kDefaultStartupUrl1));
- startup_pref_.urls.push_back(GURL(kDefaultStartupUrl2));
- SessionStartupPref::SetStartupPref(profile(), startup_pref_);
- ASSERT_EQ(SessionStartupPref::PrefValueToType(
- GetPrefs()->GetInteger(prefs::kRestoreOnStartup)),
- startup_pref_.type);
- }
-
- PrefService* GetPrefs() { return profile()->GetPrefs(); }
-
- void LoadHomepageExtension(const char* homepage,
- const Extension** out_extension) {
- const std::string manifest =
- base::StringPrintf(kManifestToOverrideHomepage, homepage);
- LoadManifest(manifest, out_extension);
- ASSERT_EQ(std::string(homepage), GetPrefs()->GetString(prefs::kHomePage));
- }
-
- void LoadSearchExtension(const char* search_url,
- const Extension** out_extension) {
- const std::string manifest =
- base::StringPrintf(kManifestToOverrideSearch, search_url);
- LoadManifest(manifest, out_extension);
-
- TemplateURLService* service =
- TemplateURLServiceFactory::GetForProfile(profile());
- search_test_utils::WaitForTemplateURLServiceToLoad(service);
-
- const TemplateURL* dse = service->GetDefaultSearchProvider();
- EXPECT_EQ(std::string(search_url), dse->url());
- }
-
- void LoadStartupUrlExtension(const char* startup_url,
- const Extension** out_extension) {
- const std::string manifest =
- base::StringPrintf(kManifestToOverrideStartupUrls, startup_url);
- LoadManifest(manifest, out_extension);
-
- // Ensure that the startup url seen in the prefs is same as |startup_url|.
- const base::ListValue* url_list =
- GetPrefs()->GetList(prefs::kURLsToRestoreOnStartup);
- ASSERT_EQ(url_list->GetSize(), 1U);
- std::string url_text;
- ASSERT_TRUE(url_list->GetString(0, &url_text));
- ASSERT_EQ(GURL(url_text), GURL(startup_url));
- }
-
- void LoadManifest(const std::string& manifest,
- const Extension** out_extension) {
- extensions::TestExtensionDir extension_dir;
- extension_dir.WriteManifestWithSingleQuotes(manifest);
- *out_extension = LoadExtension(extension_dir.UnpackedPath());
- ASSERT_TRUE(*out_extension);
- }
-
- // Returns a model with a mock config that will return negative IDs for every
- // URL.
- ModelPointer CreateModel() {
- return CreateModelForTesting(profile(), std::unordered_set<std::string>(),
- nullptr);
- }
-
- // Returns a model with a mock config that will return positive IDs for each
- // URL in |reset_urls|.
- ModelPointer CreateModel(std::unordered_set<std::string> reset_urls) {
- return CreateModelForTesting(profile(), reset_urls, nullptr);
- }
-
- // Returns a model with a mock config that will return positive IDs for each
- // URL in |reset_urls|.
- ModelPointer CreateModel(std::unordered_set<std::string> reset_urls,
- std::unique_ptr<ProfileResetter> profile_resetter) {
- return CreateModelForTesting(profile(), reset_urls,
- std::move(profile_resetter));
- }
-
- SessionStartupPref startup_pref_;
- int reset_callbacks_ = 0;
-};
-
-IN_PROC_BROWSER_TEST_F(SettingsResetPromptModelBrowserTest,
- ExtensionsToDisable_Homepage) {
- // Homepage does not require reset to start with.
- {
- ModelPointer model = CreateModel();
- EXPECT_EQ(
- model->homepage_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Let homepage require reset, no extensions need to be disable.
- {
- ModelPointer model = CreateModel({kDefaultHomepage});
- EXPECT_EQ(model->homepage_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Load an extension that does not override settings. Homepage still requires
- // reset, no extensions need to be disable.
- const Extension* safe_extension = nullptr;
- LoadManifest(kManifestNoOverride, &safe_extension);
- {
- ModelPointer model = CreateModel({kDefaultHomepage});
- EXPECT_EQ(model->homepage_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
-// Some tests should run only on platforms where settings override for
-// extensions is available. See comment at the top for more details.
-#if defined(OS_WIN) || defined(OS_MACOSX)
- // Load extension that overrides homepage. Homepage no longer needs to be
- // reset.
- const Extension* homepage_extension1 = nullptr;
- LoadHomepageExtension(kHomepage1, &homepage_extension1);
- {
- ModelPointer model = CreateModel({kDefaultHomepage});
- EXPECT_EQ(
- model->homepage_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Let the domain used by the extension require reset. Homepage now needs to
- // be reset, one extension needs to be disabled.
- {
- ModelPointer model = CreateModel({kDefaultHomepage, kHomepage1});
- EXPECT_EQ(model->homepage_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->extensions_to_disable(),
- ElementsAre(Pair(homepage_extension1->id(), _)));
- }
-
- // Add a second homepage-overriding extension. Homepage no longer needs to be
- // reset, no extensions need to be disabled.
- const Extension* homepage_extension2 = nullptr;
- LoadHomepageExtension(kHomepage2, &homepage_extension2);
- {
- ModelPointer model = CreateModel({kDefaultHomepage, kHomepage1});
- EXPECT_EQ(
- model->homepage_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Let the domain used by the second extension require reset. Homepage needs
- // to be reset again, and both extensions need to be disabled.
- {
- ModelPointer model =
- CreateModel({kDefaultHomepage, kHomepage1, kHomepage2});
- EXPECT_EQ(model->homepage_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->extensions_to_disable(),
- UnorderedElementsAre(Pair(homepage_extension1->id(), _),
- Pair(homepage_extension2->id(), _)));
- }
-
- // Let only the domain for the second extension require reset. Homepage still
- // needs to be reset, and both extensions need to be disabled.
- {
- ModelPointer model = CreateModel({kHomepage2});
- EXPECT_EQ(model->homepage_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->extensions_to_disable(),
- UnorderedElementsAre(Pair(homepage_extension1->id(), _),
- Pair(homepage_extension2->id(), _)));
- }
-#endif // defined(OS_WIN) || defined(OS_MACOSX)
-}
-
-IN_PROC_BROWSER_TEST_F(SettingsResetPromptModelBrowserTest,
- ExtensionsToDisable_DefaultSearch) {
- // Search does not need to be reset to start with.
- {
- ModelPointer model = CreateModel();
- EXPECT_EQ(
- model->default_search_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Let the default search domain require reset, no extensions need to be
- // disabled.
- {
- ModelPointer model = CreateModel({kDefaultSearchUrl});
- EXPECT_EQ(model->default_search_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Load an extension that does not override settings. Search still needs to be
- // reset, no extensions need to be disabled.
- const Extension* safe_extension = nullptr;
- LoadManifest(kManifestNoOverride, &safe_extension);
- {
- ModelPointer model = CreateModel({kDefaultSearchUrl});
- EXPECT_EQ(model->default_search_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
-// Some tests should run only on platforms where settings override for
-// extensions is available. See comment at the top for more details.
-#if defined(OS_WIN) || defined(OS_MACOSX)
- // Load extension that overrides search. Search no longer needs to be reset.
- const Extension* search_extension1 = nullptr;
- LoadSearchExtension(kSearchUrl1, &search_extension1);
- {
- ModelPointer model = CreateModel({kDefaultSearchUrl});
- EXPECT_EQ(
- model->default_search_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Let the domain used by the extension require reset. Search now needs to be
- // reset, one extension needs to be disabled.
- {
- ModelPointer model = CreateModel({kDefaultSearchUrl, kSearchUrl1});
- EXPECT_EQ(model->default_search_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->extensions_to_disable(),
- ElementsAre(Pair(search_extension1->id(), _)));
- }
-
- // Add a second search overriding extension. Search no longer needs to be
- // reset, no extensions need to be disabled.
- const Extension* search_extension2 = nullptr;
- LoadSearchExtension(kSearchUrl2, &search_extension2);
- {
- ModelPointer model = CreateModel({kDefaultSearchUrl, kSearchUrl1});
- EXPECT_EQ(
- model->default_search_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Let the domain used by the second extension require reset. Search needs to
- // be reset again, and both extensions need to be disabled.
- {
- ModelPointer model =
- CreateModel({kDefaultSearchUrl, kSearchUrl1, kSearchUrl2});
- EXPECT_EQ(model->default_search_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->extensions_to_disable(),
- UnorderedElementsAre(Pair(search_extension1->id(), _),
- Pair(search_extension2->id(), _)));
- }
-
- // let only the domain for the second extension require reset. Search still
- // needs to be reset, and both extensions need to be disabled.
- {
- ModelPointer model = CreateModel({kSearchUrl2});
- EXPECT_EQ(model->default_search_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->extensions_to_disable(),
- UnorderedElementsAre(Pair(search_extension1->id(), _),
- Pair(search_extension2->id(), _)));
- }
-#endif // defined(OS_WIN) || defined(OS_MACOSX)
-}
-
-IN_PROC_BROWSER_TEST_F(SettingsResetPromptModelBrowserTest,
- ExtensionsToDisable_StartupUrls) {
- // Startup urls do not require reset to begin with.
- {
- ModelPointer model = CreateModel();
- EXPECT_EQ(
- model->startup_urls_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_THAT(model->startup_urls(),
- UnorderedElementsAre(GURL(kDefaultStartupUrl1),
- GURL(kDefaultStartupUrl2)));
- EXPECT_THAT(model->startup_urls_to_reset(), IsEmpty());
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Let a default startup URL require reset, no extensions need to be disabled.
- {
- ModelPointer model = CreateModel({kDefaultStartupUrl1});
- EXPECT_EQ(model->startup_urls_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->startup_urls(),
- UnorderedElementsAre(GURL(kDefaultStartupUrl1),
- GURL(kDefaultStartupUrl2)));
- EXPECT_THAT(model->startup_urls_to_reset(),
- ElementsAre(GURL(kDefaultStartupUrl1)));
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Load an extension that does not override settings. Startup URLs still needs
- // to be reset, no extensions need to be disabled.
- const Extension* safe_extension = nullptr;
- LoadManifest(kManifestNoOverride, &safe_extension);
- {
- ModelPointer model = CreateModel({kDefaultStartupUrl1});
- EXPECT_EQ(model->startup_urls_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->startup_urls(),
- UnorderedElementsAre(GURL(kDefaultStartupUrl1),
- GURL(kDefaultStartupUrl2)));
- EXPECT_THAT(model->startup_urls_to_reset(),
- ElementsAre(GURL(kDefaultStartupUrl1)));
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
-// Some tests should run only on platforms where settings override for
-// extensions is available. See comment at the top for more details.
-#if defined(OS_WIN) || defined(OS_MACOSX)
- // Load two other extensions that each override startup urls.
- const Extension* startup_url_extension1 = nullptr;
- LoadStartupUrlExtension(kStartupUrl1, &startup_url_extension1);
- const Extension* startup_url_extension2 = nullptr;
- LoadStartupUrlExtension(kStartupUrl2, &startup_url_extension2);
-
- // Startup URLs should not require reset when a default startup URL that is
- // not active (since it is now overridden by an extension) requires reset.
- {
- ModelPointer model = CreateModel({kDefaultStartupUrl1});
- EXPECT_EQ(
- model->startup_urls_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_THAT(model->startup_urls(), ElementsAre(GURL(kStartupUrl2)));
- EXPECT_THAT(model->startup_urls_to_reset(), IsEmpty());
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Let the first extension's URL require reset. Startup URLs do not need to be
- // reset because the second extension's URL is the active one and does not
- // require reset.
- {
- ModelPointer model = CreateModel({kStartupUrl1});
- EXPECT_EQ(
- model->startup_urls_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_THAT(model->startup_urls(), ElementsAre(GURL(kStartupUrl2)));
- EXPECT_THAT(model->startup_urls_to_reset(), IsEmpty());
- EXPECT_THAT(model->extensions_to_disable(), IsEmpty());
- }
-
- // Let the second extension's URL also require reset. Startup URLs now need to
- // be reset and both extensions need to be disabled.
- {
- ModelPointer model = CreateModel({kStartupUrl1, kStartupUrl2});
- EXPECT_EQ(model->startup_urls_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->startup_urls(), ElementsAre(GURL(kStartupUrl2)));
- EXPECT_THAT(model->startup_urls_to_reset(),
- ElementsAre(GURL(kStartupUrl2)));
- EXPECT_THAT(model->extensions_to_disable(),
- UnorderedElementsAre(Pair(startup_url_extension1->id(), _),
- Pair(startup_url_extension2->id(), _)));
- }
-
- // Both extensions need to be disabled even when only the second extension's
- // URL requires reset.
- {
- ModelPointer model = CreateModel({kStartupUrl2});
- EXPECT_EQ(model->startup_urls_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
- EXPECT_THAT(model->startup_urls(), ElementsAre(GURL(kStartupUrl2)));
- EXPECT_THAT(model->startup_urls_to_reset(),
- ElementsAre(GURL(kStartupUrl2)));
- EXPECT_THAT(model->extensions_to_disable(),
- UnorderedElementsAre(Pair(startup_url_extension1->id(), _),
- Pair(startup_url_extension2->id(), _)));
- }
-#endif // defined(OS_WIN) || defined(OS_MACOSX)
-}
-
-// Some tests should run only on platforms where settings override for
-// extensions is available. See comment at the top for more details.
-#if defined(OS_WIN) || defined(OS_MACOSX)
-IN_PROC_BROWSER_TEST_F(SettingsResetPromptModelBrowserTest,
- PerformReset_DefaultSearch) {
- // Load an extension that does not override settings and two extensions that
- // override default search.
- const Extension* safe_extension = nullptr;
- LoadManifest(kManifestNoOverride, &safe_extension);
- const Extension* default_search_extension1 = nullptr;
- LoadSearchExtension(kSearchUrl1, &default_search_extension1);
- const Extension* default_search_extension2 = nullptr;
- LoadSearchExtension(kSearchUrl2, &default_search_extension2);
-
- ProfileResetter::ResettableFlags expected_reset_flags =
- ProfileResetter::DEFAULT_SEARCH_ENGINE;
- auto mock_resetter =
- base::MakeUnique<NiceMock<MockProfileResetter>>(profile());
- EXPECT_CALL(*mock_resetter.get(), MockReset(expected_reset_flags, _, _))
- .Times(1);
- ModelPointer model = CreateModel({kSearchUrl2}, std::move(mock_resetter));
-
- EXPECT_TRUE(model->ShouldPromptForReset());
- EXPECT_THAT(model->extensions_to_disable(),
- UnorderedElementsAre(Pair(default_search_extension1->id(), _),
- Pair(default_search_extension2->id(), _)));
- EXPECT_EQ(model->default_search_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
-
- // The |PerformReset()| function uses |ExtensionService| directly to disable
- // extensions so that we can expect the extensions to be disabled after the
- // reset even though we are mocking the |ProfileResetter|.
- model->PerformReset(
- base::Bind(&SettingsResetPromptModelBrowserTest::OnResetDone,
- base::Unretained(this)));
- base::RunLoop().RunUntilIdle();
- EXPECT_EQ(reset_callbacks_, 1);
-
- // After the reset, should no longer need any resets and all
- // settings-overriding extensions should be disabled.
- ModelPointer model2 = CreateModel({kSearchUrl2});
-
- EXPECT_FALSE(model2->ShouldPromptForReset());
- EXPECT_EQ(
- model2->default_search_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_FALSE(
- extension_service()->IsExtensionEnabled(default_search_extension1->id()));
- EXPECT_FALSE(
- extension_service()->IsExtensionEnabled(default_search_extension2->id()));
- EXPECT_TRUE(extension_service()->IsExtensionEnabled(safe_extension->id()));
-}
-
-IN_PROC_BROWSER_TEST_F(SettingsResetPromptModelBrowserTest,
- PerformReset_StartupUrls) {
- // Load an extension that does not override settings and two extensions that
- // override startup URLs.
- const Extension* safe_extension = nullptr;
- LoadManifest(kManifestNoOverride, &safe_extension);
- const Extension* startup_urls_extension1 = nullptr;
- LoadStartupUrlExtension(kStartupUrl1, &startup_urls_extension1);
- const Extension* startup_urls_extension2 = nullptr;
- LoadStartupUrlExtension(kStartupUrl2, &startup_urls_extension2);
-
- ProfileResetter::ResettableFlags expected_reset_flags =
- ProfileResetter::STARTUP_PAGES;
- auto mock_resetter =
- base::MakeUnique<NiceMock<MockProfileResetter>>(profile());
- EXPECT_CALL(*mock_resetter.get(), MockReset(expected_reset_flags, _, _))
- .Times(1);
- ModelPointer model = CreateModel({kStartupUrl2}, std::move(mock_resetter));
-
- EXPECT_TRUE(model->ShouldPromptForReset());
- EXPECT_THAT(model->extensions_to_disable(),
- UnorderedElementsAre(Pair(startup_urls_extension1->id(), _),
- Pair(startup_urls_extension2->id(), _)));
- EXPECT_EQ(model->startup_urls_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
-
- // The |PerformReset()| function uses |ExtensionService| directly to disable
- // extensions so that we can expect the extensions to be disabled after the
- // reset even though we are mocking the |ProfileResetter|.
- model->PerformReset(
- base::Bind(&SettingsResetPromptModelBrowserTest::OnResetDone,
- base::Unretained(this)));
- base::RunLoop().RunUntilIdle();
- EXPECT_EQ(reset_callbacks_, 1);
-
- // After the reset, should no longer need any resets and all
- // settings-overriding extensions should be disabled.
- ModelPointer model2 = CreateModel({kStartupUrl2});
-
- EXPECT_FALSE(model2->ShouldPromptForReset());
- EXPECT_EQ(
- model2->startup_urls_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_FALSE(
- extension_service()->IsExtensionEnabled(startup_urls_extension1->id()));
- EXPECT_FALSE(
- extension_service()->IsExtensionEnabled(startup_urls_extension2->id()));
- EXPECT_TRUE(extension_service()->IsExtensionEnabled(safe_extension->id()));
-}
-
-IN_PROC_BROWSER_TEST_F(SettingsResetPromptModelBrowserTest,
- PerformReset_Homepage) {
- // Load an extension that does not override settings and two extensions that
- // override startup URLs.
- const Extension* safe_extension = nullptr;
- LoadManifest(kManifestNoOverride, &safe_extension);
- const Extension* homepage_extension1 = nullptr;
- LoadHomepageExtension(kHomepage1, &homepage_extension1);
- const Extension* homepage_extension2 = nullptr;
- LoadHomepageExtension(kHomepage2, &homepage_extension2);
-
- ProfileResetter::ResettableFlags expected_reset_flags =
- ProfileResetter::HOMEPAGE;
- auto mock_resetter =
- base::MakeUnique<NiceMock<MockProfileResetter>>(profile());
- EXPECT_CALL(*mock_resetter.get(), MockReset(expected_reset_flags, _, _))
- .Times(1);
- ModelPointer model = CreateModel({kHomepage2}, std::move(mock_resetter));
-
- EXPECT_TRUE(model->ShouldPromptForReset());
- EXPECT_THAT(model->extensions_to_disable(),
- UnorderedElementsAre(Pair(homepage_extension1->id(), _),
- Pair(homepage_extension2->id(), _)));
- EXPECT_EQ(model->homepage_reset_state(),
- SettingsResetPromptModel::RESET_REQUIRED);
-
- // The |PerformReset()| function uses |ExtensionService| directly to disable
- // extensions so that we can expect the extensions to be disabled after the
- // reset even though we are mocking the |ProfileResetter|.
- model->PerformReset(
- base::Bind(&SettingsResetPromptModelBrowserTest::OnResetDone,
- base::Unretained(this)));
- base::RunLoop().RunUntilIdle();
- EXPECT_EQ(reset_callbacks_, 1);
-
- // After the reset, should no longer need any resets and all
- // settings-overriding extensions should be disabled.
- ModelPointer model2 = CreateModel({kHomepage2});
-
- EXPECT_FALSE(model2->ShouldPromptForReset());
- EXPECT_EQ(
- model2->homepage_reset_state(),
- SettingsResetPromptModel::NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED);
- EXPECT_FALSE(
- extension_service()->IsExtensionEnabled(homepage_extension1->id()));
- EXPECT_FALSE(
- extension_service()->IsExtensionEnabled(homepage_extension2->id()));
- EXPECT_TRUE(extension_service()->IsExtensionEnabled(safe_extension->id()));
-}
-
-const char kManifestToOverrideAll[] =
- "{"
- " 'name': 'Override All Extension',"
- " 'version': '0.1',"
- " 'manifest_version': 2,"
- " 'chrome_settings_overrides': {"
- " 'homepage': '%s',"
- " 'search_provider': {"
- " 'name': 'name',"
- " 'keyword': 'keyword',"
- " 'search_url': '%s',"
- " 'favicon_url': 'http://someplace.com/favicon.ico',"
- " 'encoding': 'UTF-8',"
- " 'is_default': true"
- " },"
- " 'startup_pages': ['%s']"
- " }"
- "}";
-
-class ExtensionSettingsOverrideTest
- : public SettingsResetPromptModelBrowserTest,
- public testing::WithParamInterface<testing::tuple<bool, bool, bool>> {
- protected:
- void SetUpOnMainThread() override {
- SettingsResetPromptModelBrowserTest::SetUpOnMainThread();
- homepage_matches_config_ = testing::get<0>(GetParam());
- default_search_matches_config_ = testing::get<1>(GetParam());
- startup_urls_matches_config_ = testing::get<2>(GetParam());
-
- // Always set up these extensions, but only require reset for their URLs
- // based on the parameters of the test:
- //
- // - 1 extension that overrides all three settings.
- // - 2 Homepage-overriding extensions;
- // - 2 Search-overriding extensions; and
- // - 2 Startup URLs-overriding extensions.
- //
- // For each setting, the value set by the last installed extension that
- // overrides that setting will be the value set in preferences.
- std::string override_all_manifest =
- base::StringPrintf(kManifestToOverrideAll, "http://all-homepage.com",
- "http://all-search.com", "http://all-startup.com");
- LoadManifest(override_all_manifest, &overrides_all_);
- LoadHomepageExtension(kHomepage1, &homepage1_);
- LoadHomepageExtension(kHomepage2, &homepage2_);
- LoadSearchExtension(kSearchUrl1, &default_search1_);
- LoadSearchExtension(kSearchUrl2, &default_search2_);
- LoadStartupUrlExtension(kStartupUrl1, &startup_urls1_);
- LoadStartupUrlExtension(kStartupUrl2, &startup_urls2_);
- }
-
- bool homepage_matches_config_;
- bool default_search_matches_config_;
- bool startup_urls_matches_config_;
- const Extension* overrides_all_;
- const Extension* homepage1_;
- const Extension* homepage2_;
- const Extension* default_search1_;
- const Extension* default_search2_;
- const Extension* startup_urls1_;
- const Extension* startup_urls2_;
-};
-
-IN_PROC_BROWSER_TEST_P(ExtensionSettingsOverrideTest, ExtensionsToDisable) {
- // Prepare the reset URLs based on the test parameters.
- std::unordered_set<std::string> reset_urls;
- if (homepage_matches_config_)
- reset_urls.insert(kHomepage2);
- if (default_search_matches_config_)
- reset_urls.insert(kSearchUrl2);
- if (startup_urls_matches_config_)
- reset_urls.insert(kStartupUrl2);
-
- {
- ModelPointer model = CreateModel(reset_urls);
- EXPECT_EQ(model->homepage(), GURL(kHomepage2));
- EXPECT_EQ(model->default_search(), GURL(kSearchUrl2));
- EXPECT_THAT(model->startup_urls(), ElementsAre(GURL(kStartupUrl2)));
- if (startup_urls_matches_config_) {
- EXPECT_THAT(model->startup_urls_to_reset(),
- ElementsAre(GURL(kStartupUrl2)));
- } else {
- EXPECT_THAT(model->startup_urls_to_reset(), IsEmpty());
- }
-
- // We can assume that the model correctly determines which setting requires
- // reset, since that is tested in the model's unit tests.
- std::unordered_set<extensions::ExtensionId> expected_extension_ids;
- if (model->homepage_reset_state() ==
- SettingsResetPromptModel::RESET_REQUIRED) {
- expected_extension_ids.insert(homepage1_->id());
- expected_extension_ids.insert(homepage2_->id());
- expected_extension_ids.insert(overrides_all_->id());
- }
- if (model->default_search_reset_state() ==
- SettingsResetPromptModel::RESET_REQUIRED) {
- expected_extension_ids.insert(default_search1_->id());
- expected_extension_ids.insert(default_search2_->id());
- expected_extension_ids.insert(overrides_all_->id());
- }
- if (model->startup_urls_reset_state() ==
- SettingsResetPromptModel::RESET_REQUIRED) {
- expected_extension_ids.insert(startup_urls1_->id());
- expected_extension_ids.insert(startup_urls2_->id());
- expected_extension_ids.insert(overrides_all_->id());
- }
-
- std::unordered_set<extensions::ExtensionId> actual_extension_ids;
- for (const auto& pair : model->extensions_to_disable())
- actual_extension_ids.insert(pair.first);
-
- EXPECT_EQ(actual_extension_ids, expected_extension_ids);
- }
-}
-
-INSTANTIATE_TEST_CASE_P(SettingsResetPromptModel,
- ExtensionSettingsOverrideTest,
- Combine(Bool(), Bool(), Bool()));
-#endif // defined(OS_WIN) || defined(OS_MACOSX)
-
-} // namespace
-} // namespace safe_browsing

Powered by Google App Engine
This is Rietveld 408576698