OLD | NEW |
| (Empty) |
1 // Copyright 2008-2009 Google Inc. | |
2 // | |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
4 // you may not use this file except in compliance with the License. | |
5 // You may obtain a copy of the License at | |
6 // | |
7 // http://www.apache.org/licenses/LICENSE-2.0 | |
8 // | |
9 // Unless required by applicable law or agreed to in writing, software | |
10 // distributed under the License is distributed on an "AS IS" BASIS, | |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 // See the License for the specific language governing permissions and | |
13 // limitations under the License. | |
14 // ======================================================================== | |
15 | |
16 #include "omaha/base/browser_utils.h" | |
17 #include "omaha/base/const_utils.h" | |
18 #include "omaha/base/path.h" | |
19 #include "omaha/base/reg_key.h" | |
20 #include "omaha/base/utils.h" | |
21 #include "omaha/testing/unit_test.h" | |
22 | |
23 namespace omaha { | |
24 | |
25 const CString kRegistryHiveOverrideClasses = | |
26 CString(kRegistryHiveOverrideRoot) + _T("HKCR"); | |
27 | |
28 // GetDefaultBrowserName() uses ::RegOpenCurrentUser, which does not appear to | |
29 // be affected by registry hive overrides. Therefore, in order to test methods | |
30 // that rely on it, the actual value must be replaced. This class saves the | |
31 // value and restores it. If the test is interrupted before TearDown, the | |
32 // default browser may not be correctly registered. | |
33 class BrowserUtilsDefaultBrowserSavedTest : public testing::Test { | |
34 protected: | |
35 virtual void SetUp() { | |
36 if (!RegKey::HasKey(kRegKeyUserDefaultBrowser)) { | |
37 return; | |
38 } | |
39 | |
40 EXPECT_SUCCEEDED(RegKey::GetValue(kRegKeyUserDefaultBrowser, | |
41 NULL, | |
42 &default_browser_name_)); | |
43 } | |
44 | |
45 virtual void TearDown() { | |
46 if (default_browser_name_.IsEmpty()) { | |
47 RegKey::DeleteKey(kRegKeyUserDefaultBrowser); | |
48 return; | |
49 } | |
50 | |
51 EXPECT_SUCCEEDED(RegKey::SetValue(kRegKeyUserDefaultBrowser, | |
52 NULL, | |
53 default_browser_name_)); | |
54 } | |
55 | |
56 CString default_browser_name_; | |
57 }; | |
58 | |
59 class GetLegacyDefaultBrowserInfoTest : public testing::Test { | |
60 protected: | |
61 virtual void SetUp() { | |
62 RegKey::DeleteKey(kRegistryHiveOverrideClasses, true); | |
63 RegKey classes_key; | |
64 ASSERT_HRESULT_SUCCEEDED(classes_key.Create(kRegistryHiveOverrideClasses)); | |
65 ASSERT_HRESULT_SUCCEEDED(::RegOverridePredefKey(HKEY_CLASSES_ROOT, | |
66 classes_key.Key())); | |
67 } | |
68 | |
69 virtual void TearDown() { | |
70 ASSERT_HRESULT_SUCCEEDED(::RegOverridePredefKey(HKEY_CLASSES_ROOT, NULL)); | |
71 ASSERT_HRESULT_SUCCEEDED(RegKey::DeleteKey(kRegistryHiveOverrideClasses, | |
72 true)); | |
73 } | |
74 }; | |
75 | |
76 TEST_F(BrowserUtilsDefaultBrowserSavedTest, GetDefaultBrowserType_IE) { | |
77 if (!ShouldRunLargeTest()) { | |
78 return; | |
79 } | |
80 EXPECT_SUCCEEDED( | |
81 RegKey::SetValue(kRegKeyUserDefaultBrowser, NULL, _T("IeXpLoRe.ExE"))); | |
82 BrowserType type = BROWSER_UNKNOWN; | |
83 EXPECT_SUCCEEDED(GetDefaultBrowserType(&type)); | |
84 EXPECT_EQ(BROWSER_IE, type); | |
85 } | |
86 | |
87 TEST_F(BrowserUtilsDefaultBrowserSavedTest, GetDefaultBrowserType_Firefox) { | |
88 if (!ShouldRunLargeTest()) { | |
89 return; | |
90 } | |
91 EXPECT_SUCCEEDED( | |
92 RegKey::SetValue(kRegKeyUserDefaultBrowser, NULL, _T("FiReFoX.ExE"))); | |
93 BrowserType type = BROWSER_UNKNOWN; | |
94 EXPECT_SUCCEEDED(GetDefaultBrowserType(&type)); | |
95 EXPECT_EQ(BROWSER_FIREFOX, type); | |
96 } | |
97 | |
98 TEST_F(BrowserUtilsDefaultBrowserSavedTest, GetDefaultBrowserType_Chrome) { | |
99 if (!ShouldRunLargeTest()) { | |
100 return; | |
101 } | |
102 EXPECT_SUCCEEDED( | |
103 RegKey::SetValue(kRegKeyUserDefaultBrowser, NULL, _T("ChRoMe.ExE"))); | |
104 BrowserType type = BROWSER_UNKNOWN; | |
105 EXPECT_SUCCEEDED(GetDefaultBrowserType(&type)); | |
106 EXPECT_EQ(BROWSER_CHROME, type); | |
107 } | |
108 | |
109 TEST_F(BrowserUtilsDefaultBrowserSavedTest, GetDefaultBrowserType_Unsupported) { | |
110 if (!ShouldRunLargeTest()) { | |
111 return; | |
112 } | |
113 EXPECT_SUCCEEDED( | |
114 RegKey::SetValue(kRegKeyUserDefaultBrowser, NULL, _T("FoO.ExE"))); | |
115 BrowserType type = BROWSER_UNKNOWN; | |
116 EXPECT_SUCCEEDED(GetDefaultBrowserType(&type)); | |
117 EXPECT_EQ(BROWSER_UNKNOWN, type); | |
118 } | |
119 | |
120 TEST(BrowserUtilsTest, BrowserTypeToProcessName_Unknown) { | |
121 CString exe_name; | |
122 EXPECT_EQ(E_FAIL, BrowserTypeToProcessName(BROWSER_UNKNOWN, &exe_name)); | |
123 EXPECT_TRUE(exe_name.IsEmpty()); | |
124 } | |
125 | |
126 // Writes the default browser to ensure consistent results. | |
127 TEST_F(BrowserUtilsDefaultBrowserSavedTest, BrowserTypeToProcessName_Default) { | |
128 if (!ShouldRunLargeTest()) { | |
129 return; | |
130 } | |
131 EXPECT_SUCCEEDED( | |
132 RegKey::SetValue(kRegKeyUserDefaultBrowser, NULL, _T("IeXpLoRe.ExE"))); | |
133 | |
134 CString default_exe_name; | |
135 EXPECT_SUCCEEDED(GetDefaultBrowserName(&default_exe_name)); | |
136 EXPECT_STREQ(_T("IeXpLoRe.ExE"), default_exe_name); | |
137 | |
138 CString exe_name; | |
139 EXPECT_SUCCEEDED(BrowserTypeToProcessName(BROWSER_DEFAULT, &exe_name)); | |
140 EXPECT_STREQ(_T("IeXpLoRe.ExE"), exe_name); | |
141 } | |
142 | |
143 TEST(BrowserUtilsTest, BrowserTypeToProcessName_Browsers) { | |
144 CString exe_name; | |
145 EXPECT_SUCCEEDED(BrowserTypeToProcessName(BROWSER_IE, &exe_name)); | |
146 EXPECT_STREQ(_T("IEXPLORE.EXE"), exe_name); | |
147 EXPECT_SUCCEEDED(BrowserTypeToProcessName(BROWSER_FIREFOX, &exe_name)); | |
148 EXPECT_STREQ(_T("FIREFOX.EXE"), exe_name); | |
149 EXPECT_SUCCEEDED(BrowserTypeToProcessName(BROWSER_CHROME, &exe_name)); | |
150 EXPECT_STREQ(_T("CHROME.EXE"), exe_name); | |
151 } | |
152 | |
153 TEST(BrowserUtilsTest, BrowserTypeToProcessName_Invalid) { | |
154 CString exe_name; | |
155 ExpectAsserts expect_asserts; | |
156 EXPECT_EQ(E_FAIL, BrowserTypeToProcessName(BROWSER_MAX, &exe_name)); | |
157 EXPECT_TRUE(exe_name.IsEmpty()); | |
158 EXPECT_EQ(E_FAIL, | |
159 BrowserTypeToProcessName(static_cast<BrowserType>(9), &exe_name)); | |
160 EXPECT_TRUE(exe_name.IsEmpty()); | |
161 EXPECT_EQ(E_FAIL, | |
162 BrowserTypeToProcessName(static_cast<BrowserType>(-1), &exe_name)); | |
163 EXPECT_TRUE(exe_name.IsEmpty()); | |
164 } | |
165 | |
166 TEST(BrowserUtilsTest, GetBrowserImagePath_DefaultBrowser) { | |
167 CString browser; | |
168 ASSERT_SUCCEEDED(GetDefaultBrowserName(&browser)); | |
169 | |
170 BrowserType default_type = BROWSER_UNKNOWN; | |
171 if (browser.CompareNoCase(kIeExeName) == 0) { | |
172 default_type = BROWSER_IE; | |
173 } else if (browser.CompareNoCase(kFirefoxExeName) == 0) { | |
174 default_type = BROWSER_FIREFOX; | |
175 } else if (browser.CompareNoCase(kChromeExeName) == 0) { | |
176 default_type = BROWSER_CHROME; | |
177 } | |
178 | |
179 CString exp_browser_path; | |
180 ASSERT_SUCCEEDED(GetDefaultBrowserPath(&exp_browser_path)); | |
181 | |
182 if (default_type == BROWSER_IE) { | |
183 CString path; | |
184 ASSERT_SUCCEEDED(GetBrowserImagePath(BROWSER_IE, &path)); | |
185 | |
186 CString long_name; | |
187 ASSERT_SUCCEEDED(ShortPathToLongPath(path, &long_name)); | |
188 CString exp_long_name; | |
189 ASSERT_SUCCEEDED(ShortPathToLongPath(exp_browser_path, &exp_long_name)); | |
190 ASSERT_STREQ(exp_long_name.MakeLower(), long_name.MakeLower()); | |
191 } else if (default_type == BROWSER_FIREFOX) { | |
192 CString path; | |
193 ASSERT_SUCCEEDED(GetBrowserImagePath(BROWSER_FIREFOX, &path)); | |
194 | |
195 CString long_name; | |
196 ASSERT_SUCCEEDED(ShortPathToLongPath(path, &long_name)); | |
197 CString exp_long_name; | |
198 ASSERT_SUCCEEDED(ShortPathToLongPath(exp_browser_path, &exp_long_name)); | |
199 ASSERT_STREQ(exp_long_name.MakeLower(), long_name.MakeLower()); | |
200 } else if (default_type == BROWSER_CHROME) { | |
201 CString path; | |
202 ASSERT_SUCCEEDED(GetBrowserImagePath(BROWSER_CHROME, &path)); | |
203 | |
204 CString long_name; | |
205 ASSERT_SUCCEEDED(ShortPathToLongPath(path, &long_name)); | |
206 CString exp_long_name; | |
207 ASSERT_SUCCEEDED(ShortPathToLongPath(exp_browser_path, &exp_long_name)); | |
208 ASSERT_STREQ(exp_long_name.MakeLower(), long_name.MakeLower()); | |
209 } | |
210 | |
211 CString path; | |
212 ASSERT_SUCCEEDED(GetBrowserImagePath(BROWSER_DEFAULT, &path)); | |
213 CString long_name; | |
214 ASSERT_SUCCEEDED(ShortPathToLongPath(path, &long_name)); | |
215 CString exp_long_name; | |
216 ASSERT_SUCCEEDED(ShortPathToLongPath(exp_browser_path, &exp_long_name)); | |
217 ASSERT_STREQ(exp_long_name.MakeLower(), long_name.MakeLower()); | |
218 | |
219 ASSERT_FAILED(GetBrowserImagePath(BROWSER_UNKNOWN, &path)); | |
220 } | |
221 | |
222 // Try all browsers to get more test coverage. | |
223 TEST(BrowserUtilsTest, GetBrowserImagePath_AllSupportedBrowsers) { | |
224 if (IsTestRunByLocalSystem()) { | |
225 return; | |
226 } | |
227 | |
228 CString program_files_path; | |
229 EXPECT_SUCCEEDED(GetFolderPath(CSIDL_PROGRAM_FILES | CSIDL_FLAG_DONT_VERIFY, | |
230 &program_files_path)); | |
231 CString path; | |
232 | |
233 HRESULT hr = GetBrowserImagePath(BROWSER_IE, &path); | |
234 if (SUCCEEDED(hr)) { | |
235 EXPECT_EQ(0, path.CompareNoCase(program_files_path + | |
236 _T("\\Internet Explorer\\iexplore.exe"))) | |
237 << _T("Actual path: ") << path.GetString(); | |
238 } else { | |
239 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), hr); | |
240 } | |
241 | |
242 hr = GetBrowserImagePath(BROWSER_FIREFOX, &path); | |
243 if (SUCCEEDED(hr)) { | |
244 EXPECT_TRUE( | |
245 0 == path.CompareNoCase(program_files_path + | |
246 _T("\\Mozilla Firefox\\firefox.exe")) || | |
247 0 == path.CompareNoCase( | |
248 _T("C:\\PROGRA~1\\MOZILL~1\\FIREFOX.EXE")) || | |
249 0 == path.CompareNoCase(program_files_path + | |
250 _T("\\Minefield\\FIREFOX.EXE"))) // Trunk build. | |
251 << _T("Actual path: ") << path.GetString(); | |
252 } else { | |
253 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), hr); | |
254 } | |
255 | |
256 hr = GetBrowserImagePath(BROWSER_CHROME, &path); | |
257 if (SUCCEEDED(hr)) { | |
258 EXPECT_TRUE( | |
259 0 == path.CompareNoCase(program_files_path + | |
260 _T("\\Google\\Chrome\\Application\\chrome.exe")) || | |
261 0 == path.CompareNoCase( | |
262 GetLocalAppDataPath() + | |
263 _T("Google\\Chrome\\Application\\chrome.exe"))) | |
264 << _T("Actual path: ") << path.GetString(); | |
265 } else { | |
266 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), hr); | |
267 } | |
268 } | |
269 | |
270 TEST(BrowserUtilsTest, GetLegacyDefaultBrowserInfo) { | |
271 CString name; | |
272 CString browser_path; | |
273 EXPECT_SUCCEEDED(GetLegacyDefaultBrowserInfo(&name, &browser_path)); | |
274 EXPECT_FALSE(browser_path.IsEmpty()); | |
275 EXPECT_FALSE(name.IsEmpty()); | |
276 } | |
277 | |
278 TEST(BrowserUtilsTest, GetIeFontSize) { | |
279 uint32 font_size = 0; | |
280 const uint32 kMaxFontSize = 4; | |
281 EXPECT_TRUE(SUCCEEDED(GetIeFontSize(&font_size)) || IsTestRunByLocalSystem()); | |
282 EXPECT_LE(font_size, kMaxFontSize); | |
283 } | |
284 | |
285 TEST_F(GetLegacyDefaultBrowserInfoTest, ValidQuotedIE) { | |
286 EXPECT_HRESULT_SUCCEEDED(RegKey::SetValue( | |
287 kRegKeyLegacyDefaultBrowserCommand, | |
288 NULL, | |
289 _T("\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" -nohome"))); | |
290 | |
291 CString name; | |
292 CString browser_path; | |
293 EXPECT_SUCCEEDED(GetLegacyDefaultBrowserInfo(&name, &browser_path)); | |
294 EXPECT_STREQ(_T("C:\\Program Files\\Internet Explorer\\iexplore.exe"), | |
295 browser_path); | |
296 EXPECT_STREQ(_T("iexplore.exe"), name); | |
297 } | |
298 | |
299 TEST_F(GetLegacyDefaultBrowserInfoTest, ValidUnquotedPath) { | |
300 EXPECT_HRESULT_SUCCEEDED(RegKey::SetValue( | |
301 kRegKeyLegacyDefaultBrowserCommand, | |
302 NULL, | |
303 _T("C:\\Program Files\\Internet Explorer\\iexplore.exe"))); | |
304 | |
305 CString name; | |
306 CString browser_path; | |
307 EXPECT_SUCCEEDED(GetLegacyDefaultBrowserInfo(&name, &browser_path)); | |
308 EXPECT_STREQ(_T("C:\\Program Files\\Internet Explorer\\iexplore.exe"), | |
309 browser_path); | |
310 EXPECT_STREQ(_T("iexplore.exe"), name); | |
311 } | |
312 | |
313 TEST_F(GetLegacyDefaultBrowserInfoTest, InvalidNoKey) { | |
314 CString name; | |
315 CString browser_path; | |
316 EXPECT_FAILED(GetLegacyDefaultBrowserInfo(&name, &browser_path)); | |
317 EXPECT_TRUE(browser_path.IsEmpty()); | |
318 EXPECT_TRUE(name.IsEmpty()); | |
319 } | |
320 | |
321 TEST_F(GetLegacyDefaultBrowserInfoTest, InvalidNoValue) { | |
322 EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKey( | |
323 kRegKeyLegacyDefaultBrowserCommand)); | |
324 | |
325 CString name; | |
326 CString browser_path; | |
327 EXPECT_FAILED(GetLegacyDefaultBrowserInfo(&name, &browser_path)); | |
328 EXPECT_TRUE(browser_path.IsEmpty()); | |
329 EXPECT_TRUE(name.IsEmpty()); | |
330 } | |
331 | |
332 TEST_F(GetLegacyDefaultBrowserInfoTest, InvalidPath) { | |
333 EXPECT_HRESULT_SUCCEEDED(RegKey::SetValue( | |
334 kRegKeyLegacyDefaultBrowserCommand, | |
335 NULL, | |
336 _T("\"C:\\Program File\\iexplore.exe\" -nohome"))); | |
337 | |
338 CString name; | |
339 CString browser_path; | |
340 EXPECT_FAILED(GetLegacyDefaultBrowserInfo(&name, &browser_path)); | |
341 EXPECT_TRUE(browser_path.IsEmpty()); | |
342 EXPECT_TRUE(name.IsEmpty()); | |
343 } | |
344 | |
345 TEST_F(GetLegacyDefaultBrowserInfoTest, InvalidUnquotedPath) { | |
346 EXPECT_HRESULT_SUCCEEDED(RegKey::SetValue( | |
347 kRegKeyLegacyDefaultBrowserCommand, | |
348 NULL, | |
349 _T("C:\\Program Files\\Internet Explorer\\iexplore.exe -nohome"))); | |
350 | |
351 CString name; | |
352 CString browser_path; | |
353 EXPECT_FAILED(GetLegacyDefaultBrowserInfo(&name, &browser_path)); | |
354 EXPECT_TRUE(browser_path.IsEmpty()); | |
355 EXPECT_TRUE(name.IsEmpty()); | |
356 } | |
357 | |
358 TEST_F(GetLegacyDefaultBrowserInfoTest, InvalidUnquotedDirectory) { | |
359 EXPECT_HRESULT_SUCCEEDED(RegKey::SetValue( | |
360 kRegKeyLegacyDefaultBrowserCommand, | |
361 NULL, | |
362 _T("C:\\Program Files\\Internet Explorer\\"))); | |
363 | |
364 CString name; | |
365 CString browser_path; | |
366 EXPECT_FAILED(GetLegacyDefaultBrowserInfo(&name, &browser_path)); | |
367 EXPECT_TRUE(browser_path.IsEmpty()); | |
368 EXPECT_TRUE(name.IsEmpty()); | |
369 } | |
370 | |
371 TEST_F(GetLegacyDefaultBrowserInfoTest, InvalidQuotedDirectory) { | |
372 EXPECT_HRESULT_SUCCEEDED(RegKey::SetValue( | |
373 kRegKeyLegacyDefaultBrowserCommand, | |
374 NULL, | |
375 _T("\"C:\\Program Files\\Internet Explorer\\\" -nohome"))); | |
376 | |
377 CString name; | |
378 CString browser_path; | |
379 EXPECT_FAILED(GetLegacyDefaultBrowserInfo(&name, &browser_path)); | |
380 EXPECT_TRUE(browser_path.IsEmpty()); | |
381 EXPECT_TRUE(name.IsEmpty()); | |
382 } | |
383 | |
384 } // namespace omaha | |
385 | |
OLD | NEW |