Home | History | Annotate | Download | only in translate
      1 // Copyright 2013 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_TRANSLATE_TRANSLATE_URL_FETCHER_H_
      6 #define CHROME_BROWSER_TRANSLATE_TRANSLATE_URL_FETCHER_H_
      7 
      8 #include "base/callback.h"
      9 #include "base/memory/scoped_ptr.h"
     10 #include "net/url_request/url_fetcher_delegate.h"
     11 #include "url/gurl.h"
     12 
     13 class TranslateURLFetcher : public net::URLFetcherDelegate {
     14  public:
     15   // Callback type for Request().
     16   typedef base::Callback<void(int, bool, const std::string&)> Callback;
     17 
     18   // Represents internal state if the fetch is completed successfully.
     19   enum State {
     20     IDLE,        // No fetch request was issued.
     21     REQUESTING,  // A fetch request was issued, but not finished yet.
     22     COMPLETED,   // The last fetch request was finished successfully.
     23     FAILED,      // The last fetch request was finished with a failure.
     24   };
     25 
     26   explicit TranslateURLFetcher(int id);
     27   virtual ~TranslateURLFetcher();
     28 
     29   int max_retry_on_5xx() {
     30     return max_retry_on_5xx_;
     31   }
     32   void set_max_retry_on_5xx(int count) {
     33     max_retry_on_5xx_ = count;
     34   }
     35 
     36   const std::string& extra_request_header() {
     37     return extra_request_header_;
     38   }
     39   void set_extra_request_header(const std::string& header) {
     40     extra_request_header_ = header;
     41   }
     42 
     43   // Requests to |url|. |callback| will be invoked when the function returns
     44   // true, and the request is finished asynchronously.
     45   // Returns false if the previous request is not finished, or the request
     46   // is omitted due to retry limitation.
     47   bool Request(const GURL& url, const Callback& callback);
     48 
     49   // Gets internal state.
     50   State state() { return state_; }
     51 
     52   // net::URLFetcherDelegate implementation:
     53   virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
     54 
     55  private:
     56   // URL to send the request.
     57   GURL url_;
     58 
     59   // ID which is assigned to the URLFetcher.
     60   const int id_;
     61 
     62   // Internal state.
     63   enum State state_;
     64 
     65   // URLFetcher instance.
     66   scoped_ptr<net::URLFetcher> fetcher_;
     67 
     68   // Callback passed at Request(). It will be invoked when an asynchronous
     69   // fetch operation is finished.
     70   Callback callback_;
     71 
     72   // Counts how many times did it try to fetch the language list.
     73   int retry_count_;
     74 
     75   // Max number how many times to retry on the server error
     76   int max_retry_on_5xx_;
     77 
     78   // An extra HTTP request header
     79   std::string extra_request_header_;
     80 
     81   DISALLOW_COPY_AND_ASSIGN(TranslateURLFetcher);
     82 };
     83 
     84 #endif  // CHROME_BROWSER_TRANSLATE_TRANSLATE_URL_FETCHER_H_
     85