OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
10 #include "base/json/json_file_value_serializer.h" | 10 #include "base/json/json_file_value_serializer.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 return; | 45 return; |
46 #endif | 46 #endif |
47 | 47 |
48 gfx::Rect bounds = browser()->window()->GetBounds(); | 48 gfx::Rect bounds = browser()->window()->GetBounds(); |
49 gfx::Rect expected_bounds(gfx::Rect(20, 30, 400, 500)); | 49 gfx::Rect expected_bounds(gfx::Rect(20, 30, 400, 500)); |
50 ASSERT_EQ(expected_bounds.ToString(), bounds.ToString()); | 50 ASSERT_EQ(expected_bounds.ToString(), bounds.ToString()); |
51 } | 51 } |
52 | 52 |
53 class PreferenceServiceTest : public InProcessBrowserTest { | 53 class PreferenceServiceTest : public InProcessBrowserTest { |
54 public: | 54 public: |
55 explicit PreferenceServiceTest(bool new_profile) : new_profile_(new_profile) { | |
56 } | |
57 | |
58 bool SetUpUserDataDirectory() override { | 55 bool SetUpUserDataDirectory() override { |
59 base::FilePath user_data_directory; | 56 base::FilePath user_data_directory; |
60 PathService::Get(chrome::DIR_USER_DATA, &user_data_directory); | 57 PathService::Get(chrome::DIR_USER_DATA, &user_data_directory); |
61 | 58 |
62 if (new_profile_) { | 59 original_pref_file_ = ui_test_utils::GetTestFilePath( |
63 original_pref_file_ = ui_test_utils::GetTestFilePath( | 60 base::FilePath() |
64 base::FilePath().AppendASCII("profiles"). | 61 .AppendASCII("profiles") |
65 AppendASCII("window_placement"). | 62 .AppendASCII("window_placement") |
66 AppendASCII("Default"), | 63 .AppendASCII("Default"), |
67 base::FilePath().Append(chrome::kPreferencesFilename)); | 64 base::FilePath().Append(chrome::kPreferencesFilename)); |
68 tmp_pref_file_ = | 65 tmp_pref_file_ = |
69 user_data_directory.AppendASCII(TestingProfile::kTestUserProfileDir); | 66 user_data_directory.AppendASCII(TestingProfile::kTestUserProfileDir); |
70 CHECK(base::CreateDirectory(tmp_pref_file_)); | 67 EXPECT_TRUE(base::CreateDirectory(tmp_pref_file_)); |
71 tmp_pref_file_ = tmp_pref_file_.Append(chrome::kPreferencesFilename); | 68 tmp_pref_file_ = tmp_pref_file_.Append(chrome::kPreferencesFilename); |
72 } else { | |
73 original_pref_file_ = ui_test_utils::GetTestFilePath( | |
74 base::FilePath().AppendASCII("profiles"). | |
75 AppendASCII("window_placement"), | |
76 base::FilePath().Append(chrome::kLocalStateFilename)); | |
77 tmp_pref_file_ = user_data_directory.Append(chrome::kLocalStateFilename); | |
78 } | |
79 | 69 |
80 CHECK(base::PathExists(original_pref_file_)); | 70 EXPECT_TRUE(base::PathExists(original_pref_file_)); |
81 // Copy only the Preferences file if |new_profile_|, or Local State if not, | 71 EXPECT_TRUE(base::CopyFile(original_pref_file_, tmp_pref_file_)); |
82 // and the rest will be automatically created. | |
83 CHECK(base::CopyFile(original_pref_file_, tmp_pref_file_)); | |
84 | 72 |
85 #if defined(OS_WIN) | 73 #if defined(OS_WIN) |
86 // Make the copy writable. On POSIX we assume the umask allows files | 74 // Make the copy writable. On POSIX we assume the umask allows files |
87 // we create to be writable. | 75 // we create to be writable. |
88 CHECK(::SetFileAttributesW(tmp_pref_file_.value().c_str(), | 76 EXPECT_TRUE(::SetFileAttributesW(tmp_pref_file_.value().c_str(), |
89 FILE_ATTRIBUTE_NORMAL)); | 77 FILE_ATTRIBUTE_NORMAL)); |
90 #endif | 78 #endif |
91 return true; | 79 return true; |
92 } | 80 } |
93 | 81 |
94 protected: | 82 protected: |
95 base::FilePath original_pref_file_; | 83 base::FilePath original_pref_file_; |
96 base::FilePath tmp_pref_file_; | 84 base::FilePath tmp_pref_file_; |
97 | |
98 private: | |
99 bool new_profile_; | |
100 }; | 85 }; |
101 | 86 |
102 #if defined(OS_WIN) || defined(OS_MACOSX) | 87 #if defined(OS_WIN) || defined(OS_MACOSX) |
103 // This test verifies that the window position from the prefs file is restored | 88 // This test verifies that the window position from the prefs file is restored |
104 // when the app restores. This doesn't really make sense on Linux, where | 89 // when the app restores. This doesn't really make sense on Linux, where |
105 // the window manager might fight with you over positioning. However, we | 90 // the window manager might fight with you over positioning. However, we |
106 // might be able to make this work on buildbots. | 91 // might be able to make this work on buildbots. |
107 // TODO(port): revisit this. | 92 // TODO(port): revisit this. |
108 | 93 |
109 class PreservedWindowPlacementIsLoaded : public PreferenceServiceTest { | 94 IN_PROC_BROWSER_TEST_F(PreferenceServiceTest, Test) { |
110 public: | |
111 PreservedWindowPlacementIsLoaded() : PreferenceServiceTest(true) { | |
112 } | |
113 }; | |
114 | |
115 IN_PROC_BROWSER_TEST_F(PreservedWindowPlacementIsLoaded, Test) { | |
116 #if defined(OS_WIN) && defined(USE_ASH) | 95 #if defined(OS_WIN) && defined(USE_ASH) |
117 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | 96 // Disable this test in Metro+Ash for now (http://crbug.com/262796). |
118 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 97 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
119 switches::kAshBrowserTests)) | 98 switches::kAshBrowserTests)) |
120 return; | 99 return; |
121 #endif | 100 #endif |
122 | 101 |
123 // The window should open with the new reference profile, with window | 102 // The window should open with the new reference profile, with window |
124 // placement values stored in the user data directory. | 103 // placement values stored in the user data directory. |
125 JSONFileValueSerializer deserializer(original_pref_file_); | 104 JSONFileValueSerializer deserializer(original_pref_file_); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 EXPECT_EQ(right, bounds.x() + bounds.width()); | 136 EXPECT_EQ(right, bounds.x() + bounds.width()); |
158 | 137 |
159 // Find if launched window is maximized. | 138 // Find if launched window is maximized. |
160 bool is_window_maximized = browser()->window()->IsMaximized(); | 139 bool is_window_maximized = browser()->window()->IsMaximized(); |
161 bool is_maximized = false; | 140 bool is_maximized = false; |
162 EXPECT_TRUE(root_dict->GetBoolean(kBrowserWindowPlacement + ".maximized", | 141 EXPECT_TRUE(root_dict->GetBoolean(kBrowserWindowPlacement + ".maximized", |
163 &is_maximized)); | 142 &is_maximized)); |
164 EXPECT_EQ(is_maximized, is_window_maximized); | 143 EXPECT_EQ(is_maximized, is_window_maximized); |
165 } | 144 } |
166 #endif | 145 #endif |
167 | |
168 #if defined(OS_WIN) || defined(OS_MACOSX) | |
169 | |
170 class PreservedWindowPlacementIsMigrated : public PreferenceServiceTest { | |
171 public: | |
172 PreservedWindowPlacementIsMigrated() : PreferenceServiceTest(false) { | |
173 } | |
174 }; | |
175 | |
176 IN_PROC_BROWSER_TEST_F(PreservedWindowPlacementIsMigrated, Test) { | |
177 #if defined(OS_WIN) && defined(USE_ASH) | |
178 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | |
179 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | |
180 switches::kAshBrowserTests)) | |
181 return; | |
182 #endif | |
183 | |
184 // The window should open with the old reference profile, with window | |
185 // placement values stored in Local State. | |
186 | |
187 JSONFileValueSerializer deserializer(original_pref_file_); | |
188 scoped_ptr<base::Value> root(deserializer.Deserialize(NULL, NULL)); | |
189 | |
190 ASSERT_TRUE(root.get()); | |
191 ASSERT_TRUE(root->IsType(base::Value::TYPE_DICTIONARY)); | |
192 | |
193 // Retrieve the screen rect for the launched window | |
194 gfx::Rect bounds = browser()->window()->GetRestoredBounds(); | |
195 | |
196 // Values from old reference profile in Local State should have been | |
197 // correctly migrated to the user's Preferences -- if so, the window | |
198 // should be set to values taken from the user's Local State. | |
199 base::DictionaryValue* root_dict = | |
200 static_cast<base::DictionaryValue*>(root.get()); | |
201 | |
202 // Retrieve the expected rect values from User Preferences, where they | |
203 // should have been migrated from Local State. | |
204 int bottom = 0; | |
205 std::string kBrowserWindowPlacement(prefs::kBrowserWindowPlacement); | |
206 EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".bottom", | |
207 &bottom)); | |
208 EXPECT_EQ(bottom, bounds.y() + bounds.height()); | |
209 | |
210 int top = 0; | |
211 EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".top", | |
212 &top)); | |
213 EXPECT_EQ(top, bounds.y()); | |
214 | |
215 int left = 0; | |
216 EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".left", | |
217 &left)); | |
218 EXPECT_EQ(left, bounds.x()); | |
219 | |
220 int right = 0; | |
221 EXPECT_TRUE(root_dict->GetInteger(kBrowserWindowPlacement + ".right", | |
222 &right)); | |
223 EXPECT_EQ(right, bounds.x() + bounds.width()); | |
224 | |
225 // Find if launched window is maximized. | |
226 bool is_window_maximized = browser()->window()->IsMaximized(); | |
227 bool is_maximized = false; | |
228 EXPECT_TRUE(root_dict->GetBoolean(kBrowserWindowPlacement + ".maximized", | |
229 &is_maximized)); | |
230 EXPECT_EQ(is_maximized, is_window_maximized); | |
231 } | |
232 #endif | |
OLD | NEW |