| 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..19da7965d3321ec5bbee2630527deba3d3a8f09f 100644
|
| --- a/chrome/browser/profiles/host_zoom_map_browsertest.cc
|
| +++ b/chrome/browser/profiles/host_zoom_map_browsertest.cc
|
| @@ -21,6 +21,7 @@
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| +#include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
|
| #include "chrome/common/chrome_constants.h"
|
| #include "chrome/common/chrome_paths.h"
|
| #include "chrome/common/pref_names.h"
|
| @@ -75,8 +76,7 @@ class HostZoomMapBrowserTest : public InProcessBrowserTest {
|
|
|
| protected:
|
| void SetDefaultZoomLevel(double level) {
|
| - browser()->profile()->GetPrefs()->SetDouble(
|
| - prefs::kDefaultZoomLevel, level);
|
| + browser()->profile()->GetZoomLevelPrefs()->SetDefaultZoomLevelPref(level);
|
| }
|
|
|
| double GetZoomLevel(const GURL& url) {
|
| @@ -103,8 +103,10 @@ class HostZoomMapBrowserTest : public InProcessBrowserTest {
|
|
|
| std::vector<std::string> GetHostsWithZoomLevelsFromPrefs() {
|
| PrefService* prefs = browser()->profile()->GetPrefs();
|
| - const base::DictionaryValue* values =
|
| + const base::DictionaryValue* dictionaries =
|
| prefs->GetDictionary(prefs::kPerHostZoomLevels);
|
| + const base::DictionaryValue* values = NULL;
|
| + dictionaries->GetDictionary("0", &values);
|
| std::vector<std::string> results;
|
| if (values) {
|
| for (base::DictionaryValue::Iterator it(*values);
|
| @@ -137,24 +139,15 @@ class HostZoomMapBrowserTest : public InProcessBrowserTest {
|
| DISALLOW_COPY_AND_ASSIGN(HostZoomMapBrowserTest);
|
| };
|
|
|
| -class HostZoomMapSanitizationBrowserTest : public HostZoomMapBrowserTest {
|
| +class HostZoomMapBrowserTestWithPrefs : public HostZoomMapBrowserTest {
|
| public:
|
| - HostZoomMapSanitizationBrowserTest() {}
|
| + explicit HostZoomMapBrowserTestWithPrefs(const std::string& prefs_data)
|
| + : prefs_data_(prefs_data) {}
|
|
|
| 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);
|
| @@ -162,10 +155,36 @@ class HostZoomMapSanitizationBrowserTest : public HostZoomMapBrowserTest {
|
| .AppendASCII(TestingProfile::kTestUserProfileDir)
|
| .Append(chrome::kPreferencesFilename);
|
| 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;
|
| }
|
|
|
| + std::string prefs_data_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(HostZoomMapBrowserTestWithPrefs);
|
| +};
|
| +
|
| +// 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 base::FilePath::CharType kSanitizationTestPrefs[] =
|
| + "{'partition': {"
|
| + " 'default_zoom_level': { '0': 1.2 },"
|
| + " 'per_host_zoom_levels': {"
|
| + " '0': { '': 1.1, 'host1': 1.20001, 'host2': 1.3 }"
|
| + " }"
|
| + "}}";
|
| +
|
| +class HostZoomMapSanitizationBrowserTest
|
| + : public HostZoomMapBrowserTestWithPrefs {
|
| + public:
|
| + HostZoomMapSanitizationBrowserTest()
|
| + : HostZoomMapBrowserTestWithPrefs(kSanitizationTestPrefs) {}
|
| +
|
| + private:
|
| DISALLOW_COPY_AND_ASSIGN(HostZoomMapSanitizationBrowserTest);
|
| };
|
|
|
| @@ -216,3 +235,90 @@ IN_PROC_BROWSER_TEST_F(HostZoomMapSanitizationBrowserTest, ClearOnStartup) {
|
| EXPECT_THAT(GetHostsWithZoomLevels(), testing::ElementsAre("host2"));
|
| EXPECT_THAT(GetHostsWithZoomLevelsFromPrefs(), testing::ElementsAre("host2"));
|
| }
|
| +
|
| +// In this case we migrate the zoom level data from the profile prefs.
|
| +const char kMigrationTestPrefs[] =
|
| + "{'profile': {"
|
| + " 'default_zoom_level': 1.2,"
|
| + " 'per_host_zoom_levels': {'': 1.1, 'host1': 1.20001, 'host2': "
|
| + "1.3}"
|
| + "}}";
|
| +
|
| +class HostZoomMapMigrationBrowserTest : public HostZoomMapBrowserTestWithPrefs {
|
| + public:
|
| + HostZoomMapMigrationBrowserTest()
|
| + : HostZoomMapBrowserTestWithPrefs(kMigrationTestPrefs) {}
|
| +
|
| + static const double kOriginalDefaultZoomLevel;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(HostZoomMapMigrationBrowserTest);
|
| +};
|
| +
|
| +const double HostZoomMapMigrationBrowserTest::kOriginalDefaultZoomLevel = 1.2;
|
| +
|
| +// 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();
|
| + chrome::ChromeZoomLevelPrefs* 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->GetDefaultZoomLevelPref());
|
| +
|
| + // 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.
|
| + SetDefaultZoomLevel(kNewDefaultZoomLevel);
|
| + observer.BlockUntilZoomLevelForHostHasChanged(test_url.host());
|
| + EXPECT_TRUE(
|
| + content::ZoomValuesEqual(kNewDefaultZoomLevel, GetZoomLevel(test_url)));
|
| + EXPECT_EQ(kNewDefaultZoomLevel, zoom_level_prefs->GetDefaultZoomLevelPref());
|
| + EXPECT_EQ(0.0, profile_prefs->GetDouble(prefs::kProfileDefaultZoomLevel));
|
| +}
|
| +
|
|
|