diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/utility/local_discovery/local_domain_resolver_unittest.cc | 16 | ||||
-rw-r--r-- | chrome/utility/local_discovery/service_discovery_client_impl.cc | 17 |
2 files changed, 28 insertions, 5 deletions
diff --git a/chrome/utility/local_discovery/local_domain_resolver_unittest.cc b/chrome/utility/local_discovery/local_domain_resolver_unittest.cc index c1fd51c..fe1cebf 100644 --- a/chrome/utility/local_discovery/local_domain_resolver_unittest.cc +++ b/chrome/utility/local_discovery/local_domain_resolver_unittest.cc @@ -167,6 +167,22 @@ TEST_F(LocalDomainResolverTest, ResolveDomainNone) { RunFor(base::TimeDelta::FromSeconds(4)); } +TEST_F(LocalDomainResolverTest, ResolveDomainPreferAFromCache) { + socket_factory_->SimulateReceive( + kSamplePacketA, sizeof(kSamplePacketAAAA)); + socket_factory_->SimulateReceive( + kSamplePacketA, sizeof(kSamplePacketA)); + + LocalDomainResolverImpl resolver( + "myhello.local", net::ADDRESS_FAMILY_UNSPECIFIED, + base::Bind(&LocalDomainResolverTest::AddressCallback, + base::Unretained(this)), &mdns_client_); + + EXPECT_CALL(*this, AddressCallbackInternal(true, "1.2.3.4")); + + resolver.Start(); +} + } // namespace } // namespace local_discovery diff --git a/chrome/utility/local_discovery/service_discovery_client_impl.cc b/chrome/utility/local_discovery/service_discovery_client_impl.cc index 524f176..1df586d 100644 --- a/chrome/utility/local_discovery/service_discovery_client_impl.cc +++ b/chrome/utility/local_discovery/service_discovery_client_impl.cc @@ -406,10 +406,14 @@ void LocalDomainResolverImpl::Start() { transaction_a_->Start(); } - if (address_family_ == net::ADDRESS_FAMILY_IPV6 || - address_family_ == net::ADDRESS_FAMILY_UNSPECIFIED) { - transaction_aaaa_ = CreateTransaction(net::dns_protocol::kTypeAAAA); - transaction_aaaa_->Start(); + // Callback may have finished syncrhonously during |transaction_a_->Start()|, + // check to make sure it hasn't before starting |transaction_aaaa_|. + if (!callback_.is_null()) { + if (address_family_ == net::ADDRESS_FAMILY_IPV6 || + address_family_ == net::ADDRESS_FAMILY_UNSPECIFIED) { + transaction_aaaa_ = CreateTransaction(net::dns_protocol::kTypeAAAA); + transaction_aaaa_->Start(); + } } } @@ -449,7 +453,10 @@ void LocalDomainResolverImpl::OnTransactionComplete( } } - callback_.Run(result == net::MDnsTransaction::RESULT_RECORD, address); + if (!callback_.is_null()) { + callback_.Run(result == net::MDnsTransaction::RESULT_RECORD, address); + callback_.Reset(); + } } } // namespace local_discovery |