| // Copyright 2018 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. | 
 |  | 
 | #ifndef NET_DNS_HOST_RESOLVER_MDNS_TASK_H_ | 
 | #define NET_DNS_HOST_RESOLVER_MDNS_TASK_H_ | 
 |  | 
 | #include <memory> | 
 | #include <string> | 
 | #include <vector> | 
 |  | 
 | #include "base/containers/unique_ptr_adapters.h" | 
 | #include "base/macros.h" | 
 | #include "base/memory/weak_ptr.h" | 
 | #include "base/sequence_checker.h" | 
 | #include "net/base/completion_once_callback.h" | 
 | #include "net/dns/host_resolver.h" | 
 | #include "net/dns/mdns_client.h" | 
 |  | 
 | namespace net { | 
 |  | 
 | // Representation of a single HostResolverImpl::Job task to resolve the hostname | 
 | // using multicast DNS transactions.  Destruction cancels the task and prevents | 
 | // any callbacks from being invoked. | 
 | class HostResolverMdnsTask { | 
 |  public: | 
 |   // |mdns_client| must outlive |this|. | 
 |   HostResolverMdnsTask( | 
 |       MDnsClient* mdns_client, | 
 |       const std::string& hostname, | 
 |       const std::vector<HostResolver::DnsQueryType>& query_types); | 
 |   ~HostResolverMdnsTask(); | 
 |  | 
 |   // Starts the task. |completion_callback| will be called asynchronously with | 
 |   // results. | 
 |   // | 
 |   // Should only be called once. | 
 |   void Start(CompletionOnceCallback completion_callback); | 
 |  | 
 |   const AddressList& result_addresses() { return result_addresses_; } | 
 |  | 
 |  private: | 
 |   class Transaction; | 
 |  | 
 |   void CheckCompletion(bool post_needed); | 
 |   void CompleteWithResult(int result, bool post_needed); | 
 |  | 
 |   MDnsClient* const mdns_client_; | 
 |  | 
 |   const std::string hostname_; | 
 |  | 
 |   AddressList result_addresses_; | 
 |   std::vector<Transaction> transactions_; | 
 |  | 
 |   CompletionOnceCallback completion_callback_; | 
 |  | 
 |   SEQUENCE_CHECKER(sequence_checker_); | 
 |  | 
 |   base::WeakPtrFactory<HostResolverMdnsTask> weak_ptr_factory_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(HostResolverMdnsTask); | 
 | }; | 
 |  | 
 | }  // namespace net | 
 |  | 
 | #endif  // NET_DNS_HOST_RESOLVER_MDNS_TASK_H_ |