Index: chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc |
diff --git a/chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc b/chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c94b7532fd483beb291bea7f4b0bbb3551eeeb28 |
--- /dev/null |
+++ b/chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc |
@@ -0,0 +1,222 @@ |
+// 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 <initializer_list> |
+#include <map> |
+#include <set> |
+#include <string> |
+#include <vector> |
+ |
+#include "base/callback.h" |
+#include "base/memory/ptr_util.h" |
+#include "chrome/browser/profile_resetter/brandcoded_default_settings.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_controller.h" |
+#include "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model.h" |
+#include "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_test_utils.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/test/test_browser_dialog.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "url/gurl.h" |
+ |
+namespace { |
+ |
+using safe_browsing::MockProfileResetter; |
+using safe_browsing::MockSettingsResetPromptConfig; |
+using testing::_; |
+using testing::ElementsAre; |
+using testing::NiceMock; |
+using testing::Not; |
+using testing::Return; |
+using testing::ReturnRef; |
+ |
+constexpr char kHomepageUrl[] = "http://www.a-homepage.com/some/path"; |
+constexpr char kSearchUrl[] = "http://www.a-search.com/some/path/?q={%s}"; |
+constexpr char kStartupUrl1[] = "http://www.a-startup-1.com/some/path"; |
+constexpr char kStartupUrl2[] = "http://www.a-startup-2.com/some/other/path"; |
+constexpr char kExtensionId1[] = "abcdefghijklmnopabcdefghijklmnop"; |
+constexpr char kExtensionId2[] = "bbcdefghijklmnopabcdefghijklmnop"; |
+constexpr char kExtensionName1[] = "Extensions1"; |
+constexpr char kExtensionName2[] = "Extensions2"; |
+ |
+enum class SettingType { |
+ DEFAULT_SEARCH_ENGINE, |
+ STARTUP_PAGE, |
+ HOMEPAGE, |
+ EXTENSIONS, // Also disable some extensions. |
+}; |
+ |
+class MockSettingsResetPromptModel |
+ : public safe_browsing::SettingsResetPromptModel { |
+ public: |
+ // Create a mock model that pretends that the settings passed in via |
+ // |settings_to_reset| require resetting. |settings_to_reset| must not be |
+ // empty or have |EXTENSIONS| as the only member. |
+ explicit MockSettingsResetPromptModel(Profile* profile, |
+ std::set<SettingType> settings_to_reset) |
+ : SettingsResetPromptModel( |
+ profile, |
+ base::MakeUnique<NiceMock<MockSettingsResetPromptConfig>>(), |
+ base::MakeUnique<ResettableSettingsSnapshot>(profile), |
+ base::MakeUnique<BrandcodedDefaultSettings>(), |
+ base::MakeUnique<NiceMock<MockProfileResetter>>(profile)) { |
+ EXPECT_FALSE(settings_to_reset.empty()); |
+ EXPECT_THAT(settings_to_reset, Not(ElementsAre(SettingType::EXTENSIONS))); |
+ |
+ // Set up startup URLs and extensions to be returned by member functions |
+ // based on which settings should require reset. |
+ startup_urls_.push_back(GURL(kStartupUrl1)); |
+ startup_urls_.push_back(GURL(kStartupUrl2)); |
+ if (settings_to_reset.find(SettingType::STARTUP_PAGE) != |
+ settings_to_reset.end()) |
+ startup_urls_to_reset_ = startup_urls_; |
+ |
+ if (settings_to_reset.find(SettingType::EXTENSIONS) != |
+ settings_to_reset.end()) { |
+ extensions_ = {{kExtensionId1, safe_browsing::ExtensionInfo( |
+ kExtensionId1, kExtensionName1)}, |
+ {kExtensionId2, safe_browsing::ExtensionInfo( |
+ kExtensionId2, kExtensionName2)}}; |
+ } |
+ |
+ ON_CALL(*this, PerformReset(_)).WillByDefault(Return()); |
+ |
+ ON_CALL(*this, ShouldPromptForReset()) |
+ .WillByDefault(Return(!settings_to_reset.empty())); |
+ |
+ ON_CALL(*this, homepage()).WillByDefault(Return(GURL(kHomepageUrl))); |
+ ON_CALL(*this, homepage_reset_state()) |
+ .WillByDefault( |
+ Return(ChooseResetState(settings_to_reset, SettingType::HOMEPAGE))); |
+ |
+ ON_CALL(*this, default_search()).WillByDefault(Return(GURL(kSearchUrl))); |
+ ON_CALL(*this, default_search_reset_state()) |
+ .WillByDefault(Return(ChooseResetState( |
+ settings_to_reset, SettingType::DEFAULT_SEARCH_ENGINE))); |
+ |
+ ON_CALL(*this, startup_urls()).WillByDefault(ReturnRef(startup_urls_)); |
+ ON_CALL(*this, startup_urls_to_reset()) |
+ .WillByDefault(ReturnRef(startup_urls_to_reset_)); |
+ ON_CALL(*this, startup_urls_reset_state()) |
+ .WillByDefault(Return( |
+ ChooseResetState(settings_to_reset, SettingType::STARTUP_PAGE))); |
+ |
+ ON_CALL(*this, extensions_to_disable()) |
+ .WillByDefault(ReturnRef(extensions_)); |
+ } |
+ ~MockSettingsResetPromptModel() override {} |
+ |
+ MOCK_METHOD1(PerformReset, void(const base::Closure&)); |
+ MOCK_CONST_METHOD0(ShouldPromptForReset, bool()); |
+ MOCK_CONST_METHOD0(homepage, GURL()); |
+ MOCK_CONST_METHOD0(homepage_reset_state, ResetState()); |
+ MOCK_CONST_METHOD0(default_search, GURL()); |
+ MOCK_CONST_METHOD0(default_search_reset_state, ResetState()); |
+ MOCK_CONST_METHOD0(startup_urls, const std::vector<GURL>&()); |
+ MOCK_CONST_METHOD0(startup_urls_to_reset, const std::vector<GURL>&()); |
+ MOCK_CONST_METHOD0(startup_urls_reset_state, ResetState()); |
+ MOCK_CONST_METHOD0(extensions_to_disable, const ExtensionMap&()); |
+ |
+ private: |
+ static ResetState ChooseResetState(const std::set<SettingType>& settings, |
+ SettingType setting) { |
+ if (settings.find(setting) != settings.end()) |
+ return RESET_REQUIRED; |
+ return NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED; |
+ } |
+ |
+ std::vector<GURL> startup_urls_; |
+ std::vector<GURL> startup_urls_to_reset_; |
+ ExtensionMap extensions_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MockSettingsResetPromptModel); |
+}; |
+ |
+class SettingsResetPromptDialogTest : public DialogBrowserTest { |
+ public: |
+ void ShowDialog(const std::string& name) override { |
+ const std::map<std::string, std::set<SettingType>> name_to_settings = { |
+ {"dse", {SettingType::DEFAULT_SEARCH_ENGINE}}, |
+ {"sp", {SettingType::STARTUP_PAGE}}, |
+ {"hp", {SettingType::HOMEPAGE}}, |
+ {"dse_sp", |
+ {SettingType::DEFAULT_SEARCH_ENGINE, SettingType::STARTUP_PAGE}}, |
+ {"dse_hp", {SettingType::DEFAULT_SEARCH_ENGINE, SettingType::HOMEPAGE}}, |
+ {"sp_hp", {SettingType::STARTUP_PAGE, SettingType::HOMEPAGE}}, |
+ {"dse_sp_hp", |
+ {SettingType::DEFAULT_SEARCH_ENGINE, SettingType::STARTUP_PAGE, |
+ SettingType::HOMEPAGE}}, |
+ {"dse_ext", |
+ {SettingType::DEFAULT_SEARCH_ENGINE, SettingType::EXTENSIONS}}, |
+ {"sp_ext", {SettingType::STARTUP_PAGE, SettingType::EXTENSIONS}}, |
+ {"hp_ext", {SettingType::HOMEPAGE, SettingType::EXTENSIONS}}, |
+ {"dse_sp_ext", |
+ {SettingType::DEFAULT_SEARCH_ENGINE, SettingType::STARTUP_PAGE, |
+ SettingType::EXTENSIONS}}, |
+ {"dse_hp_ext", |
+ {SettingType::DEFAULT_SEARCH_ENGINE, SettingType::HOMEPAGE, |
+ SettingType::EXTENSIONS}}, |
+ {"sp_hp_ext", |
+ {SettingType::STARTUP_PAGE, SettingType::HOMEPAGE, |
+ SettingType::EXTENSIONS}}, |
+ {"dse_sp_hp_ext", |
+ {SettingType::DEFAULT_SEARCH_ENGINE, SettingType::STARTUP_PAGE, |
+ SettingType::HOMEPAGE, SettingType::EXTENSIONS}}}; |
+ |
+ auto model = base::MakeUnique<NiceMock<MockSettingsResetPromptModel>>( |
+ browser()->profile(), name_to_settings.find(name)->second); |
+ |
+ safe_browsing::SettingsResetPromptController::ShowSettingsResetPrompt( |
+ browser(), |
+ new safe_browsing::SettingsResetPromptController(std::move(model))); |
+ } |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_dse) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_sp) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_hp) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_dse_sp) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_dse_hp) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_sp_hp) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_dse_sp_hp) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_dse_ext) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_sp_ext) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_hp_ext) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_dse_sp_ext) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_dse_hp_ext) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, InvokeDialog_sp_hp_ext) { |
+ RunDialog(); |
+} |
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest, |
+ InvokeDialog_dse_sp_hp_ext) { |
+ RunDialog(); |
+} |
+ |
+} // namespace |