Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Unified Diff: chrome/browser/errorpage_browsertest.cc

Issue 24503004: Show IDN in error screens (DNS failure etc.) (Closed) Base URL: https://src.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/errorpage_browsertest.cc
===================================================================
--- chrome/browser/errorpage_browsertest.cc (revision 225096)
+++ chrome/browser/errorpage_browsertest.cc (working copy)
@@ -3,12 +3,16 @@
// found in the LICENSE file.
#include "base/bind.h"
+#include "base/prefs/pref_service.h"
+#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/google/google_util.h"
#include "chrome/browser/net/url_request_mock_util.h"
+#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/pref_names.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/web_contents.h"
@@ -17,6 +21,7 @@
#include "content/test/net/url_request_failed_job.h"
#include "content/test/net/url_request_mock_http_job.h"
#include "net/base/net_errors.h"
+#include "net/base/net_util.h"
#include "net/url_request/url_request_filter.h"
#include "net/url_request/url_request_job_factory.h"
@@ -248,6 +253,16 @@
1);
}
+// Returns JavaScrips code that executes plain text search for the page.
mmenke 2013/09/27 14:44:05 nit: Javascript
yuusuke 2013/09/28 10:42:50 Done.
+// Pass into content::ExecuteScriptAndExtractBool as |script| parameter.
+std::string GetTextContentContainsStringScript(
+ const std::string& value_to_search) {
+ return base::StringPrintf(
+ "var textContent = document.body.textContent;"
+ "var hasError = textContent.indexOf('%s') >= 0;"
+ "domAutomationController.send(hasError);", value_to_search.c_str());
mmenke 2013/09/27 14:44:05 nit: To make the second parameter stand out a bit
yuusuke 2013/09/28 10:42:50 Done.
+}
+
// Protocol handler that fails all requests with net::ERR_ADDRESS_UNREACHABLE.
class AddressUnreachableProtocolHandler
: public net::URLRequestJobFactory::ProtocolHandler {
@@ -323,11 +338,66 @@
bool result = false;
EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
browser()->tab_strip_model()->GetActiveWebContents(),
- "var textContent = document.body.textContent;"
- "var hasError = textContent.indexOf('ERR_NAME_NOT_RESOLVED') >= 0;"
- "domAutomationController.send(hasError);",
+ GetTextContentContainsStringScript("ERR_NAME_NOT_RESOLVED"),
&result));
EXPECT_TRUE(result);
}
+// A test fixture that substitutes kMockHostname with IDN.
mmenke 2013/09/27 14:44:05 nit: Think it's ambiguous what "kMockHostname" is
yuusuke 2013/09/28 10:42:50 Done.
+class ErrorPageForIDNTest : public InProcessBrowserTest {
+ public:
+ // InProcessBrowserTest:
+ virtual void SetUpOnMainThread() OVERRIDE {
+ // Clear AcceptLanguages to force punycode decoding.
+ browser()->profile()->GetPrefs()->SetString(prefs::kAcceptLanguages,
+ std::string());
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&ErrorPageForIDNTest::AddFilters));
+ }
+
+ virtual void CleanUpOnMainThread() OVERRIDE {
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&ErrorPageForIDNTest::RemoveFilters));
+ }
+
+ // Target hostname in ASCII (punycode).
+ static std::string GetHostname() {
+ return "xn--d1abbgf6aiiy.xn--p1ai";
+ }
+
+ static std::string GetHostnameAsJSUnicode() {
+ return "\\u043f\\u0440\\u0435\\u0437\\u0438\\u0434\\u0435\\u043d"
+ "\\u0442.\\u0440\\u0444";
+ }
mmenke 2013/09/27 14:44:05 optional nit: Suggest just making these consts, i
yuusuke 2013/09/28 10:42:50 Done.
+
+ private:
+ static void AddFilters() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ content::URLRequestFailedJob::AddUrlHandler(GetHostname());
+ }
+
+ static void RemoveFilters() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ net::URLRequestFilter::GetInstance()->ClearHandlers();
+ }
+};
+
+// Make sure error page shows correct unicode for IDN.
+IN_PROC_BROWSER_TEST_F(ErrorPageForIDNTest, IDN) {
+ ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
mmenke 2013/09/27 14:44:05 Think it's worth a comment that ERR_UNSAFE_PORT wi
yuusuke 2013/09/28 10:42:50 Done.
+ browser(),
+ URLRequestFailedJob::GetMockHttpUrl(net::ERR_UNSAFE_PORT,
+ GetHostname()),
+ 1);
+
+ bool result = false;
+ EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
+ browser()->tab_strip_model()->GetActiveWebContents(),
+ GetTextContentContainsStringScript(GetHostnameAsJSUnicode()),
+ &result));
+ EXPECT_TRUE(result);
+}
+
} // namespace

Powered by Google App Engine
This is Rietveld 408576698