| Index: chrome/browser/browser_encoding_uitest.cc
|
| ===================================================================
|
| --- chrome/browser/browser_encoding_uitest.cc (revision 0)
|
| +++ chrome/browser/browser_encoding_uitest.cc (revision 0)
|
| @@ -0,0 +1,305 @@
|
| +// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +#include <string>
|
| +
|
| +#include "base/file_util.h"
|
| +#include "base/path_service.h"
|
| +#include "base/string_util.h"
|
| +#include "chrome/browser/net/url_request_mock_http_job.h"
|
| +#include "chrome/browser/download/save_package.h"
|
| +#include "chrome/common/chrome_paths.h"
|
| +#include "chrome/test/automation/automation_messages.h"
|
| +#include "chrome/test/automation/automation_proxy.h"
|
| +#include "chrome/test/automation/browser_proxy.h"
|
| +#include "chrome/test/automation/tab_proxy.h"
|
| +#include "chrome/test/ui/ui_test.h"
|
| +#include "net/url_request/url_request_unittest.h"
|
| +#include "chrome/common/pref_names.h"
|
| +
|
| +const wchar_t* const kTestDir = L"encoding_tests";
|
| +
|
| +class BrowserEncodingTest : public UITest {
|
| + protected:
|
| + BrowserEncodingTest() : UITest() {}
|
| +
|
| + // Make sure the content of the page are as expected
|
| + // after override or auto-detect
|
| + void CheckFile(const FilePath& generated_file,
|
| + const FilePath& expected_result_file,
|
| + bool check_equal) {
|
| + FilePath expected_result_filepath = UITest::GetTestFilePath(
|
| + kTestDir, expected_result_file.ToWStringHack());
|
| +
|
| + ASSERT_TRUE(file_util::PathExists(expected_result_filepath));
|
| + WaitForGeneratedFileAndCheck(generated_file,
|
| + expected_result_filepath,
|
| + true, // We do care whether they are equal.
|
| + check_equal,
|
| + true); // Delete the generated file when done.
|
| + }
|
| +
|
| + virtual void SetUp() {
|
| + UITest::SetUp();
|
| + EXPECT_TRUE(file_util::CreateNewTempDirectory(L"", &save_dir_));
|
| + save_dir_ += FilePath::kSeparators[0];
|
| + }
|
| +
|
| + std::wstring save_dir_;
|
| +};
|
| +
|
| +// TODO(jnd): 1. Some encodings are missing here. It'll be added later. See
|
| +// http://crbug.com/13306.
|
| +// 2. Add more files with multiple encoding name variants for each canonical
|
| +// encoding name). Webkit layout tests cover some, but testing in the UI test is
|
| +// also necessary.
|
| +TEST_F(BrowserEncodingTest, TestEncodingAliasMapping) {
|
| + struct EncodingTestData {
|
| + const wchar_t* file_name;
|
| + const wchar_t* encoding_name;
|
| + };
|
| +
|
| + const EncodingTestData kEncodingTestDatas[] = {
|
| + { L"Big5.html", L"Big5" },
|
| + { L"EUC-JP.html", L"EUC-JP" },
|
| + { L"gb18030.html", L"gb18030" },
|
| + { L"iso-8859-1.html", L"ISO-8859-1" },
|
| + { L"ISO-8859-2.html", L"ISO-8859-2" },
|
| + { L"ISO-8859-4.html", L"ISO-8859-4" },
|
| + { L"ISO-8859-5.html", L"ISO-8859-5" },
|
| + { L"ISO-8859-6.html", L"ISO-8859-6" },
|
| + { L"ISO-8859-7.html", L"ISO-8859-7" },
|
| + { L"ISO-8859-8.html", L"ISO-8859-8" },
|
| + { L"ISO-8859-13.html", L"ISO-8859-13" },
|
| + { L"ISO-8859-15.html", L"ISO-8859-15" },
|
| + { L"KOI8-R.html", L"KOI8-R" },
|
| + { L"KOI8-U.html", L"KOI8-U" },
|
| + { L"macintosh.html", L"macintosh" },
|
| + { L"Shift-JIS.html", L"Shift_JIS" },
|
| + { L"UTF-8.html", L"UTF-8" },
|
| + { L"UTF-16LE.html", L"UTF-16LE" },
|
| + { L"windows-874.html", L"windows-874" },
|
| + { L"windows-949.html", L"windows-949" },
|
| + { L"windows-1250.html", L"windows-1250" },
|
| + { L"windows-1251.html", L"windows-1251" },
|
| + { L"windows-1252.html", L"windows-1252" },
|
| + { L"windows-1253.html", L"windows-1253" },
|
| + { L"windows-1254.html", L"windows-1254" },
|
| + { L"windows-1255.html", L"windows-1255" },
|
| + { L"windows-1256.html", L"windows-1256" },
|
| + { L"windows-1257.html", L"windows-1257" },
|
| + { L"windows-1258.html", L"windows-1258" }
|
| + };
|
| + const wchar_t* const kAliasTestDir = L"alias_mapping";
|
| +
|
| + FilePath test_dir_path = FilePath::FromWStringHack(kTestDir);
|
| + test_dir_path = test_dir_path.Append(kAliasTestDir);
|
| + for (int i = 0; i < arraysize(kEncodingTestDatas); ++i) {
|
| + FilePath test_file_path(test_dir_path);
|
| + test_file_path = test_file_path.Append(kEncodingTestDatas[i].file_name);
|
| + GURL url =
|
| + URLRequestMockHTTPJob::GetMockUrl(test_file_path.ToWStringHack());
|
| +
|
| + scoped_refptr<TabProxy> tab_proxy(GetActiveTab());
|
| + ASSERT_TRUE(tab_proxy.get());
|
| + ASSERT_TRUE(tab_proxy->NavigateToURL(url));
|
| + WaitUntilTabCount(1);
|
| +
|
| + std::wstring encoding;
|
| + EXPECT_TRUE(tab_proxy->GetPageCurrentEncoding(&encoding));
|
| + EXPECT_EQ(encoding, kEncodingTestDatas[i].encoding_name);
|
| + }
|
| +}
|
| +
|
| +TEST_F(BrowserEncodingTest, TestOverrideEncoding) {
|
| + const wchar_t* const kTestFileName =
|
| + L"gb18030_with_iso88591_meta.html";
|
| + const wchar_t* const kExpectedFileName =
|
| + L"expected_gb18030_saved_from_iso88591_meta.html";
|
| + const wchar_t* const kOverrideTestDir = L"user_override";
|
| +
|
| + FilePath test_dir_path = FilePath::FromWStringHack(kTestDir);
|
| + test_dir_path = test_dir_path.Append(kOverrideTestDir);
|
| + test_dir_path = test_dir_path.Append(kTestFileName);
|
| + GURL url = URLRequestMockHTTPJob::GetMockUrl(test_dir_path.ToWStringHack());
|
| + scoped_refptr<TabProxy> tab_proxy(GetActiveTab());
|
| + ASSERT_TRUE(tab_proxy.get());
|
| + ASSERT_TRUE(tab_proxy->NavigateToURL(url));
|
| + WaitUntilTabCount(1);
|
| +
|
| + // Get the encoding declared in the page.
|
| + std::wstring encoding;
|
| + EXPECT_TRUE(tab_proxy->GetPageCurrentEncoding(&encoding));
|
| + EXPECT_EQ(encoding, L"ISO-8859-1");
|
| +
|
| + // Override the encoding to "gb18030".
|
| + int64 last_nav_time = 0;
|
| + EXPECT_TRUE(tab_proxy->GetLastNavigationTime(&last_nav_time));
|
| + EXPECT_TRUE(tab_proxy->OverrideEncoding(L"gb18030"));
|
| + EXPECT_TRUE(tab_proxy->WaitForNavigation(last_nav_time));
|
| +
|
| + // Re-get the encoding of page. It should be gb18030.
|
| + EXPECT_TRUE(tab_proxy->GetPageCurrentEncoding(&encoding));
|
| + EXPECT_EQ(encoding, L"gb18030");
|
| +
|
| + // Dump the page, the content of dump page should be identical to the
|
| + // expected result file.
|
| + std::wstring full_file_name = save_dir_ + kTestFileName;
|
| + // We save the page as way of complete HTML file, which requires a directory
|
| + // name to save sub resources in it. Although this test file does not have
|
| + // sub resources, but the directory name is still required.
|
| + std::wstring dir = save_dir_ + L"sub_resource_files";
|
| + EXPECT_TRUE(tab_proxy->SavePage(full_file_name, dir,
|
| + SavePackage::SAVE_AS_COMPLETE_HTML));
|
| + scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
|
| + ASSERT_TRUE(browser.get());
|
| + EXPECT_TRUE(WaitForDownloadShelfVisible(browser.get()));
|
| + FilePath expected_file_name =
|
| + FilePath::FromWStringHack(kOverrideTestDir);
|
| + expected_file_name = expected_file_name.Append(kExpectedFileName);
|
| + CheckFile(FilePath::FromWStringHack(full_file_name),
|
| + expected_file_name, true);
|
| +}
|
| +
|
| +// The following encodings are excluded from the auto-detection test because
|
| +// it's a known issue that the current encoding detector does not detect them:
|
| +// ISO-8859-4
|
| +// ISO-8859-13
|
| +// KOI8-U
|
| +// macintosh
|
| +// windows-874
|
| +// windows-1252
|
| +// windows-1253
|
| +// windows-1257
|
| +// windows-1258
|
| +
|
| +// For Hebrew, the expected encoding value is ISO-8859-8-I. See
|
| +// http://crbug.com/2927 for more details.
|
| +TEST_F(BrowserEncodingTest, TestEncodingAutoDetect) {
|
| + struct EncodingAutoDetectTestData {
|
| + const wchar_t* test_file_name; // File name of test data.
|
| + const wchar_t* expected_result; // File name of expected results.
|
| + const wchar_t* expected_encoding; // expected encoding.
|
| + };
|
| + const EncodingAutoDetectTestData kTestDatas[] = {
|
| + { L"Big5_with_no_encoding_specified.html",
|
| + L"expected_Big5_saved_from_no_encoding_specified.html",
|
| + L"Big5" },
|
| + { L"gb18030_with_no_encoding_specified.html",
|
| + L"expected_gb18030_saved_from_no_encoding_specified.html",
|
| + L"gb18030" },
|
| + { L"iso-8859-1_with_no_encoding_specified.html",
|
| + L"expected_iso-8859-1_saved_from_no_encoding_specified.html",
|
| + L"ISO-8859-1" },
|
| + { L"ISO-8859-5_with_no_encoding_specified.html",
|
| + L"expected_ISO-8859-5_saved_from_no_encoding_specified.html",
|
| + L"ISO-8859-5" },
|
| + { L"ISO-8859-6_with_no_encoding_specified.html",
|
| + L"expected_ISO-8859-6_saved_from_no_encoding_specified.html",
|
| + L"ISO-8859-6" },
|
| + { L"ISO-8859-7_with_no_encoding_specified.html",
|
| + L"expected_ISO-8859-7_saved_from_no_encoding_specified.html",
|
| + L"ISO-8859-7" },
|
| + { L"ISO-8859-8_with_no_encoding_specified.html",
|
| + L"expected_ISO-8859-8_saved_from_no_encoding_specified.html",
|
| + L"ISO-8859-8-I" },
|
| + { L"KOI8-R_with_no_encoding_specified.html",
|
| + L"expected_KOI8-R_saved_from_no_encoding_specified.html",
|
| + L"KOI8-R" },
|
| + { L"Shift-JIS_with_no_encoding_specified.html",
|
| + L"expected_Shift-JIS_saved_from_no_encoding_specified.html",
|
| + L"Shift_JIS" },
|
| + { L"UTF-8_with_no_encoding_specified.html",
|
| + L"expected_UTF-8_saved_from_no_encoding_specified.html",
|
| + L"UTF-8" },
|
| + { L"windows-949_with_no_encoding_specified.html",
|
| + L"expected_windows-949_saved_from_no_encoding_specified.html",
|
| + L"windows-949" },
|
| + { L"windows-1251_with_no_encoding_specified.html",
|
| + L"expected_windows-1251_saved_from_no_encoding_specified.html",
|
| + L"windows-1251" },
|
| + { L"windows-1254_with_no_encoding_specified.html",
|
| + L"expected_windows-1254_saved_from_no_encoding_specified.html",
|
| + L"windows-1254" },
|
| + { L"windows-1255_with_no_encoding_specified.html",
|
| + L"expected_windows-1255_saved_from_no_encoding_specified.html",
|
| + L"windows-1255" },
|
| + { L"windows-1256_with_no_encoding_specified.html",
|
| + L"expected_windows-1256_saved_from_no_encoding_specified.html",
|
| + L"windows-1256" }
|
| + };
|
| + const wchar_t* const kAutoDetectDir = L"auto_detect";
|
| + // Directory of the files of expected results.
|
| + const wchar_t* const kExpectedResultDir = L"expected_results";
|
| +
|
| + // Full path of saved file. full_file_name = save_dir_ + file_name[i];
|
| + std::wstring full_saved_file_name;
|
| + // Sub resource directory of saved file.
|
| + std::wstring tmp_save_dir(save_dir_);
|
| + tmp_save_dir += L"sub_resource_files";
|
| +
|
| + FilePath test_dir_path = FilePath::FromWStringHack(kTestDir);
|
| + test_dir_path = test_dir_path.Append(kAutoDetectDir);
|
| +
|
| + for (int i = 0;i < arraysize(kTestDatas);i++) {
|
| + scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
|
| + ASSERT_TRUE(browser.get());
|
| +
|
| + // Set the default charset to one of encodings not supported by the current
|
| + // auto-detector (Please refer to the above comments) to make sure we
|
| + // incorrectly decode the page. Now we use ISO-8859-4.
|
| + browser->SetStringPreference(prefs::kDefaultCharset, L"ISO-8859-4");
|
| + FilePath test_file_path(test_dir_path);
|
| + test_file_path = test_file_path.Append(kTestDatas[i].test_file_name);
|
| + GURL url =
|
| + URLRequestMockHTTPJob::GetMockUrl(test_file_path.ToWStringHack());
|
| + scoped_refptr<TabProxy> tab(GetActiveTab());
|
| + ASSERT_TRUE(tab.get());
|
| + ASSERT_TRUE(tab->NavigateToURL(url));
|
| + WaitUntilTabCount(1);
|
| +
|
| + // Disable auto detect if it is on.
|
| + EXPECT_TRUE(
|
| + browser->SetBooleanPreference(prefs::kWebKitUsesUniversalDetector,
|
| + false));
|
| + EXPECT_TRUE(tab->Reload());
|
| +
|
| + // Get the encoding used for the page, it must be the default charset we
|
| + // just set.
|
| + std::wstring encoding;
|
| + EXPECT_TRUE(tab->GetPageCurrentEncoding(&encoding));
|
| + EXPECT_EQ(encoding, L"ISO-8859-4");
|
| +
|
| + // Enable the encoding auto detection.
|
| + EXPECT_TRUE(browser->SetBooleanPreference(
|
| + prefs::kWebKitUsesUniversalDetector, true));
|
| + EXPECT_TRUE(tab->Reload());
|
| +
|
| + // Re-get the encoding of page. It should return the real encoding now.
|
| + bool encoding_auto_detect = false;
|
| + EXPECT_TRUE(
|
| + browser->GetBooleanPreference(prefs::kWebKitUsesUniversalDetector,
|
| + &encoding_auto_detect));
|
| + EXPECT_TRUE(encoding_auto_detect);
|
| + EXPECT_TRUE(tab->GetPageCurrentEncoding(&encoding));
|
| + EXPECT_EQ(encoding, kTestDatas[i].expected_encoding);
|
| +
|
| + // Dump the page, the content of dump page should be equal with our expect
|
| + // result file.
|
| + full_saved_file_name = save_dir_ + kTestDatas[i].test_file_name;
|
| + // Full path of expect result file.
|
| + FilePath expected_result_file_name =
|
| + FilePath::FromWStringHack(kAutoDetectDir);
|
| + expected_result_file_name =
|
| + expected_result_file_name.Append(kExpectedResultDir);
|
| + expected_result_file_name =
|
| + expected_result_file_name.Append(kTestDatas[i].expected_result);
|
| + EXPECT_TRUE(tab->SavePage(full_saved_file_name, tmp_save_dir,
|
| + SavePackage::SAVE_AS_COMPLETE_HTML));
|
| + EXPECT_TRUE(WaitForDownloadShelfVisible(browser.get()));
|
| + CheckFile(FilePath::FromWStringHack(full_saved_file_name),
|
| + expected_result_file_name,
|
| + true);
|
| + }
|
| +}
|
| +
|
|
|
| Property changes on: chrome\browser\browser_encoding_uitest.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|