1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_DNS_DNS_API_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_DNS_DNS_API_H_ 7 8 #include <string> 9 10 #include "chrome/browser/io_thread.h" 11 #include "extensions/browser/extension_function.h" 12 #include "net/base/address_list.h" 13 #include "net/base/completion_callback.h" 14 #include "net/dns/host_resolver.h" 15 16 class IOThread; 17 18 namespace extensions { 19 20 class DnsResolveFunction : public AsyncExtensionFunction { 21 public: 22 DECLARE_EXTENSION_FUNCTION("dns.resolve", DNS_RESOLVE) 23 24 DnsResolveFunction(); 25 26 protected: 27 virtual ~DnsResolveFunction(); 28 29 // ExtensionFunction: 30 virtual bool RunImpl() OVERRIDE; 31 32 void WorkOnIOThread(); 33 void RespondOnUIThread(); 34 35 private: 36 void OnLookupFinished(int result); 37 38 std::string hostname_; 39 40 bool response_; // The value sent in SendResponse(). 41 42 // This instance is widely available through BrowserProcess, but we need to 43 // acquire it on the UI thread and then use it on the IO thread, so we keep a 44 // plain pointer to it here as we move from thread to thread. 45 IOThread* io_thread_; 46 47 scoped_ptr<net::HostResolver::RequestHandle> request_handle_; 48 scoped_ptr<net::AddressList> addresses_; 49 }; 50 51 } // namespace extensions 52 53 #endif // CHROME_BROWSER_EXTENSIONS_API_DNS_DNS_API_H_ 54