1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// Copyright 2013 The Chromium Authors. All rights reserved. 2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// Use of this source code is governed by a BSD-style license that can be 3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// found in the LICENSE file. 4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#ifndef COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_LANGUAGE_LIST_H_ 6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#define COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_LANGUAGE_LIST_H_ 7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#include <set> 9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#include <string> 10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#include <vector> 11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#include "base/callback_list.h" 13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#include "base/memory/scoped_ptr.h" 14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#include "base/time/time.h" 15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangclass GURL; 17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangnamespace translate { 19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstruct TranslateEventDetails; 21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangclass TranslateURLFetcher; 22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// The TranslateLanguageList class is responsible for maintaining the latest 24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// supporting language list. 25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangclass TranslateLanguageList { 26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public: 27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang static const int kFetcherId = 1; 28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang TranslateLanguageList(); 30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang virtual ~TranslateLanguageList(); 31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Returns the last-updated time when the language list is fetched from the 33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Translate server. Returns null time if the list is yet to be fetched. 34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang base::Time last_updated() { return last_updated_; } 35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Fills |languages| with the list of languages that the translate server can 37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // translate to and from. |languages| will include alpha languages. 38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang void GetSupportedLanguages(std::vector<std::string>* languages); 39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Returns the language code that can be used with the Translate method for a 41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // specified |language|. (ex. GetLanguageCode("en-US") will return "en", and 42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // GetLanguageCode("zh-CN") returns "zh-CN") 43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang std::string GetLanguageCode(const std::string& language); 44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Returns true if |language| is supported by the translation server. It also 46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // returns true against alpha languages. 47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang bool IsSupportedLanguage(const std::string& language); 48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Returns true if |language| is supported by the translation server as a 50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // alpha language. 51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang bool IsAlphaLanguage(const std::string& language); 52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Fetches the language list from the translate server if resource requests 54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // are allowed, and otherwise keeps the request as pending until allowed. 55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang void RequestLanguageList(); 56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Sets whether requests are allowed. If |allowed| is true, this resumes any 58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // pending request. 59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang void SetResourceRequestsAllowed(bool allowed); 60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang typedef base::Callback<void(const TranslateEventDetails&)> EventCallback; 62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang typedef base::CallbackList<void(const TranslateEventDetails&)> 63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang EventCallbackList; 64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Registers a callback for translate events related to the language list, 66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // such as updates and download errors. 67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang scoped_ptr<EventCallbackList::Subscription> RegisterEventCallback( 68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang const EventCallback& callback); 69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Disables the language list updater. This is used only for testing now. 71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang static void DisableUpdate(); 72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // static const values shared with our browser tests. 74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang static const char kLanguageListCallbackName[]; 75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang static const char kTargetLanguagesKey[]; 76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang static const char kAlphaLanguagesKey[]; 77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private: 79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Callback function called when TranslateURLFetcher::Request() is finished. 80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang void OnLanguageListFetchComplete(int id, 81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang bool success, 82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang const std::string& data); 83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Notifies the callback list of a translate event. 85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang void NotifyEvent(int line, const std::string& message); 86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Parses |language_list| containing the list of languages that the translate 88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // server can translate to and from. 89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang void SetSupportedLanguages(const std::string& language_list); 90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Returns the url from which to load the list of languages. 92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang GURL TranslateLanguageUrl(); 93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Callbacks called on translate events. 95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang EventCallbackList callback_list_; 96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Whether the language list can be requested. 98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang bool resource_requests_allowed_; 99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // True if the list has to be fetched when resource requests are allowed. 101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang bool request_pending_; 102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // All the languages supported by the translation server. 104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang std::set<std::string> all_supported_languages_; 105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Alpha languages supported by the translation server. 107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang std::set<std::string> alpha_languages_; 108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // A LanguageListFetcher instance to fetch a server providing supported 110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // language list including alpha languages. 111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang scoped_ptr<TranslateURLFetcher> language_list_fetcher_; 112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // The last-updated time when the language list is sent. 114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang base::Time last_updated_; 115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang DISALLOW_COPY_AND_ASSIGN(TranslateLanguageList); 117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}; 118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang} // namespace translate 120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#endif // COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_LANGUAGE_LIST_H_ 122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang