Home | History | Annotate | Download | only in net
      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 #include "chrome/test/chromedriver/net/net_util.h"
      6 
      7 #include "base/basictypes.h"
      8 #include "base/bind.h"
      9 #include "base/bind_helpers.h"
     10 #include "base/compiler_specific.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "base/message_loop/message_loop.h"
     13 #include "base/strings/stringprintf.h"
     14 #include "base/synchronization/waitable_event.h"
     15 #include "chrome/test/chromedriver/net/url_request_context_getter.h"
     16 #include "net/url_request/url_fetcher.h"
     17 #include "net/url_request/url_fetcher_delegate.h"
     18 #include "url/gurl.h"
     19 
     20 namespace {
     21 
     22 class SyncUrlFetcher : public net::URLFetcherDelegate {
     23  public:
     24   SyncUrlFetcher(const GURL& url,
     25                  URLRequestContextGetter* getter,
     26                  std::string* response)
     27       : url_(url), getter_(getter), response_(response), event_(false, false) {}
     28 
     29   virtual ~SyncUrlFetcher() {}
     30 
     31   bool Fetch() {
     32     getter_->GetNetworkTaskRunner()->PostTask(
     33         FROM_HERE,
     34         base::Bind(&SyncUrlFetcher::FetchOnIOThread, base::Unretained(this)));
     35     event_.Wait();
     36     return success_;
     37   }
     38 
     39   void FetchOnIOThread() {
     40     fetcher_.reset(net::URLFetcher::Create(url_, net::URLFetcher::GET, this));
     41     fetcher_->SetRequestContext(getter_);
     42     fetcher_->Start();
     43   }
     44 
     45   virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE {
     46     success_ = (source->GetResponseCode() == 200);
     47     if (success_)
     48       success_ = source->GetResponseAsString(response_);
     49     fetcher_.reset();  // Destroy the fetcher on IO thread.
     50     event_.Signal();
     51   }
     52 
     53  private:
     54   GURL url_;
     55   URLRequestContextGetter* getter_;
     56   std::string* response_;
     57   base::WaitableEvent event_;
     58   scoped_ptr<net::URLFetcher> fetcher_;
     59   bool success_;
     60 };
     61 
     62 }  // namespace
     63 
     64 NetAddress::NetAddress() : port_(-1) {}
     65 
     66 NetAddress::NetAddress(int port) : host_("127.0.0.1"), port_(port) {}
     67 
     68 NetAddress::NetAddress(const std::string& host, int port)
     69     : host_(host), port_(port) {}
     70 
     71 NetAddress::~NetAddress() {}
     72 
     73 bool NetAddress::IsValid() const {
     74   return port_ >= 0 && port_ < (1 << 16);
     75 }
     76 
     77 std::string NetAddress::ToString() const {
     78   return host_ + base::StringPrintf(":%d", port_);
     79 }
     80 
     81 const std::string& NetAddress::host() const {
     82   return host_;
     83 }
     84 
     85 int NetAddress::port() const {
     86   return port_;
     87 }
     88 
     89 bool FetchUrl(const std::string& url,
     90               URLRequestContextGetter* getter,
     91               std::string* response) {
     92   return SyncUrlFetcher(GURL(url), getter, response).Fetch();
     93 }
     94