| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "base/file_path.h" | 5 #include "base/file_path.h" |
| 6 #include "base/file_version_info.h" | 6 #include "base/file_version_info.h" |
| 7 #include "base/file_version_info_win.h" | 7 #include "base/file_version_info_win.h" |
| 8 #include "base/win/registry.h" | 8 #include "base/win/registry.h" |
| 9 #include "chrome_frame/test/chrome_frame_test_utils.h" |
| 9 #include "chrome_frame/utils.h" | 10 #include "chrome_frame/utils.h" |
| 10 | 11 |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 12 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
| 13 | 14 |
| 14 using base::win::RegKey; | 15 using base::win::RegKey; |
| 16 using chrome_frame_test::TempRegKeyOverride; |
| 15 | 17 |
| 16 const wchar_t kChannelName[] = L"-dev"; | 18 const wchar_t kChannelName[] = L"-dev"; |
| 17 const wchar_t kSuffix[] = L"-fix"; | 19 const wchar_t kSuffix[] = L"-fix"; |
| 18 | 20 |
| 19 TEST(UtilTests, GetModuleVersionTest) { | 21 class UtilTests : public testing::Test { |
| 22 protected: |
| 23 void SetUp() { |
| 24 TempRegKeyOverride::DeleteAllTempKeys(); |
| 25 DeleteAllSingletons(); |
| 26 |
| 27 hklm_pol_.reset(new TempRegKeyOverride(HKEY_LOCAL_MACHINE, L"hklm_fake")); |
| 28 hkcu_pol_.reset(new TempRegKeyOverride(HKEY_CURRENT_USER, L"hkcu_fake")); |
| 29 } |
| 30 |
| 31 void TearDown() { |
| 32 hkcu_pol_.reset(NULL); |
| 33 hklm_pol_.reset(NULL); |
| 34 TempRegKeyOverride::DeleteAllTempKeys(); |
| 35 } |
| 36 |
| 37 // This is used to manage life cycle of PolicySettings singleton. |
| 38 // base::ShadowingAtExitManager at_exit_manager_; |
| 39 scoped_ptr<TempRegKeyOverride> hklm_pol_; |
| 40 scoped_ptr<TempRegKeyOverride> hkcu_pol_; |
| 41 }; |
| 42 |
| 43 TEST_F(UtilTests, GetModuleVersionTest) { |
| 20 HMODULE mod = GetModuleHandle(L"kernel32.dll"); | 44 HMODULE mod = GetModuleHandle(L"kernel32.dll"); |
| 21 EXPECT_NE(mod, static_cast<HMODULE>(NULL)); | 45 EXPECT_NE(mod, static_cast<HMODULE>(NULL)); |
| 22 wchar_t path[MAX_PATH] = {0}; | 46 wchar_t path[MAX_PATH] = {0}; |
| 23 GetModuleFileName(mod, path, arraysize(path)); | 47 GetModuleFileName(mod, path, arraysize(path)); |
| 24 | 48 |
| 25 // Use the method that goes to disk | 49 // Use the method that goes to disk |
| 26 scoped_ptr<FileVersionInfo> base_info( | 50 scoped_ptr<FileVersionInfo> base_info( |
| 27 FileVersionInfo::CreateFileVersionInfo(path)); | 51 FileVersionInfo::CreateFileVersionInfo(path)); |
| 28 EXPECT_TRUE(base_info.get() != NULL); | 52 EXPECT_TRUE(base_info.get() != NULL); |
| 29 | 53 |
| 30 // Use the method that doesn't go to disk | 54 // Use the method that doesn't go to disk |
| 31 uint32 low = 0, high = 0; | 55 uint32 low = 0, high = 0; |
| 32 EXPECT_TRUE(GetModuleVersion(mod, &high, &low)); | 56 EXPECT_TRUE(GetModuleVersion(mod, &high, &low)); |
| 33 EXPECT_NE(high, 0u); | 57 EXPECT_NE(high, 0u); |
| 34 EXPECT_NE(low, 0u); | 58 EXPECT_NE(low, 0u); |
| 35 | 59 |
| 36 // Make sure they give the same results. | 60 // Make sure they give the same results. |
| 37 FileVersionInfoWin* base_info_win = | 61 FileVersionInfoWin* base_info_win = |
| 38 static_cast<FileVersionInfoWin*>(base_info.get()); | 62 static_cast<FileVersionInfoWin*>(base_info.get()); |
| 39 VS_FIXEDFILEINFO* fixed_info = base_info_win->fixed_file_info(); | 63 VS_FIXEDFILEINFO* fixed_info = base_info_win->fixed_file_info(); |
| 40 EXPECT_TRUE(fixed_info != NULL); | 64 EXPECT_TRUE(fixed_info != NULL); |
| 41 | 65 |
| 42 EXPECT_EQ(fixed_info->dwFileVersionMS, static_cast<DWORD>(high)); | 66 EXPECT_EQ(fixed_info->dwFileVersionMS, static_cast<DWORD>(high)); |
| 43 EXPECT_EQ(fixed_info->dwFileVersionLS, static_cast<DWORD>(low)); | 67 EXPECT_EQ(fixed_info->dwFileVersionLS, static_cast<DWORD>(low)); |
| 44 } | 68 } |
| 45 | 69 |
| 46 TEST(UtilTests, HaveSameOrigin) { | 70 TEST_F(UtilTests, HaveSameOrigin) { |
| 47 struct OriginCompare { | 71 struct OriginCompare { |
| 48 const char* a; | 72 const char* a; |
| 49 const char* b; | 73 const char* b; |
| 50 bool same_origin; | 74 bool same_origin; |
| 51 } test_cases[] = { | 75 } test_cases[] = { |
| 52 { "", "", true }, | 76 { "", "", true }, |
| 53 { "*", "*", true }, | 77 { "*", "*", true }, |
| 54 { "*", "+", false }, | 78 { "*", "+", false }, |
| 55 { "http://www.google.com/", "http://www.google.com/", true }, | 79 { "http://www.google.com/", "http://www.google.com/", true }, |
| 56 { "http://www.google.com", "http://www.google.com/", true }, | 80 { "http://www.google.com", "http://www.google.com/", true }, |
| 57 { "http://www.google.com:80/", "http://www.google.com/", true }, | 81 { "http://www.google.com:80/", "http://www.google.com/", true }, |
| 58 { "http://www.google.com:8080/", "http://www.google.com/", false }, | 82 { "http://www.google.com:8080/", "http://www.google.com/", false }, |
| 59 { "https://www.google.com/", "http://www.google.com/", false }, | 83 { "https://www.google.com/", "http://www.google.com/", false }, |
| 60 { "http://docs.google.com/", "http://www.google.com/", false }, | 84 { "http://docs.google.com/", "http://www.google.com/", false }, |
| 61 { "https://www.google.com/", "https://www.google.com:443/", true }, | 85 { "https://www.google.com/", "https://www.google.com:443/", true }, |
| 62 { "https://www.google.com/", "https://www.google.com:443", true }, | 86 { "https://www.google.com/", "https://www.google.com:443", true }, |
| 63 }; | 87 }; |
| 64 | 88 |
| 65 for (int i = 0; i < arraysize(test_cases); ++i) { | 89 for (int i = 0; i < arraysize(test_cases); ++i) { |
| 66 const OriginCompare& test = test_cases[i]; | 90 const OriginCompare& test = test_cases[i]; |
| 67 EXPECT_EQ(test.same_origin, HaveSameOrigin(test.a, test.b)); | 91 EXPECT_EQ(test.same_origin, HaveSameOrigin(test.a, test.b)); |
| 68 } | 92 } |
| 69 } | 93 } |
| 70 | 94 |
| 71 TEST(UtilTests, IsValidUrlScheme) { | 95 TEST_F(UtilTests, IsValidUrlScheme) { |
| 72 struct Cases { | 96 struct Cases { |
| 73 const wchar_t* url; | 97 const wchar_t* url; |
| 74 bool is_privileged; | 98 bool is_privileged; |
| 75 bool expected; | 99 bool expected; |
| 76 } test_cases[] = { | 100 } test_cases[] = { |
| 77 // non-privileged test cases | 101 // non-privileged test cases |
| 78 { L"http://www.google.ca", false, true }, | 102 { L"http://www.google.ca", false, true }, |
| 79 { L"https://www.google.ca", false, true }, | 103 { L"https://www.google.ca", false, true }, |
| 80 { L"about:config", false, true }, | 104 { L"about:config", false, true }, |
| 81 { L"view-source:http://www.google.ca", false, true }, | 105 { L"view-source:http://www.google.ca", false, true }, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 95 { L"file://C:\boot.ini", true, false }, | 119 { L"file://C:\boot.ini", true, false }, |
| 96 }; | 120 }; |
| 97 | 121 |
| 98 for (int i = 0; i < arraysize(test_cases); ++i) { | 122 for (int i = 0; i < arraysize(test_cases); ++i) { |
| 99 const Cases& test = test_cases[i]; | 123 const Cases& test = test_cases[i]; |
| 100 EXPECT_EQ(test.expected, IsValidUrlScheme(GURL(test.url), | 124 EXPECT_EQ(test.expected, IsValidUrlScheme(GURL(test.url), |
| 101 test.is_privileged)); | 125 test.is_privileged)); |
| 102 } | 126 } |
| 103 } | 127 } |
| 104 | 128 |
| 105 TEST(UtilTests, GuidToString) { | 129 TEST_F(UtilTests, GuidToString) { |
| 106 // {3C5E2125-35BA-48df-A841-5F669B9D69FC} | 130 // {3C5E2125-35BA-48df-A841-5F669B9D69FC} |
| 107 const GUID test_guid = { 0x3c5e2125, 0x35ba, 0x48df, | 131 const GUID test_guid = { 0x3c5e2125, 0x35ba, 0x48df, |
| 108 { 0xa8, 0x41, 0x5f, 0x66, 0x9b, 0x9d, 0x69, 0xfc } }; | 132 { 0xa8, 0x41, 0x5f, 0x66, 0x9b, 0x9d, 0x69, 0xfc } }; |
| 109 | 133 |
| 110 wchar_t compare[64] = {0}; | 134 wchar_t compare[64] = {0}; |
| 111 ::StringFromGUID2(test_guid, compare, arraysize(compare)); | 135 ::StringFromGUID2(test_guid, compare, arraysize(compare)); |
| 112 | 136 |
| 113 std::wstring str_guid(GuidToString(test_guid)); | 137 std::wstring str_guid(GuidToString(test_guid)); |
| 114 EXPECT_EQ(0, str_guid.compare(compare)); | 138 EXPECT_EQ(0, str_guid.compare(compare)); |
| 115 EXPECT_EQ(static_cast<size_t>(lstrlenW(compare)), str_guid.length()); | 139 EXPECT_EQ(static_cast<size_t>(lstrlenW(compare)), str_guid.length()); |
| 116 } | 140 } |
| 117 | 141 |
| 118 TEST(UtilTests, GetTempInternetFiles) { | 142 TEST_F(UtilTests, GetTempInternetFiles) { |
| 119 FilePath path = GetIETemporaryFilesFolder(); | 143 FilePath path = GetIETemporaryFilesFolder(); |
| 120 EXPECT_FALSE(path.empty()); | 144 EXPECT_FALSE(path.empty()); |
| 121 } | 145 } |
| 122 | 146 |
| 123 TEST(UtilTests, ParseAttachTabUrlTest) { | 147 TEST_F(UtilTests, ParseAttachTabUrlTest) { |
| 124 ChromeFrameUrl cf_url; | 148 ChromeFrameUrl cf_url; |
| 125 | 149 |
| 126 static const std::string kProfileName("iexplore"); | 150 static const std::string kProfileName("iexplore"); |
| 127 | 151 |
| 128 EXPECT_TRUE(cf_url.Parse( | 152 EXPECT_TRUE(cf_url.Parse( |
| 129 L"http://f/?attach_external_tab&10&1&2&3&123&321&iexplore")); | 153 L"http://f/?attach_external_tab&10&1&2&3&123&321&iexplore")); |
| 130 | 154 |
| 131 EXPECT_TRUE(cf_url.attach_to_external_tab()); | 155 EXPECT_TRUE(cf_url.attach_to_external_tab()); |
| 132 EXPECT_FALSE(cf_url.is_chrome_protocol()); | 156 EXPECT_FALSE(cf_url.is_chrome_protocol()); |
| 133 EXPECT_EQ(10, cf_url.cookie()); | 157 EXPECT_EQ(10, cf_url.cookie()); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 DWORD reserved)); | 219 DWORD reserved)); |
| 196 MOCK_METHOD7_WITH_CALLTYPE(__stdcall, QueryCustomPolicy, | 220 MOCK_METHOD7_WITH_CALLTYPE(__stdcall, QueryCustomPolicy, |
| 197 HRESULT(LPCWSTR url, REFGUID guid, BYTE** policy, DWORD* cb_policy, | 221 HRESULT(LPCWSTR url, REFGUID guid, BYTE** policy, DWORD* cb_policy, |
| 198 BYTE* context, DWORD cb_context, DWORD reserved)); | 222 BYTE* context, DWORD cb_context, DWORD reserved)); |
| 199 MOCK_METHOD3_WITH_CALLTYPE(__stdcall, SetZoneMapping, | 223 MOCK_METHOD3_WITH_CALLTYPE(__stdcall, SetZoneMapping, |
| 200 HRESULT(DWORD zone, LPCWSTR pattern, DWORD flags)); | 224 HRESULT(DWORD zone, LPCWSTR pattern, DWORD flags)); |
| 201 MOCK_METHOD3_WITH_CALLTYPE(__stdcall, GetZoneMappings, | 225 MOCK_METHOD3_WITH_CALLTYPE(__stdcall, GetZoneMappings, |
| 202 HRESULT(DWORD zone, IEnumString** enum_string, DWORD flags)); | 226 HRESULT(DWORD zone, IEnumString** enum_string, DWORD flags)); |
| 203 }; | 227 }; |
| 204 | 228 |
| 205 TEST(UtilTests, CanNavigateTest) { | 229 TEST_F(UtilTests, CanNavigateTest) { |
| 206 MockIInternetSecurityManager mock; | 230 MockIInternetSecurityManager mock; |
| 207 | 231 |
| 208 struct Zones { | 232 struct Zones { |
| 209 const wchar_t* url_prefix; | 233 const wchar_t* url_prefix; |
| 210 URLZONE zone; | 234 URLZONE zone; |
| 211 } test_zones[] = { | 235 } test_zones[] = { |
| 212 { L"http://blah", URLZONE_INTERNET }, | 236 { L"http://blah", URLZONE_INTERNET }, |
| 213 { L"http://untrusted", URLZONE_UNTRUSTED }, | 237 { L"http://untrusted", URLZONE_UNTRUSTED }, |
| 214 { L"about:", URLZONE_TRUSTED }, | 238 { L"about:", URLZONE_TRUSTED }, |
| 215 { L"view-source:", URLZONE_TRUSTED }, | 239 { L"view-source:", URLZONE_TRUSTED }, |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 | 310 |
| 287 for (int i = 0; i < arraysize(test_cases); ++i) { | 311 for (int i = 0; i < arraysize(test_cases); ++i) { |
| 288 const Cases& test = test_cases[i]; | 312 const Cases& test = test_cases[i]; |
| 289 bool actual = CanNavigate(GURL(test.url), &mock, test.is_privileged); | 313 bool actual = CanNavigate(GURL(test.url), &mock, test.is_privileged); |
| 290 EXPECT_EQ(test.unsafe_expected, actual) << "Failure url: " << test.url; | 314 EXPECT_EQ(test.unsafe_expected, actual) << "Failure url: " << test.url; |
| 291 } | 315 } |
| 292 | 316 |
| 293 SetConfigBool(kAllowUnsafeURLs, enable_gcf); | 317 SetConfigBool(kAllowUnsafeURLs, enable_gcf); |
| 294 } | 318 } |
| 295 | 319 |
| 296 TEST(UtilTests, IsDefaultRendererTest) { | 320 TEST_F(UtilTests, IsDefaultRendererTest) { |
| 297 RegKey config_key(HKEY_CURRENT_USER, kChromeFrameConfigKey, KEY_ALL_ACCESS); | 321 RegKey config_key(HKEY_CURRENT_USER, kChromeFrameConfigKey, KEY_ALL_ACCESS); |
| 298 EXPECT_TRUE(config_key.Valid()); | 322 EXPECT_TRUE(config_key.Valid()); |
| 299 | 323 |
| 300 DWORD saved_default_renderer = 0; // NOLINT | 324 DWORD saved_default_renderer = 0; // NOLINT |
| 301 config_key.ReadValueDW(kEnableGCFRendererByDefault, &saved_default_renderer); | 325 config_key.ReadValueDW(kEnableGCFRendererByDefault, &saved_default_renderer); |
| 302 | 326 |
| 303 config_key.DeleteValue(kEnableGCFRendererByDefault); | 327 config_key.DeleteValue(kEnableGCFRendererByDefault); |
| 304 EXPECT_FALSE(IsGcfDefaultRenderer()); | 328 EXPECT_FALSE(IsGcfDefaultRenderer()); |
| 305 | 329 |
| 306 config_key.WriteValue(kEnableGCFRendererByDefault, static_cast<DWORD>(0)); | 330 config_key.WriteValue(kEnableGCFRendererByDefault, static_cast<DWORD>(0)); |
| 307 EXPECT_FALSE(IsGcfDefaultRenderer()); | 331 EXPECT_FALSE(IsGcfDefaultRenderer()); |
| 308 | 332 |
| 309 config_key.WriteValue(kEnableGCFRendererByDefault, static_cast<DWORD>(1)); | 333 config_key.WriteValue(kEnableGCFRendererByDefault, static_cast<DWORD>(1)); |
| 310 EXPECT_TRUE(IsGcfDefaultRenderer()); | 334 EXPECT_TRUE(IsGcfDefaultRenderer()); |
| 311 | 335 |
| 312 config_key.WriteValue(kEnableGCFRendererByDefault, saved_default_renderer); | 336 config_key.WriteValue(kEnableGCFRendererByDefault, saved_default_renderer); |
| 313 } | 337 } |
| 314 | 338 |
| 315 TEST(UtilTests, RendererTypeForUrlTest) { | 339 TEST_F(UtilTests, RendererTypeForUrlTest) { |
| 316 // Open all the keys we need. | 340 // Open all the keys we need. |
| 317 RegKey config_key(HKEY_CURRENT_USER, kChromeFrameConfigKey, KEY_ALL_ACCESS); | 341 RegKey config_key(HKEY_CURRENT_USER, kChromeFrameConfigKey, KEY_ALL_ACCESS); |
| 318 EXPECT_TRUE(config_key.Valid()); | 342 EXPECT_TRUE(config_key.Valid()); |
| 319 RegKey opt_for_gcf(config_key.Handle(), kRenderInGCFUrlList, KEY_ALL_ACCESS); | 343 RegKey opt_for_gcf(config_key.Handle(), kRenderInGCFUrlList, KEY_ALL_ACCESS); |
| 320 EXPECT_TRUE(opt_for_gcf.Valid()); | 344 EXPECT_TRUE(opt_for_gcf.Valid()); |
| 321 RegKey opt_for_host(config_key.Handle(), kRenderInHostUrlList, | 345 RegKey opt_for_host(config_key.Handle(), kRenderInHostUrlList, |
| 322 KEY_ALL_ACCESS); | 346 KEY_ALL_ACCESS); |
| 323 EXPECT_TRUE(opt_for_host.Valid()); | 347 EXPECT_TRUE(opt_for_host.Valid()); |
| 324 if (!config_key.Valid() || !opt_for_gcf.Valid() || !opt_for_host.Valid()) | 348 if (!config_key.Valid() || !opt_for_gcf.Valid() || !opt_for_host.Valid()) |
| 325 return; | 349 return; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 349 RendererTypeForUrl(kTestUrl)); | 373 RendererTypeForUrl(kTestUrl)); |
| 350 opt_for_host.WriteValue(kTestFilter, L""); | 374 opt_for_host.WriteValue(kTestFilter, L""); |
| 351 EXPECT_EQ(RENDERER_TYPE_UNDETERMINED, RendererTypeForUrl(kTestUrl)); | 375 EXPECT_EQ(RENDERER_TYPE_UNDETERMINED, RendererTypeForUrl(kTestUrl)); |
| 352 | 376 |
| 353 // Cleanup. | 377 // Cleanup. |
| 354 opt_for_gcf.DeleteValue(kTestFilter); | 378 opt_for_gcf.DeleteValue(kTestFilter); |
| 355 opt_for_host.DeleteValue(kTestFilter); | 379 opt_for_host.DeleteValue(kTestFilter); |
| 356 config_key.WriteValue(kEnableGCFRendererByDefault, saved_default_renderer); | 380 config_key.WriteValue(kEnableGCFRendererByDefault, saved_default_renderer); |
| 357 } | 381 } |
| 358 | 382 |
| 359 TEST(UtilTests, XUaCompatibleDirectiveTest) { | 383 TEST_F(UtilTests, XUaCompatibleDirectiveTest) { |
| 360 int all_versions[] = {0, 1, 2, 5, 6, 7, 8, 9, 10, 11, 99, 100, 101, 1000}; | 384 int all_versions[] = {0, 1, 2, 5, 6, 7, 8, 9, 10, 11, 99, 100, 101, 1000}; |
| 361 | 385 |
| 362 struct Cases { | 386 struct Cases { |
| 363 const char* header_value; | 387 const char* header_value; |
| 364 int max_version; | 388 int max_version; |
| 365 } test_cases[] = { | 389 } test_cases[] = { |
| 366 // Negative cases | 390 // Negative cases |
| 367 { "", -1 }, | 391 { "", -1 }, |
| 368 { "chrome=", -1 }, | 392 { "chrome=", -1 }, |
| 369 { "chrome", -1 }, | 393 { "chrome", -1 }, |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 | 438 |
| 415 ASSERT_EQ(expect_match, | 439 ASSERT_EQ(expect_match, |
| 416 CheckXUaCompatibleDirective(test.header_value, | 440 CheckXUaCompatibleDirective(test.header_value, |
| 417 all_versions[version_index])) | 441 all_versions[version_index])) |
| 418 << "Expect '" << test.header_value << "' to " | 442 << "Expect '" << test.header_value << "' to " |
| 419 << (expect_match ? "match" : "not match") << " IE major version " | 443 << (expect_match ? "match" : "not match") << " IE major version " |
| 420 << all_versions[version_index]; | 444 << all_versions[version_index]; |
| 421 } | 445 } |
| 422 } | 446 } |
| 423 } | 447 } |
| OLD | NEW |