pepper_lookup_request.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_LOOKUP_REQUEST_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_LOOKUP_REQUEST_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/address_list.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/host_resolver.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/single_request_host_resolver.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<class T> 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PepperLookupRequest { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(int, const net::AddressList&, const T&)> 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LookupRequestCallback; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Takes ownership over |bound_info|. |bound_info| will be passed to 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // callback, when lookup will finish. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PepperLookupRequest(net::HostResolver* resolver, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::HostResolver::RequestInfo& request_info, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) T* bound_info, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LookupRequestCallback& callback) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : resolver_(resolver), 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_info_(request_info), 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bound_info_(bound_info), 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_(callback) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Start() { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = resolver_.Resolve( 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_info_, &addresses_, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&PepperLookupRequest<T>::OnLookupFinished, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this)), 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::BoundNetLog()); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result != net::ERR_IO_PENDING) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnLookupFinished(result); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnLookupFinished(int result) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_.Run(result, addresses_, *bound_info_); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete this; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SingleRequestHostResolver resolver_; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostResolver::RequestInfo request_info_; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<T> bound_info_; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LookupRequestCallback callback_; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::AddressList addresses_; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PepperLookupRequest); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_LOOKUP_REQUEST_H_ 64