From 2ea1efe9660ee70c8eefb98dde76caac1c918005 Mon Sep 17 00:00:00 2001
From: "ttuttle@chromium.org"
 <ttuttle@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Wed, 17 Jul 2013 05:23:13 +0000
Subject: Display DNS probe results.

1. Modify the browser-side NetErrorTabHelper to send extra messages when it
   starts or declines to start a DNS probe.

2. Create a new error domain, "dnsprobe", with errors for "might run a DNS
   probe", "currently running a DNS probe", and all of the possible probe
   results.

3. Modify ChromeContentRendererClient to give the renderer-side NetErrorHelper
   a chance to choose the error strings before we call LocalizedError directly.

4. Catch DNS errors and provide the strings for the "might run a DNS probe"
   pseudo-error instead.

5. Add a function to neterror.html that lets us re-render the template with a
   new set of strings.

6. When we get a "probe started" message, replace the strings with those for
   the "currently running a DNS probe" pseudo-error.

7. When we get a "probe finished" message, replace the strings with those for
   the probe result.

8. When we get a "probe not run" message, replace the strings with those for
   the original error we received.

BUG=156415
TEST=DnsProbeBrowserTest

Review URL: https://chromiumcodereview.appspot.com/13270005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@211950 0039d316-1c4b-4281-b951-d872f2087c98
---
 chrome/browser/net/dns_probe_runner_unittest.cc | 95 +++++++++++++++++++++++++
 1 file changed, 95 insertions(+)
 create mode 100644 chrome/browser/net/dns_probe_runner_unittest.cc

(limited to 'chrome/browser/net/dns_probe_runner_unittest.cc')

diff --git a/chrome/browser/net/dns_probe_runner_unittest.cc b/chrome/browser/net/dns_probe_runner_unittest.cc
new file mode 100644
index 0000000..5519da2
--- /dev/null
+++ b/chrome/browser/net/dns_probe_runner_unittest.cc
@@ -0,0 +1,95 @@
+// Copyright 2013 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 "base/bind.h"
+#include "base/memory/weak_ptr.h"
+#include "base/message_loop.h"
+#include "base/run_loop.h"
+#include "chrome/browser/net/dns_probe_runner.h"
+#include "chrome/browser/net/dns_probe_test_util.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "net/dns/dns_client.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using base::MessageLoopForIO;
+using base::RunLoop;
+using content::TestBrowserThreadBundle;
+using net::MockDnsClientRule;
+
+namespace chrome_browser_net {
+
+namespace {
+
+class TestDnsProbeRunnerCallback {
+ public:
+  TestDnsProbeRunnerCallback()
+      : callback_(base::Bind(&TestDnsProbeRunnerCallback::OnCalled,
+                             base::Unretained(this))),
+        called_(false) {}
+
+  const base::Closure& callback() const { return callback_; }
+  bool called() const { return called_; }
+
+ private:
+  void OnCalled() {
+    EXPECT_FALSE(called_);
+    called_ = true;
+  }
+
+  base::Closure callback_;
+  bool called_;
+};
+
+class DnsProbeRunnerTest : public testing::Test {
+ protected:
+  void RunTest(MockDnsClientRule::Result query_result,
+               DnsProbeRunner::Result expected_probe_result);
+
+  TestBrowserThreadBundle bundle_;
+  DnsProbeRunner runner_;
+};
+
+void DnsProbeRunnerTest::RunTest(
+    MockDnsClientRule::Result query_result,
+    DnsProbeRunner::Result expected_probe_result) {
+  TestDnsProbeRunnerCallback callback;
+
+  runner_.SetClient(CreateMockDnsClientForProbes(query_result));
+  runner_.RunProbe(callback.callback());
+  EXPECT_TRUE(runner_.IsRunning());
+
+  RunLoop().RunUntilIdle();
+  EXPECT_FALSE(runner_.IsRunning());
+  EXPECT_TRUE(callback.called());
+  EXPECT_EQ(expected_probe_result, runner_.result());
+}
+
+TEST_F(DnsProbeRunnerTest, Probe_OK) {
+  RunTest(MockDnsClientRule::OK, DnsProbeRunner::CORRECT);
+}
+
+TEST_F(DnsProbeRunnerTest, Probe_EMPTY) {
+  RunTest(MockDnsClientRule::EMPTY, DnsProbeRunner::INCORRECT);
+}
+
+TEST_F(DnsProbeRunnerTest, Probe_TIMEOUT) {
+  RunTest(MockDnsClientRule::TIMEOUT, DnsProbeRunner::UNREACHABLE);
+}
+
+TEST_F(DnsProbeRunnerTest, Probe_FAIL_ASYNC) {
+  RunTest(MockDnsClientRule::FAIL_ASYNC, DnsProbeRunner::INCORRECT);
+}
+
+TEST_F(DnsProbeRunnerTest, Probe_FAIL_SYNC) {
+  RunTest(MockDnsClientRule::FAIL_SYNC, DnsProbeRunner::INCORRECT);
+}
+
+TEST_F(DnsProbeRunnerTest, TwoProbes) {
+  RunTest(MockDnsClientRule::OK, DnsProbeRunner::CORRECT);
+  RunTest(MockDnsClientRule::EMPTY, DnsProbeRunner::INCORRECT);
+}
+
+}  // namespace
+
+}  // namespace chrome_browser_net
-- 
cgit v1.1