Chromium Code Reviews| Index: chrome/browser/translate/translate_language_list.h |
| diff --git a/chrome/browser/translate/translate_language_list.h b/chrome/browser/translate/translate_language_list.h |
| index df81d099b9237f94709b771d438d02a7b877b277..15f00651f9f3e7806cc5a5fadf70ad5ebbc85eb8 100644 |
| --- a/chrome/browser/translate/translate_language_list.h |
| +++ b/chrome/browser/translate/translate_language_list.h |
| @@ -9,7 +9,10 @@ |
| #include <string> |
| #include <vector> |
| +#include "base/callback.h" |
| #include "base/memory/scoped_ptr.h" |
| +#include "googleurl/src/gurl.h" |
| +#include "net/base/network_change_notifier.h" |
| #include "net/url_request/url_fetcher_delegate.h" |
| namespace net { |
| @@ -19,14 +22,12 @@ class URLFetcher; |
| // The TranslateLanguageList class is responsible for maintaining the latest |
| // supporting language list. |
| // This class is defined to be owned only by TranslateManager. |
| -class TranslateLanguageList : public net::URLFetcherDelegate { |
| +class TranslateLanguageList |
| + : public net::NetworkChangeNotifier::NetworkChangeObserver { |
| public: |
| TranslateLanguageList(); |
| virtual ~TranslateLanguageList(); |
| - // net::URLFetcherDelegate implementation: |
| - virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; |
| - |
| // Fills |languages| with the list of languages that the translate server can |
| // translate to and from. |languages| will include alpha languages. |
| void GetSupportedLanguages(std::vector<std::string>* languages); |
| @@ -44,14 +45,71 @@ class TranslateLanguageList : public net::URLFetcherDelegate { |
| bool IsAlphaLanguage(const std::string& language); |
| // Fetches the language list from the translate server. It will not retry |
| - // more than kMaxRetryLanguageListFetch times. |
| + // more than kMaxRetryLanguageListFetch times. Do nothing if the list is |
| + // already updated. |
| void RequestLanguageList(); |
| + // net::NetworkChangeObserver implementation: |
| + virtual void OnNetworkChanged( |
| + net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; |
| + |
| // static const values shared with our browser tests. |
| static const char kLanguageListCallbackName[]; |
| static const char kTargetLanguagesKey[]; |
| private: |
| + // The LanguageListFetcher class implements a client to fetch a server |
| + // supported language list. It also maintains state to represent if the fetch |
| + // is completed successfully to try again later. |
| + class LanguageListFetcher : public net::URLFetcherDelegate { |
| + public: |
| + // Callback type for Request(). |
| + typedef base::Callback<void(bool, bool, const std::string&)> Callback; |
| + |
| + // Represents internal state if the fetch is completed successfully. |
|
MAD
2013/06/07 13:29:24
This comment is a bit misleading... The state is n
Takashi Toyoshima
2013/06/07 14:42:55
I see.
Is it enough to say just 'Represents intern
|
| + enum State { |
| + IDLE, // No fetch request was issued. |
| + REQUESTING, // A fetch request was issued, but not finished yet. |
| + COMPLETED, // The last fetch request was finished successfully. |
| + FAILED, // The last fetch request was finished with a failure. |
| + }; |
| + |
| + explicit LanguageListFetcher(bool include_alpha_languages); |
| + virtual ~LanguageListFetcher(); |
| + |
| + // Requests to fetch a server supported language list. |callback| will be |
| + // invoked when the request is finished asynchronously. |
| + void Request(const Callback& callback); |
| + |
| + // Gets internal state. |
| + State state() { return state_; } |
| + |
| + // net::URLFetcherDelegate implementation: |
| + virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; |
| + |
| + private: |
| + // Represents if this instance should fetch a supported language list |
| + // including alpha languages. |
| + bool include_alpha_languages_; |
| + |
| + // Internal state. |
| + enum State state_; |
| + |
| + // URLFetcher instance. |
| + scoped_ptr<net::URLFetcher> fetcher_; |
| + |
| + // Callback passed at Request(). It will be invoked when asynchronous |
| + // fetch operation is finished. |
| + Callback callback_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(LanguageListFetcher); |
| + }; |
| + |
| + // Callback function called when LanguageListFetcher::Request() is finished. |
| + void OnLanguageListFetchComplete(bool include_alpha_languages, |
| + bool success, |
| + const std::string& data); |
| + |
| // Updates |all_supported_languages_| to contain the union of |
| // |supported_languages_| and |supported_alpha_languages_|. |
| void UpdateSupportedLanguages(); |
| @@ -66,12 +124,13 @@ class TranslateLanguageList : public net::URLFetcherDelegate { |
| // union of |supported_languages_| and |supported_alpha_languages_|. |
| std::set<std::string> all_supported_languages_; |
| - // An URLFetcher instance to fetch a server providing supported language list. |
| - scoped_ptr<net::URLFetcher> language_list_fetcher_; |
| + // A LanguageListFetcher instance to fetch a server providing supported |
| + // language list. |
| + scoped_ptr<LanguageListFetcher> language_list_fetcher_; |
| - // An URLFetcher instance to fetch a server providing supported alpha language |
| - // list. |
| - scoped_ptr<net::URLFetcher> alpha_language_list_fetcher_; |
| + // A LanguageListFetcher instance to fetch a server providing supported alpha |
| + // language list. |
| + scoped_ptr<LanguageListFetcher> alpha_language_list_fetcher_; |
| DISALLOW_COPY_AND_ASSIGN(TranslateLanguageList); |
| }; |