Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_TRANSLATE_TRANSLATE_LANGUAGE_LIST_H_ | 5 #ifndef CHROME_BROWSER_TRANSLATE_TRANSLATE_LANGUAGE_LIST_H_ |
| 6 #define CHROME_BROWSER_TRANSLATE_TRANSLATE_LANGUAGE_LIST_H_ | 6 #define CHROME_BROWSER_TRANSLATE_TRANSLATE_LANGUAGE_LIST_H_ |
| 7 | 7 |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/callback.h" | |
| 12 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
| 14 #include "googleurl/src/gurl.h" | |
| 15 #include "net/base/network_change_notifier.h" | |
| 13 #include "net/url_request/url_fetcher_delegate.h" | 16 #include "net/url_request/url_fetcher_delegate.h" |
| 14 | 17 |
| 15 namespace net { | 18 namespace net { |
| 16 class URLFetcher; | 19 class URLFetcher; |
| 17 } | 20 } |
| 18 | 21 |
| 19 // The TranslateLanguageList class is responsible for maintaining the latest | 22 // The TranslateLanguageList class is responsible for maintaining the latest |
| 20 // supporting language list. | 23 // supporting language list. |
| 21 // This class is defined to be owned only by TranslateManager. | 24 // This class is defined to be owned only by TranslateManager. |
| 22 class TranslateLanguageList : public net::URLFetcherDelegate { | 25 class TranslateLanguageList |
| 26 : public net::NetworkChangeNotifier::NetworkChangeObserver { | |
| 23 public: | 27 public: |
| 24 TranslateLanguageList(); | 28 TranslateLanguageList(); |
| 25 virtual ~TranslateLanguageList(); | 29 virtual ~TranslateLanguageList(); |
| 26 | 30 |
| 27 // net::URLFetcherDelegate implementation: | |
| 28 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; | |
| 29 | |
| 30 // Fills |languages| with the list of languages that the translate server can | 31 // Fills |languages| with the list of languages that the translate server can |
| 31 // translate to and from. |languages| will include alpha languages. | 32 // translate to and from. |languages| will include alpha languages. |
| 32 void GetSupportedLanguages(std::vector<std::string>* languages); | 33 void GetSupportedLanguages(std::vector<std::string>* languages); |
| 33 | 34 |
| 34 // Returns the language code that can be used with the Translate method for a | 35 // Returns the language code that can be used with the Translate method for a |
| 35 // specified |chrome_locale|. | 36 // specified |chrome_locale|. |
| 36 std::string GetLanguageCode(const std::string& chrome_locale); | 37 std::string GetLanguageCode(const std::string& chrome_locale); |
| 37 | 38 |
| 38 // Returns true if |language| is supported by the translation server. It also | 39 // Returns true if |language| is supported by the translation server. It also |
| 39 // returns true against alpha languages. | 40 // returns true against alpha languages. |
| 40 bool IsSupportedLanguage(const std::string& language); | 41 bool IsSupportedLanguage(const std::string& language); |
| 41 | 42 |
| 42 // Returns true if |language| is supported by the translation server as a | 43 // Returns true if |language| is supported by the translation server as a |
| 43 // alpha language. | 44 // alpha language. |
| 44 bool IsAlphaLanguage(const std::string& language); | 45 bool IsAlphaLanguage(const std::string& language); |
| 45 | 46 |
| 46 // Fetches the language list from the translate server. It will not retry | 47 // Fetches the language list from the translate server. It will not retry |
| 47 // more than kMaxRetryLanguageListFetch times. | 48 // more than kMaxRetryLanguageListFetch times. Do nothing if the list is |
| 49 // already updated. | |
| 48 void RequestLanguageList(); | 50 void RequestLanguageList(); |
| 49 | 51 |
| 52 // net::NetworkChangeObserver implementation: | |
| 53 virtual void OnNetworkChanged( | |
| 54 net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; | |
| 55 | |
| 50 // static const values shared with our browser tests. | 56 // static const values shared with our browser tests. |
| 51 static const char kLanguageListCallbackName[]; | 57 static const char kLanguageListCallbackName[]; |
| 52 static const char kTargetLanguagesKey[]; | 58 static const char kTargetLanguagesKey[]; |
| 53 | 59 |
| 54 private: | 60 private: |
| 61 // The LanguageListFetcher class implements a client to fetch a server | |
| 62 // supported language list. It also maintains state to represent if the fetch | |
| 63 // is completed successfully to try again later. | |
| 64 class LanguageListFetcher : public net::URLFetcherDelegate { | |
| 65 public: | |
| 66 // Callback type for Request(). | |
| 67 typedef base::Callback<void(bool, bool, const std::string&)> Callback; | |
| 68 | |
| 69 // 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
| |
| 70 enum State { | |
| 71 IDLE, // No fetch request was issued. | |
| 72 REQUESTING, // A fetch request was issued, but not finished yet. | |
| 73 COMPLETED, // The last fetch request was finished successfully. | |
| 74 FAILED, // The last fetch request was finished with a failure. | |
| 75 }; | |
| 76 | |
| 77 explicit LanguageListFetcher(bool include_alpha_languages); | |
| 78 virtual ~LanguageListFetcher(); | |
| 79 | |
| 80 // Requests to fetch a server supported language list. |callback| will be | |
| 81 // invoked when the request is finished asynchronously. | |
| 82 void Request(const Callback& callback); | |
| 83 | |
| 84 // Gets internal state. | |
| 85 State state() { return state_; } | |
| 86 | |
| 87 // net::URLFetcherDelegate implementation: | |
| 88 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; | |
| 89 | |
| 90 private: | |
| 91 // Represents if this instance should fetch a supported language list | |
| 92 // including alpha languages. | |
| 93 bool include_alpha_languages_; | |
| 94 | |
| 95 // Internal state. | |
| 96 enum State state_; | |
| 97 | |
| 98 // URLFetcher instance. | |
| 99 scoped_ptr<net::URLFetcher> fetcher_; | |
| 100 | |
| 101 // Callback passed at Request(). It will be invoked when asynchronous | |
| 102 // fetch operation is finished. | |
| 103 Callback callback_; | |
| 104 | |
| 105 DISALLOW_COPY_AND_ASSIGN(LanguageListFetcher); | |
| 106 }; | |
| 107 | |
| 108 // Callback function called when LanguageListFetcher::Request() is finished. | |
| 109 void OnLanguageListFetchComplete(bool include_alpha_languages, | |
| 110 bool success, | |
| 111 const std::string& data); | |
| 112 | |
| 55 // Updates |all_supported_languages_| to contain the union of | 113 // Updates |all_supported_languages_| to contain the union of |
| 56 // |supported_languages_| and |supported_alpha_languages_|. | 114 // |supported_languages_| and |supported_alpha_languages_|. |
| 57 void UpdateSupportedLanguages(); | 115 void UpdateSupportedLanguages(); |
| 58 | 116 |
| 59 // The languages supported by the translation server. | 117 // The languages supported by the translation server. |
| 60 std::set<std::string> supported_languages_; | 118 std::set<std::string> supported_languages_; |
| 61 | 119 |
| 62 // The alpha languages supported by the translation server. | 120 // The alpha languages supported by the translation server. |
| 63 std::set<std::string> supported_alpha_languages_; | 121 std::set<std::string> supported_alpha_languages_; |
| 64 | 122 |
| 65 // All the languages supported by the translation server. It contains the | 123 // All the languages supported by the translation server. It contains the |
| 66 // union of |supported_languages_| and |supported_alpha_languages_|. | 124 // union of |supported_languages_| and |supported_alpha_languages_|. |
| 67 std::set<std::string> all_supported_languages_; | 125 std::set<std::string> all_supported_languages_; |
| 68 | 126 |
| 69 // An URLFetcher instance to fetch a server providing supported language list. | 127 // A LanguageListFetcher instance to fetch a server providing supported |
| 70 scoped_ptr<net::URLFetcher> language_list_fetcher_; | 128 // language list. |
| 129 scoped_ptr<LanguageListFetcher> language_list_fetcher_; | |
| 71 | 130 |
| 72 // An URLFetcher instance to fetch a server providing supported alpha language | 131 // A LanguageListFetcher instance to fetch a server providing supported alpha |
| 73 // list. | 132 // language list. |
| 74 scoped_ptr<net::URLFetcher> alpha_language_list_fetcher_; | 133 scoped_ptr<LanguageListFetcher> alpha_language_list_fetcher_; |
| 75 | 134 |
| 76 DISALLOW_COPY_AND_ASSIGN(TranslateLanguageList); | 135 DISALLOW_COPY_AND_ASSIGN(TranslateLanguageList); |
| 77 }; | 136 }; |
| 78 | 137 |
| 79 #endif // CHROME_BROWSER_TRANSLATE_TRANSLATE_LANGUAGE_LIST_H_ | 138 #endif // CHROME_BROWSER_TRANSLATE_TRANSLATE_LANGUAGE_LIST_H_ |
| OLD | NEW |