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)); |
+} |
+ |