Index: chrome/browser/prefs/pref_service_uitest.cc |
=================================================================== |
--- chrome/browser/prefs/pref_service_uitest.cc (revision 73335) |
+++ chrome/browser/prefs/pref_service_uitest.cc (working copy) |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2011 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. |
@@ -29,17 +29,27 @@ |
file_util::Delete(tmp_profile_, true); |
file_util::CreateDirectory(tmp_profile_); |
- FilePath reference_pref_file = |
- test_data_directory_ |
+ FilePath reference_pref_file; |
+ if (new_profile_) { |
+ reference_pref_file = test_data_directory_ |
+ .AppendASCII("profiles") |
+ .AppendASCII("window_placement") |
+ .AppendASCII("Default") |
+ .Append(chrome::kPreferencesFilename); |
+ tmp_pref_file_ = tmp_profile_.AppendASCII("Default"); |
+ ASSERT_TRUE(file_util::CreateDirectory(tmp_pref_file_)); |
+ tmp_pref_file_ = tmp_pref_file_.Append(chrome::kPreferencesFilename); |
+ } else { |
+ reference_pref_file = test_data_directory_ |
.AppendASCII("profiles") |
.AppendASCII("window_placement") |
.Append(chrome::kLocalStateFilename); |
+ tmp_pref_file_ = tmp_profile_.Append(chrome::kLocalStateFilename); |
+ } |
- tmp_pref_file_ = tmp_profile_.Append(chrome::kLocalStateFilename); |
- |
ASSERT_TRUE(file_util::PathExists(reference_pref_file)); |
- |
- // Copy only the Local State file, the rest will be automatically created |
+ // Copy only the Preferences file if |new_profile_|, or Local State if not, |
+ // and the rest will be automatically created. |
ASSERT_TRUE(file_util::CopyFile(reference_pref_file, tmp_pref_file_)); |
#if defined(OS_WIN) |
@@ -66,20 +76,21 @@ |
} |
public: |
+ bool new_profile_; |
FilePath tmp_pref_file_; |
FilePath tmp_profile_; |
}; |
-#if defined(OS_WIN) |
+#if !defined(OS_LINUX) |
// This test verifies that the window position from the prefs file is restored |
// when the app restores. This doesn't really make sense on Linux, where |
// the window manager might fight with you over positioning. However, we |
// might be able to make this work on buildbots. |
-// Also, not sure what should happen on the mac. In any case, the code below |
-// (minus the Windows bits) compiles fine on my Linux box now. |
// TODO(port): revisit this. |
TEST_F(PreferenceServiceTest, PreservedWindowPlacementIsLoaded) { |
- // The window should open with the reference profile |
+ // The window should open with the new reference profile, with window |
+ // placement values stored in the user data directory. |
+ new_profile_ = true; |
ASSERT_TRUE(LaunchAppWithProfile()); |
ASSERT_TRUE(file_util::PathExists(tmp_pref_file_)); |
@@ -132,3 +143,66 @@ |
EXPECT_EQ(is_maximized, is_window_maximized); |
} |
#endif |
+ |
+#if !defined(OS_LINUX) |
+TEST_F(PreferenceServiceTest, PreservedWindowPlacementIsMigrated) { |
+ // The window should open with the old reference profile, with window |
+ // placement values stored in Local State. |
+ new_profile_ = false; |
+ ASSERT_TRUE(LaunchAppWithProfile()); |
+ |
+ ASSERT_TRUE(file_util::PathExists(tmp_pref_file_)); |
+ |
+ JSONFileValueSerializer deserializer(tmp_pref_file_); |
+ scoped_ptr<Value> root(deserializer.Deserialize(NULL, NULL)); |
+ |
+ ASSERT_TRUE(root.get()); |
+ ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); |
+ |
+ // Retrieve the screen rect for the launched window |
+ scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); |
+ ASSERT_TRUE(browser.get()); |
+ scoped_refptr<WindowProxy> window(browser->GetWindow()); |
+ ASSERT_TRUE(window.get()); |
+ |
+ gfx::Rect bounds; |
+ ASSERT_TRUE(window->GetBounds(&bounds)); |
+ |
+ // Values from old reference profile in Local State should have been |
+ // correctly migrated to the user's Preferences -- if so, the window |
+ // should be set to values taken from the user's Local State. |
+ DictionaryValue* root_dict = static_cast<DictionaryValue*>(root.get()); |
+ |
+ // Retrieve the expected rect values from User Preferences, where they |
+ // should have been migrated from Local State. |
+ int bottom = 0; |
+ std::string kBrowserWindowPlacement(prefs::kBrowserWindowPlacement); |
+ EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".bottom", |
+ &bottom)); |
+ EXPECT_EQ(bottom, bounds.y() + bounds.height()); |
+ |
+ int top = 0; |
+ EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".top", |
+ &top)); |
+ EXPECT_EQ(top, bounds.y()); |
+ |
+ int left = 0; |
+ EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".left", |
+ &left)); |
+ EXPECT_EQ(left, bounds.x()); |
+ |
+ int right = 0; |
+ EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".right", |
+ &right)); |
+ EXPECT_EQ(right, bounds.x() + bounds.width()); |
+ |
+ // Find if launched window is maximized. |
+ bool is_window_maximized = false; |
+ ASSERT_TRUE(window->IsMaximized(&is_window_maximized)); |
+ bool is_maximized = false; |
+ EXPECT_TRUE(root_dict->GetBoolean(kBrowserWindowPlacement + ".maximized", |
+ &is_maximized)); |
+ EXPECT_EQ(is_maximized, is_window_maximized); |
+} |
+#endif |
+ |