Handle invalid DnsConfig in DnsProbeRunner.

Don't crash in RunProbe if the DnsConfig is invalid; add a test case to the
DnsProbeRunnerTest for invalid config.

BUG=156415,261588
TEST=added test case to DnsProbeRunnerTest

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@212631 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/net/dns_probe_runner_unittest.cc b/chrome/browser/net/dns_probe_runner_unittest.cc
index fd674e65..5020afc 100644
--- a/chrome/browser/net/dns_probe_runner_unittest.cc
+++ b/chrome/browser/net/dns_probe_runner_unittest.cc
@@ -15,6 +15,8 @@
 using base::MessageLoopForIO;
 using base::RunLoop;
 using content::TestBrowserThreadBundle;
+using net::DnsClient;
+using net::DnsConfig;
 using net::MockDnsClientRule;
 
 namespace chrome_browser_net {
@@ -86,6 +88,24 @@
   RunTest(MockDnsClientRule::EMPTY, DnsProbeRunner::INCORRECT);
 }
 
+TEST_F(DnsProbeRunnerTest, InvalidDnsConfig) {
+  scoped_ptr<DnsClient> dns_client(DnsClient::CreateClient(NULL));
+  DnsConfig empty_config;
+  dns_client->SetConfig(empty_config);
+  ASSERT_EQ(NULL, dns_client->GetTransactionFactory());
+  runner_.SetClient(dns_client.Pass());
+
+  TestDnsProbeRunnerCallback callback;
+
+  runner_.RunProbe(callback.callback());
+  EXPECT_TRUE(runner_.IsRunning());
+
+  RunLoop().RunUntilIdle();
+  EXPECT_FALSE(runner_.IsRunning());
+  EXPECT_TRUE(callback.called());
+  EXPECT_EQ(DnsProbeRunner::UNKNOWN, runner_.result());
+}
+
 }  // namespace
 
 }  // namespace chrome_browser_net