OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 #include <string> | 4 #include <string> |
5 | 5 |
6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
7 #include "base/scoped_temp_dir.h" | 7 #include "base/scoped_temp_dir.h" |
8 #include "chrome/browser/net/url_request_mock_http_job.h" | 8 #include "chrome/browser/net/url_request_mock_http_job.h" |
9 #include "chrome/browser/download/save_package.h" | 9 #include "chrome/browser/download/save_package.h" |
10 #include "chrome/common/pref_names.h" | 10 #include "chrome/common/pref_names.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 }; | 48 }; |
49 | 49 |
50 // TODO(jnd): 1. Some encodings are missing here. It'll be added later. See | 50 // TODO(jnd): 1. Some encodings are missing here. It'll be added later. See |
51 // http://crbug.com/13306. | 51 // http://crbug.com/13306. |
52 // 2. Add more files with multiple encoding name variants for each canonical | 52 // 2. Add more files with multiple encoding name variants for each canonical |
53 // encoding name). Webkit layout tests cover some, but testing in the UI test is | 53 // encoding name). Webkit layout tests cover some, but testing in the UI test is |
54 // also necessary. | 54 // also necessary. |
55 TEST_F(BrowserEncodingTest, TestEncodingAliasMapping) { | 55 TEST_F(BrowserEncodingTest, TestEncodingAliasMapping) { |
56 struct EncodingTestData { | 56 struct EncodingTestData { |
57 const char* file_name; | 57 const char* file_name; |
58 const wchar_t* encoding_name; | 58 const char* encoding_name; |
59 }; | 59 }; |
60 | 60 |
61 const EncodingTestData kEncodingTestDatas[] = { | 61 const EncodingTestData kEncodingTestDatas[] = { |
62 { "Big5.html", L"Big5" }, | 62 { "Big5.html", "Big5" }, |
63 { "EUC-JP.html", L"EUC-JP" }, | 63 { "EUC-JP.html", "EUC-JP" }, |
64 { "gb18030.html", L"gb18030" }, | 64 { "gb18030.html", "gb18030" }, |
65 { "iso-8859-1.html", L"ISO-8859-1" }, | 65 { "iso-8859-1.html", "ISO-8859-1" }, |
66 { "ISO-8859-2.html", L"ISO-8859-2" }, | 66 { "ISO-8859-2.html", "ISO-8859-2" }, |
67 { "ISO-8859-4.html", L"ISO-8859-4" }, | 67 { "ISO-8859-4.html", "ISO-8859-4" }, |
68 { "ISO-8859-5.html", L"ISO-8859-5" }, | 68 { "ISO-8859-5.html", "ISO-8859-5" }, |
69 { "ISO-8859-6.html", L"ISO-8859-6" }, | 69 { "ISO-8859-6.html", "ISO-8859-6" }, |
70 { "ISO-8859-7.html", L"ISO-8859-7" }, | 70 { "ISO-8859-7.html", "ISO-8859-7" }, |
71 { "ISO-8859-8.html", L"ISO-8859-8" }, | 71 { "ISO-8859-8.html", "ISO-8859-8" }, |
72 { "ISO-8859-13.html", L"ISO-8859-13" }, | 72 { "ISO-8859-13.html", "ISO-8859-13" }, |
73 { "ISO-8859-15.html", L"ISO-8859-15" }, | 73 { "ISO-8859-15.html", "ISO-8859-15" }, |
74 { "KOI8-R.html", L"KOI8-R" }, | 74 { "KOI8-R.html", "KOI8-R" }, |
75 { "KOI8-U.html", L"KOI8-U" }, | 75 { "KOI8-U.html", "KOI8-U" }, |
76 { "macintosh.html", L"macintosh" }, | 76 { "macintosh.html", "macintosh" }, |
77 { "Shift-JIS.html", L"Shift_JIS" }, | 77 { "Shift-JIS.html", "Shift_JIS" }, |
78 { "US-ASCII.html", L"ISO-8859-1" }, // http://crbug.com/15801 | 78 { "US-ASCII.html", "ISO-8859-1" }, // http://crbug.com/15801 |
79 { "UTF-8.html", L"UTF-8" }, | 79 { "UTF-8.html", "UTF-8" }, |
80 { "UTF-16LE.html", L"UTF-16LE" }, | 80 { "UTF-16LE.html", "UTF-16LE" }, |
81 { "windows-874.html", L"windows-874" }, | 81 { "windows-874.html", "windows-874" }, |
82 { "windows-949.html", L"windows-949" }, | 82 { "windows-949.html", "windows-949" }, |
83 { "windows-1250.html", L"windows-1250" }, | 83 { "windows-1250.html", "windows-1250" }, |
84 { "windows-1251.html", L"windows-1251" }, | 84 { "windows-1251.html", "windows-1251" }, |
85 { "windows-1252.html", L"windows-1252" }, | 85 { "windows-1252.html", "windows-1252" }, |
86 { "windows-1253.html", L"windows-1253" }, | 86 { "windows-1253.html", "windows-1253" }, |
87 { "windows-1254.html", L"windows-1254" }, | 87 { "windows-1254.html", "windows-1254" }, |
88 { "windows-1255.html", L"windows-1255" }, | 88 { "windows-1255.html", "windows-1255" }, |
89 { "windows-1256.html", L"windows-1256" }, | 89 { "windows-1256.html", "windows-1256" }, |
90 { "windows-1257.html", L"windows-1257" }, | 90 { "windows-1257.html", "windows-1257" }, |
91 { "windows-1258.html", L"windows-1258" } | 91 { "windows-1258.html", "windows-1258" } |
92 }; | 92 }; |
93 const char* const kAliasTestDir = "alias_mapping"; | 93 const char* const kAliasTestDir = "alias_mapping"; |
94 | 94 |
95 FilePath test_dir_path = FilePath(kTestDir).AppendASCII(kAliasTestDir); | 95 FilePath test_dir_path = FilePath(kTestDir).AppendASCII(kAliasTestDir); |
96 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kEncodingTestDatas); ++i) { | 96 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kEncodingTestDatas); ++i) { |
97 FilePath test_file_path(test_dir_path); | 97 FilePath test_file_path(test_dir_path); |
98 test_file_path = test_file_path.AppendASCII( | 98 test_file_path = test_file_path.AppendASCII( |
99 kEncodingTestDatas[i].file_name); | 99 kEncodingTestDatas[i].file_name); |
100 GURL url = | 100 GURL url = |
101 URLRequestMockHTTPJob::GetMockUrl(test_file_path.ToWStringHack()); | 101 URLRequestMockHTTPJob::GetMockUrl(test_file_path.ToWStringHack()); |
102 | 102 |
103 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); | 103 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
104 ASSERT_TRUE(tab_proxy.get()); | 104 ASSERT_TRUE(tab_proxy.get()); |
105 ASSERT_TRUE(tab_proxy->NavigateToURL(url)); | 105 ASSERT_TRUE(tab_proxy->NavigateToURL(url)); |
106 WaitUntilTabCount(1); | 106 WaitUntilTabCount(1); |
107 | 107 |
108 std::wstring encoding; | 108 std::string encoding; |
109 EXPECT_TRUE(tab_proxy->GetPageCurrentEncoding(&encoding)); | 109 EXPECT_TRUE(tab_proxy->GetPageCurrentEncoding(&encoding)); |
110 EXPECT_EQ(encoding, kEncodingTestDatas[i].encoding_name); | 110 EXPECT_EQ(encoding, kEncodingTestDatas[i].encoding_name); |
111 } | 111 } |
112 } | 112 } |
113 | 113 |
114 #if defined(OS_WIN) | 114 #if defined(OS_WIN) |
115 // We are disabling this test on MacOS and Linux because on those platforms | 115 // We are disabling this test on MacOS and Linux because on those platforms |
116 // AutomationProvider::OverrideEncoding is not implemented yet. | 116 // AutomationProvider::OverrideEncoding is not implemented yet. |
117 // TODO(port): Enable when encoding-related parts of Browser are ported. | 117 // TODO(port): Enable when encoding-related parts of Browser are ported. |
118 TEST_F(BrowserEncodingTest, TestOverrideEncoding) { | 118 TEST_F(BrowserEncodingTest, TestOverrideEncoding) { |
119 const char* const kTestFileName = "gb18030_with_iso88591_meta.html"; | 119 const char* const kTestFileName = "gb18030_with_iso88591_meta.html"; |
120 const char* const kExpectedFileName = | 120 const char* const kExpectedFileName = |
121 "expected_gb18030_saved_from_iso88591_meta.html"; | 121 "expected_gb18030_saved_from_iso88591_meta.html"; |
122 const char* const kOverrideTestDir = "user_override"; | 122 const char* const kOverrideTestDir = "user_override"; |
123 | 123 |
124 FilePath test_dir_path = FilePath(kTestDir).AppendASCII(kOverrideTestDir); | 124 FilePath test_dir_path = FilePath(kTestDir).AppendASCII(kOverrideTestDir); |
125 test_dir_path = test_dir_path.AppendASCII(kTestFileName); | 125 test_dir_path = test_dir_path.AppendASCII(kTestFileName); |
126 GURL url = URLRequestMockHTTPJob::GetMockUrl(test_dir_path.ToWStringHack()); | 126 GURL url = URLRequestMockHTTPJob::GetMockUrl(test_dir_path.ToWStringHack()); |
127 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); | 127 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
128 ASSERT_TRUE(tab_proxy.get()); | 128 ASSERT_TRUE(tab_proxy.get()); |
129 ASSERT_TRUE(tab_proxy->NavigateToURL(url)); | 129 ASSERT_TRUE(tab_proxy->NavigateToURL(url)); |
130 WaitUntilTabCount(1); | 130 WaitUntilTabCount(1); |
131 | 131 |
132 // Get the encoding declared in the page. | 132 // Get the encoding declared in the page. |
133 std::wstring encoding; | 133 std::string encoding; |
134 EXPECT_TRUE(tab_proxy->GetPageCurrentEncoding(&encoding)); | 134 EXPECT_TRUE(tab_proxy->GetPageCurrentEncoding(&encoding)); |
135 EXPECT_EQ(encoding, L"ISO-8859-1"); | 135 EXPECT_EQ(encoding, "ISO-8859-1"); |
136 | 136 |
137 // Override the encoding to "gb18030". | 137 // Override the encoding to "gb18030". |
138 int64 last_nav_time = 0; | 138 int64 last_nav_time = 0; |
139 EXPECT_TRUE(tab_proxy->GetLastNavigationTime(&last_nav_time)); | 139 EXPECT_TRUE(tab_proxy->GetLastNavigationTime(&last_nav_time)); |
140 EXPECT_TRUE(tab_proxy->OverrideEncoding(L"gb18030")); | 140 EXPECT_TRUE(tab_proxy->OverrideEncoding("gb18030")); |
141 EXPECT_TRUE(tab_proxy->WaitForNavigation(last_nav_time)); | 141 EXPECT_TRUE(tab_proxy->WaitForNavigation(last_nav_time)); |
142 | 142 |
143 // Re-get the encoding of page. It should be gb18030. | 143 // Re-get the encoding of page. It should be gb18030. |
144 EXPECT_TRUE(tab_proxy->GetPageCurrentEncoding(&encoding)); | 144 EXPECT_TRUE(tab_proxy->GetPageCurrentEncoding(&encoding)); |
145 EXPECT_EQ(encoding, L"gb18030"); | 145 EXPECT_EQ(encoding, "gb18030"); |
146 | 146 |
147 // Dump the page, the content of dump page should be identical to the | 147 // Dump the page, the content of dump page should be identical to the |
148 // expected result file. | 148 // expected result file. |
149 FilePath full_file_name = save_dir_.AppendASCII(kTestFileName); | 149 FilePath full_file_name = save_dir_.AppendASCII(kTestFileName); |
150 // We save the page as way of complete HTML file, which requires a directory | 150 // We save the page as way of complete HTML file, which requires a directory |
151 // name to save sub resources in it. Although this test file does not have | 151 // name to save sub resources in it. Although this test file does not have |
152 // sub resources, but the directory name is still required. | 152 // sub resources, but the directory name is still required. |
153 EXPECT_TRUE(tab_proxy->SavePage(full_file_name.ToWStringHack(), | 153 EXPECT_TRUE(tab_proxy->SavePage(full_file_name.ToWStringHack(), |
154 temp_sub_resource_dir_.ToWStringHack(), | 154 temp_sub_resource_dir_.ToWStringHack(), |
155 SavePackage::SAVE_AS_COMPLETE_HTML)); | 155 SavePackage::SAVE_AS_COMPLETE_HTML)); |
(...skipping 17 matching lines...) Expand all Loading... |
173 // windows-1253 | 173 // windows-1253 |
174 // windows-1257 | 174 // windows-1257 |
175 // windows-1258 | 175 // windows-1258 |
176 | 176 |
177 // For Hebrew, the expected encoding value is ISO-8859-8-I. See | 177 // For Hebrew, the expected encoding value is ISO-8859-8-I. See |
178 // http://crbug.com/2927 for more details. | 178 // http://crbug.com/2927 for more details. |
179 TEST_F(BrowserEncodingTest, TestEncodingAutoDetect) { | 179 TEST_F(BrowserEncodingTest, TestEncodingAutoDetect) { |
180 struct EncodingAutoDetectTestData { | 180 struct EncodingAutoDetectTestData { |
181 const char* test_file_name; // File name of test data. | 181 const char* test_file_name; // File name of test data. |
182 const char* expected_result; // File name of expected results. | 182 const char* expected_result; // File name of expected results. |
183 const wchar_t* expected_encoding; // expected encoding. | 183 const char* expected_encoding; // expected encoding. |
184 }; | 184 }; |
185 const EncodingAutoDetectTestData kTestDatas[] = { | 185 const EncodingAutoDetectTestData kTestDatas[] = { |
186 { "Big5_with_no_encoding_specified.html", | 186 { "Big5_with_no_encoding_specified.html", |
187 "expected_Big5_saved_from_no_encoding_specified.html", | 187 "expected_Big5_saved_from_no_encoding_specified.html", |
188 L"Big5" }, | 188 "Big5" }, |
189 { "gb18030_with_no_encoding_specified.html", | 189 { "gb18030_with_no_encoding_specified.html", |
190 "expected_gb18030_saved_from_no_encoding_specified.html", | 190 "expected_gb18030_saved_from_no_encoding_specified.html", |
191 L"gb18030" }, | 191 "gb18030" }, |
192 { "iso-8859-1_with_no_encoding_specified.html", | 192 { "iso-8859-1_with_no_encoding_specified.html", |
193 "expected_iso-8859-1_saved_from_no_encoding_specified.html", | 193 "expected_iso-8859-1_saved_from_no_encoding_specified.html", |
194 L"ISO-8859-1" }, | 194 "ISO-8859-1" }, |
195 { "ISO-8859-5_with_no_encoding_specified.html", | 195 { "ISO-8859-5_with_no_encoding_specified.html", |
196 "expected_ISO-8859-5_saved_from_no_encoding_specified.html", | 196 "expected_ISO-8859-5_saved_from_no_encoding_specified.html", |
197 L"ISO-8859-5" }, | 197 "ISO-8859-5" }, |
198 { "ISO-8859-6_with_no_encoding_specified.html", | 198 { "ISO-8859-6_with_no_encoding_specified.html", |
199 "expected_ISO-8859-6_saved_from_no_encoding_specified.html", | 199 "expected_ISO-8859-6_saved_from_no_encoding_specified.html", |
200 L"ISO-8859-6" }, | 200 "ISO-8859-6" }, |
201 { "ISO-8859-7_with_no_encoding_specified.html", | 201 { "ISO-8859-7_with_no_encoding_specified.html", |
202 "expected_ISO-8859-7_saved_from_no_encoding_specified.html", | 202 "expected_ISO-8859-7_saved_from_no_encoding_specified.html", |
203 L"ISO-8859-7" }, | 203 "ISO-8859-7" }, |
204 { "ISO-8859-8_with_no_encoding_specified.html", | 204 { "ISO-8859-8_with_no_encoding_specified.html", |
205 "expected_ISO-8859-8_saved_from_no_encoding_specified.html", | 205 "expected_ISO-8859-8_saved_from_no_encoding_specified.html", |
206 L"ISO-8859-8-I" }, | 206 "ISO-8859-8-I" }, |
207 { "KOI8-R_with_no_encoding_specified.html", | 207 { "KOI8-R_with_no_encoding_specified.html", |
208 "expected_KOI8-R_saved_from_no_encoding_specified.html", | 208 "expected_KOI8-R_saved_from_no_encoding_specified.html", |
209 L"KOI8-R" }, | 209 "KOI8-R" }, |
210 { "Shift-JIS_with_no_encoding_specified.html", | 210 { "Shift-JIS_with_no_encoding_specified.html", |
211 "expected_Shift-JIS_saved_from_no_encoding_specified.html", | 211 "expected_Shift-JIS_saved_from_no_encoding_specified.html", |
212 L"Shift_JIS" }, | 212 "Shift_JIS" }, |
213 { "UTF-8_with_no_encoding_specified.html", | 213 { "UTF-8_with_no_encoding_specified.html", |
214 "expected_UTF-8_saved_from_no_encoding_specified.html", | 214 "expected_UTF-8_saved_from_no_encoding_specified.html", |
215 L"UTF-8" }, | 215 "UTF-8" }, |
216 { "windows-949_with_no_encoding_specified.html", | 216 { "windows-949_with_no_encoding_specified.html", |
217 "expected_windows-949_saved_from_no_encoding_specified.html", | 217 "expected_windows-949_saved_from_no_encoding_specified.html", |
218 L"windows-949" }, | 218 "windows-949" }, |
219 { "windows-1251_with_no_encoding_specified.html", | 219 { "windows-1251_with_no_encoding_specified.html", |
220 "expected_windows-1251_saved_from_no_encoding_specified.html", | 220 "expected_windows-1251_saved_from_no_encoding_specified.html", |
221 L"windows-1251" }, | 221 "windows-1251" }, |
222 { "windows-1254_with_no_encoding_specified.html", | 222 { "windows-1254_with_no_encoding_specified.html", |
223 "expected_windows-1254_saved_from_no_encoding_specified.html", | 223 "expected_windows-1254_saved_from_no_encoding_specified.html", |
224 L"windows-1254" }, | 224 "windows-1254" }, |
225 { "windows-1255_with_no_encoding_specified.html", | 225 { "windows-1255_with_no_encoding_specified.html", |
226 "expected_windows-1255_saved_from_no_encoding_specified.html", | 226 "expected_windows-1255_saved_from_no_encoding_specified.html", |
227 L"windows-1255" }, | 227 "windows-1255" }, |
228 { "windows-1256_with_no_encoding_specified.html", | 228 { "windows-1256_with_no_encoding_specified.html", |
229 "expected_windows-1256_saved_from_no_encoding_specified.html", | 229 "expected_windows-1256_saved_from_no_encoding_specified.html", |
230 L"windows-1256" } | 230 "windows-1256" } |
231 }; | 231 }; |
232 const char* const kAutoDetectDir = "auto_detect"; | 232 const char* const kAutoDetectDir = "auto_detect"; |
233 // Directory of the files of expected results. | 233 // Directory of the files of expected results. |
234 const char* const kExpectedResultDir = "expected_results"; | 234 const char* const kExpectedResultDir = "expected_results"; |
235 | 235 |
236 // Full path of saved file. full_file_name = save_dir_ + file_name[i]; | 236 // Full path of saved file. full_file_name = save_dir_ + file_name[i]; |
237 FilePath full_saved_file_name; | 237 FilePath full_saved_file_name; |
238 | 238 |
239 FilePath test_dir_path = FilePath(kTestDir).AppendASCII(kAutoDetectDir); | 239 FilePath test_dir_path = FilePath(kTestDir).AppendASCII(kAutoDetectDir); |
240 | 240 |
(...skipping 15 matching lines...) Expand all Loading... |
256 WaitUntilTabCount(1); | 256 WaitUntilTabCount(1); |
257 | 257 |
258 // Disable auto detect if it is on. | 258 // Disable auto detect if it is on. |
259 EXPECT_TRUE( | 259 EXPECT_TRUE( |
260 browser->SetBooleanPreference(prefs::kWebKitUsesUniversalDetector, | 260 browser->SetBooleanPreference(prefs::kWebKitUsesUniversalDetector, |
261 false)); | 261 false)); |
262 EXPECT_TRUE(tab->Reload()); | 262 EXPECT_TRUE(tab->Reload()); |
263 | 263 |
264 // Get the encoding used for the page, it must be the default charset we | 264 // Get the encoding used for the page, it must be the default charset we |
265 // just set. | 265 // just set. |
266 std::wstring encoding; | 266 std::string encoding; |
267 EXPECT_TRUE(tab->GetPageCurrentEncoding(&encoding)); | 267 EXPECT_TRUE(tab->GetPageCurrentEncoding(&encoding)); |
268 EXPECT_EQ(encoding, L"ISO-8859-4"); | 268 EXPECT_EQ(encoding, "ISO-8859-4"); |
269 | 269 |
270 // Enable the encoding auto detection. | 270 // Enable the encoding auto detection. |
271 EXPECT_TRUE(browser->SetBooleanPreference( | 271 EXPECT_TRUE(browser->SetBooleanPreference( |
272 prefs::kWebKitUsesUniversalDetector, true)); | 272 prefs::kWebKitUsesUniversalDetector, true)); |
273 EXPECT_TRUE(tab->Reload()); | 273 EXPECT_TRUE(tab->Reload()); |
274 | 274 |
275 // Re-get the encoding of page. It should return the real encoding now. | 275 // Re-get the encoding of page. It should return the real encoding now. |
276 bool encoding_auto_detect = false; | 276 bool encoding_auto_detect = false; |
277 EXPECT_TRUE( | 277 EXPECT_TRUE( |
278 browser->GetBooleanPreference(prefs::kWebKitUsesUniversalDetector, | 278 browser->GetBooleanPreference(prefs::kWebKitUsesUniversalDetector, |
(...skipping 11 matching lines...) Expand all Loading... |
290 kExpectedResultDir); | 290 kExpectedResultDir); |
291 expected_result_file_name = expected_result_file_name.AppendASCII( | 291 expected_result_file_name = expected_result_file_name.AppendASCII( |
292 kTestDatas[i].expected_result); | 292 kTestDatas[i].expected_result); |
293 EXPECT_TRUE(tab->SavePage(full_saved_file_name.ToWStringHack(), | 293 EXPECT_TRUE(tab->SavePage(full_saved_file_name.ToWStringHack(), |
294 temp_sub_resource_dir_.ToWStringHack(), | 294 temp_sub_resource_dir_.ToWStringHack(), |
295 SavePackage::SAVE_AS_COMPLETE_HTML)); | 295 SavePackage::SAVE_AS_COMPLETE_HTML)); |
296 EXPECT_TRUE(WaitForDownloadShelfVisible(browser.get())); | 296 EXPECT_TRUE(WaitForDownloadShelfVisible(browser.get())); |
297 CheckFile(full_saved_file_name, expected_result_file_name, true); | 297 CheckFile(full_saved_file_name, expected_result_file_name, true); |
298 } | 298 } |
299 } | 299 } |
OLD | NEW |