| Index: chrome/browser/profiles/host_zoom_map_browsertest.cc
|
| diff --git a/chrome/browser/profiles/host_zoom_map_browsertest.cc b/chrome/browser/profiles/host_zoom_map_browsertest.cc
|
| index e14a579048bbc586f142f9d74482c5069cd71ffa..cd4c30fc4af2e5a177cfa590628d82ea8f0bae23 100644
|
| --- a/chrome/browser/profiles/host_zoom_map_browsertest.cc
|
| +++ b/chrome/browser/profiles/host_zoom_map_browsertest.cc
|
| @@ -75,7 +75,7 @@ class HostZoomMapBrowserTest : public InProcessBrowserTest {
|
|
|
| protected:
|
| void SetDefaultZoomLevel(double level) {
|
| - browser()->profile()->GetPrefs()->SetDouble(
|
| + browser()->profile()->GetZoomLevelPrefs()->SetDouble(
|
| prefs::kDefaultZoomLevel, level);
|
| }
|
|
|
| @@ -102,7 +102,7 @@ class HostZoomMapBrowserTest : public InProcessBrowserTest {
|
| }
|
|
|
| std::vector<std::string> GetHostsWithZoomLevelsFromPrefs() {
|
| - PrefService* prefs = browser()->profile()->GetPrefs();
|
| + PrefService* prefs = browser()->profile()->GetZoomLevelPrefs();
|
| const base::DictionaryValue* values =
|
| prefs->GetDictionary(prefs::kPerHostZoomLevels);
|
| std::vector<std::string> results;
|
| @@ -137,35 +137,50 @@ class HostZoomMapBrowserTest : public InProcessBrowserTest {
|
| DISALLOW_COPY_AND_ASSIGN(HostZoomMapBrowserTest);
|
| };
|
|
|
| -class HostZoomMapSanitizationBrowserTest : public HostZoomMapBrowserTest {
|
| +class HostZoomMapBrowserTestWithPrefs : public HostZoomMapBrowserTest {
|
| public:
|
| - HostZoomMapSanitizationBrowserTest() {}
|
| + HostZoomMapBrowserTestWithPrefs() {}
|
| +
|
| + protected:
|
| + std::string prefs_data_;
|
| + std::string prefs_filename_;
|
|
|
| private:
|
| // InProcessBrowserTest:
|
| virtual bool SetUpUserDataDirectory() OVERRIDE {
|
| - // Zoom-related preferences demonstrating the two problems that could be
|
| - // caused by the bug. They incorrectly contain a per-host zoom level for the
|
| - // empty host; and a value for 'host1' that only differs from the default by
|
| - // epsilon. Neither should have been persisted.
|
| - const char kBrokenPrefs[] =
|
| - "{'profile': {"
|
| - " 'default_zoom_level': 1.2,"
|
| - " 'per_host_zoom_levels': {'': 1.1, 'host1': 1.20001, 'host2': 1.3}"
|
| - "}}";
|
| - std::string broken_prefs(kBrokenPrefs);
|
| - std::replace(broken_prefs.begin(), broken_prefs.end(), '\'', '\"');
|
| + std::replace(prefs_data_.begin(), prefs_data_.end(), '\'', '\"');
|
|
|
| base::FilePath user_data_directory, path_to_prefs;
|
| PathService::Get(chrome::DIR_USER_DATA, &user_data_directory);
|
| path_to_prefs = user_data_directory
|
| .AppendASCII(TestingProfile::kTestUserProfileDir)
|
| - .Append(chrome::kPreferencesFilename);
|
| + .Append(prefs_filename_);
|
| base::CreateDirectory(path_to_prefs.DirName());
|
| - base::WriteFile(path_to_prefs, broken_prefs.c_str(), broken_prefs.size());
|
| + base::WriteFile(
|
| + path_to_prefs, prefs_data_.c_str(), prefs_data_.size());
|
| return true;
|
| }
|
|
|
| + DISALLOW_COPY_AND_ASSIGN(HostZoomMapBrowserTestWithPrefs);
|
| +};
|
| +
|
| +class HostZoomMapSanitizationBrowserTest
|
| + : public HostZoomMapBrowserTestWithPrefs {
|
| + public:
|
| + HostZoomMapSanitizationBrowserTest() {
|
| + // Zoom-related preferences demonstrating the two problems that could be
|
| + // caused by the bug. They incorrectly contain a per-host zoom level for the
|
| + // empty host; and a value for 'host1' that only differs from the default by
|
| + // epsilon. Neither should have been persisted.
|
| + prefs_data_ =
|
| + "{'partition': {"
|
| + " 'default_zoom_level': 1.2,"
|
| + " 'per_host_zoom_levels': {'': 1.1, 'host1': 1.20001, 'host2': 1.3}"
|
| + "}}";
|
| + prefs_filename_ = chrome::kZoomLevelPreferencesFilename;
|
| + }
|
| +
|
| + private:
|
| DISALLOW_COPY_AND_ASSIGN(HostZoomMapSanitizationBrowserTest);
|
| };
|
|
|
| @@ -216,3 +231,87 @@ IN_PROC_BROWSER_TEST_F(HostZoomMapSanitizationBrowserTest, ClearOnStartup) {
|
| EXPECT_THAT(GetHostsWithZoomLevels(), testing::ElementsAre("host2"));
|
| EXPECT_THAT(GetHostsWithZoomLevelsFromPrefs(), testing::ElementsAre("host2"));
|
| }
|
| +
|
| +class HostZoomMapMigrationBrowserTest : public HostZoomMapBrowserTestWithPrefs {
|
| + public:
|
| + HostZoomMapMigrationBrowserTest(): kOriginalDefaultZoomLevel(1.2) {
|
| + // In this case we migrate the zoom level data from the profile prefs.
|
| + prefs_data_ =
|
| + "{'profile': {"
|
| + " 'default_zoom_level': 1.2,"
|
| + " 'per_host_zoom_levels': {'': 1.1, 'host1': 1.20001, 'host2': 1.3}"
|
| + "}}";
|
| + prefs_filename_ = chrome::kPreferencesFilename;
|
| + }
|
| +
|
| + const double kOriginalDefaultZoomLevel;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(HostZoomMapMigrationBrowserTest);
|
| +};
|
| +
|
| +// This test is the same as HostZoomMapSanitizationBrowserTest, except that the
|
| +// zoom level data is loaded from the profile prefs, transfered to the
|
| +// zoom-level prefs, and we verify that the profile zoom level prefs are
|
| +// erased in the process. We also test that changes to the host zoom map and the
|
| +// default zoom level don't propagate back to the profile prefs.
|
| +IN_PROC_BROWSER_TEST_F(HostZoomMapMigrationBrowserTest,
|
| + MigrateProfileZoomPreferences) {
|
| + EXPECT_THAT(GetHostsWithZoomLevels(), testing::ElementsAre("host2"));
|
| + EXPECT_THAT(GetHostsWithZoomLevelsFromPrefs(), testing::ElementsAre("host2"));
|
| +
|
| + PrefService* profile_prefs =
|
| + browser()->profile()->GetPrefs();
|
| + PrefService* zoom_level_prefs = browser()->profile()->GetZoomLevelPrefs();
|
| + // Make sure that the profile pref for default zoom level has been set to
|
| + // its default value of 0.0.
|
| + EXPECT_EQ(0.0, profile_prefs->GetDouble(prefs::kProfileDefaultZoomLevel));
|
| + EXPECT_EQ(kOriginalDefaultZoomLevel,
|
| + zoom_level_prefs->GetDouble(prefs::kDefaultZoomLevel));
|
| +
|
| + // Make sure that the profile prefs for per-host zoom levels are erased.
|
| + {
|
| + const base::DictionaryValue* profile_host_zoom_dictionary =
|
| + profile_prefs->GetDictionary(prefs::kProfilePerHostZoomLevels);
|
| + EXPECT_EQ(0UL, profile_host_zoom_dictionary->size());
|
| + }
|
| +
|
| + ZoomLevelChangeObserver observer(browser()->profile());
|
| + content::HostZoomMap* host_zoom_map = static_cast<content::HostZoomMap*>(
|
| + content::HostZoomMap::GetDefaultForBrowserContext(
|
| + browser()->profile()));
|
| +
|
| + // Make sure that a change to a host zoom level doesn't propagate to the
|
| + // profile prefs.
|
| + std::string host3("host3");
|
| + host_zoom_map->SetZoomLevelForHost(host3, 1.3);
|
| + observer.BlockUntilZoomLevelForHostHasChanged(host3);
|
| + EXPECT_THAT(GetHostsWithZoomLevelsFromPrefs(),
|
| + testing::ElementsAre("host2", host3));
|
| + {
|
| + const base::DictionaryValue* profile_host_zoom_dictionary =
|
| + profile_prefs->GetDictionary(prefs::kProfilePerHostZoomLevels);
|
| + EXPECT_EQ(0UL, profile_host_zoom_dictionary->size());
|
| + }
|
| +
|
| + // Make sure a change to the default zoom level doesn't propagate to the
|
| + // profile prefs.
|
| +
|
| + // First, we need a host at the default zoom level to respond when the
|
| + // default zoom level changes.
|
| + const double kNewDefaultZoomLevel = 1.5;
|
| + GURL test_url = ConstructTestServerURL("http://host4:%d/");
|
| + ui_test_utils::NavigateToURL(browser(), test_url);
|
| + EXPECT_TRUE(content::ZoomValuesEqual(kOriginalDefaultZoomLevel,
|
| + GetZoomLevel(test_url)));
|
| +
|
| + // Change the default zoom level and observe.
|
| + zoom_level_prefs->SetDouble(prefs::kDefaultZoomLevel, kNewDefaultZoomLevel);
|
| + observer.BlockUntilZoomLevelForHostHasChanged(test_url.host());
|
| + EXPECT_TRUE(
|
| + content::ZoomValuesEqual(kNewDefaultZoomLevel, GetZoomLevel(test_url)));
|
| + EXPECT_EQ(kNewDefaultZoomLevel,
|
| + zoom_level_prefs->GetDouble(prefs::kDefaultZoomLevel));
|
| + EXPECT_EQ(0.0, profile_prefs->GetDouble(prefs::kProfileDefaultZoomLevel));
|
| +}
|
| +
|
|
|