| OLD | NEW |
| (Empty) |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #import "ios/chrome/browser/ui/dialogs/nsurl_protection_space_util.h" | |
| 6 | |
| 7 #include "base/ios/ios_util.h" | |
| 8 #include "base/strings/sys_string_conversions.h" | |
| 9 #include "components/strings/grit/components_strings.h" | |
| 10 #include "testing/gtest/include/gtest/gtest.h" | |
| 11 #include "testing/gtest_mac.h" | |
| 12 #include "testing/platform_test.h" | |
| 13 #include "ui/base/l10n/l10n_util.h" | |
| 14 #include "ui/base/l10n/l10n_util_mac.h" | |
| 15 | |
| 16 #if !defined(__has_feature) || !__has_feature(objc_arc) | |
| 17 #error "This file requires ARC support." | |
| 18 #endif | |
| 19 | |
| 20 using namespace ios_internal::nsurlprotectionspace_util; | |
| 21 | |
| 22 namespace { | |
| 23 | |
| 24 // Test hostnames and URL origins. | |
| 25 NSString* const kTestHost = @"chromium.org"; | |
| 26 NSString* const kTestHttpOrigin = @"http://chromium.org"; | |
| 27 NSString* const kTestHttpsOrigin = @"https://chromium.org:80"; | |
| 28 | |
| 29 // Returns protection space for the given |host|, |protocol| and |port|. | |
| 30 NSURLProtectionSpace* GetProtectionSpaceForHost(NSString* host, | |
| 31 NSString* protocol, | |
| 32 NSInteger port) { | |
| 33 return [[NSURLProtectionSpace alloc] initWithHost:host | |
| 34 port:port | |
| 35 protocol:protocol | |
| 36 realm:nil | |
| 37 authenticationMethod:nil]; | |
| 38 } | |
| 39 | |
| 40 // Returns protection space for the given |host| and |protocol| and port 80. | |
| 41 NSURLProtectionSpace* GetProtectionSpaceForHost(NSString* host, | |
| 42 NSString* protocol) { | |
| 43 return GetProtectionSpaceForHost(host, protocol, 80); | |
| 44 } | |
| 45 | |
| 46 // Returns protection space for the given proxy |host| and |protocol|. | |
| 47 NSURLProtectionSpace* GetProtectionSpaceForProxyHost(NSString* host, | |
| 48 NSString* type) { | |
| 49 return [[NSURLProtectionSpace alloc] initWithProxyHost:host | |
| 50 port:80 | |
| 51 type:type | |
| 52 realm:nil | |
| 53 authenticationMethod:nil]; | |
| 54 } | |
| 55 | |
| 56 } // namespace | |
| 57 | |
| 58 // Tests that dialog can not be shown without valid host. | |
| 59 TEST(NSURLProtectionSpaceUtilTest, CantShowWithoutValidHost) { | |
| 60 NSURLProtectionSpace* protectionSpace = | |
| 61 GetProtectionSpaceForHost(@"", NSURLProtectionSpaceHTTPS); | |
| 62 | |
| 63 EXPECT_FALSE(CanShow(protectionSpace)); | |
| 64 } | |
| 65 | |
| 66 // Tests that dialog can not be shown with invalid port. | |
| 67 TEST(NSURLProtectionSpaceUtilTest, CantShowWithoutValidPort) { | |
| 68 NSURLProtectionSpace* protectionSpace = | |
| 69 GetProtectionSpaceForHost(kTestHost, NSURLProtectionSpaceHTTPS, INT_MAX); | |
| 70 | |
| 71 EXPECT_FALSE(CanShow(protectionSpace)); | |
| 72 } | |
| 73 | |
| 74 // Tests showing the dialog for SOCKS proxy server. | |
| 75 TEST(NSURLProtectionSpaceUtilTest, ShowForSocksProxy) { | |
| 76 NSURLProtectionSpace* protectionSpace = | |
| 77 GetProtectionSpaceForProxyHost(kTestHost, NSURLProtectionSpaceSOCKSProxy); | |
| 78 | |
| 79 ASSERT_TRUE(CanShow(protectionSpace)); | |
| 80 | |
| 81 // Expecting the following text: | |
| 82 // The proxy chromium.org requires a username and password. | |
| 83 // Your connection to this site is not private. | |
| 84 NSString* expectedText = | |
| 85 [NSString stringWithFormat:@"%@ %@", | |
| 86 l10n_util::GetNSStringF( | |
| 87 IDS_LOGIN_DIALOG_PROXY_AUTHORITY, | |
| 88 base::SysNSStringToUTF16(kTestHost)), | |
| 89 l10n_util::GetNSString( | |
| 90 IDS_PAGE_INFO_NOT_SECURE_SUMMARY)]; | |
| 91 | |
| 92 EXPECT_NSEQ(expectedText, MessageForHTTPAuth(protectionSpace)); | |
| 93 } | |
| 94 | |
| 95 // Tests showing the dialog for http proxy server. | |
| 96 TEST(NSURLProtectionSpaceUtilTest, ShowForHttpProxy) { | |
| 97 NSURLProtectionSpace* protectionSpace = | |
| 98 GetProtectionSpaceForProxyHost(kTestHost, NSURLProtectionSpaceHTTPProxy); | |
| 99 | |
| 100 ASSERT_TRUE(CanShow(protectionSpace)); | |
| 101 | |
| 102 // Expecting the following text: | |
| 103 // The proxy http://chromium.org requires a username and password. | |
| 104 // Your connection to this site is not private. | |
| 105 NSString* expectedText = | |
| 106 [NSString stringWithFormat:@"%@ %@", | |
| 107 l10n_util::GetNSStringF( | |
| 108 IDS_LOGIN_DIALOG_PROXY_AUTHORITY, | |
| 109 base::SysNSStringToUTF16(kTestHttpOrigin)), | |
| 110 l10n_util::GetNSString( | |
| 111 IDS_PAGE_INFO_NOT_SECURE_SUMMARY)]; | |
| 112 EXPECT_NSEQ(expectedText, MessageForHTTPAuth(protectionSpace)); | |
| 113 } | |
| 114 | |
| 115 // Tests showing the dialog for https proxy server. | |
| 116 TEST(NSURLProtectionSpaceUtilTest, ShowForHttpsProxy) { | |
| 117 NSURLProtectionSpace* protectionSpace = | |
| 118 GetProtectionSpaceForProxyHost(kTestHost, NSURLProtectionSpaceHTTPSProxy); | |
| 119 | |
| 120 ASSERT_TRUE(CanShow(protectionSpace)); | |
| 121 | |
| 122 NSString* expectedText = nil; | |
| 123 // On iOS 10, HTTPS Proxy protection space reports itself as unsecure | |
| 124 // (crbug.com/629570). | |
| 125 if (base::ios::IsRunningOnIOS10OrLater()) { | |
| 126 // Expecting the following text: | |
| 127 // The proxy https://chromium.org requires a username and password. | |
| 128 // Your connection to this site is not private. | |
| 129 expectedText = [NSString | |
| 130 stringWithFormat:@"%@ %@", | |
| 131 l10n_util::GetNSStringF( | |
| 132 IDS_LOGIN_DIALOG_PROXY_AUTHORITY, | |
| 133 base::SysNSStringToUTF16(kTestHttpsOrigin)), | |
| 134 l10n_util::GetNSString( | |
| 135 IDS_PAGE_INFO_NOT_SECURE_SUMMARY)]; | |
| 136 } else { | |
| 137 // Expecting the following text: | |
| 138 // The proxy https://chromium.org:80 requires a username and password. | |
| 139 expectedText = | |
| 140 l10n_util::GetNSStringF(IDS_LOGIN_DIALOG_PROXY_AUTHORITY, | |
| 141 base::SysNSStringToUTF16(kTestHttpsOrigin)); | |
| 142 } | |
| 143 EXPECT_NSEQ(expectedText, MessageForHTTPAuth(protectionSpace)); | |
| 144 } | |
| 145 | |
| 146 // Tests showing the dialog for http server. | |
| 147 TEST(NSURLProtectionSpaceUtilTest, ShowForHttpServer) { | |
| 148 NSURLProtectionSpace* protectionSpace = | |
| 149 GetProtectionSpaceForHost(kTestHost, NSURLProtectionSpaceHTTP); | |
| 150 | |
| 151 ASSERT_TRUE(CanShow(protectionSpace)); | |
| 152 | |
| 153 // Expecting the following text: | |
| 154 // http://chromium.org requires a username and password. | |
| 155 NSString* expectedText = | |
| 156 [NSString stringWithFormat:@"%@ %@", | |
| 157 l10n_util::GetNSStringF( | |
| 158 IDS_LOGIN_DIALOG_AUTHORITY, | |
| 159 base::SysNSStringToUTF16(kTestHttpOrigin)), | |
| 160 l10n_util::GetNSString( | |
| 161 IDS_PAGE_INFO_NOT_SECURE_SUMMARY)]; | |
| 162 EXPECT_NSEQ(expectedText, MessageForHTTPAuth(protectionSpace)); | |
| 163 } | |
| 164 | |
| 165 // Tests showing the dialog for https server. | |
| 166 TEST(NSURLProtectionSpaceUtilTest, ShowForHttpsServer) { | |
| 167 NSURLProtectionSpace* protectionSpace = | |
| 168 GetProtectionSpaceForHost(kTestHost, NSURLProtectionSpaceHTTPS); | |
| 169 | |
| 170 ASSERT_TRUE(CanShow(protectionSpace)); | |
| 171 | |
| 172 // Expecting the following text: | |
| 173 // https://chromium.org:80 requires a username and password. | |
| 174 NSString* expectedText = l10n_util::GetNSStringF( | |
| 175 IDS_LOGIN_DIALOG_AUTHORITY, base::SysNSStringToUTF16(kTestHttpsOrigin)); | |
| 176 EXPECT_NSEQ(expectedText, MessageForHTTPAuth(protectionSpace)); | |
| 177 } | |
| OLD | NEW |