| Index: chrome/browser/translate/translate_manager2.h
|
| diff --git a/chrome/browser/translate/translate_manager2.h b/chrome/browser/translate/translate_manager2.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5e2807058303087b0ff2cc523cc026219082997c
|
| --- /dev/null
|
| +++ b/chrome/browser/translate/translate_manager2.h
|
| @@ -0,0 +1,170 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_TRANSLATE_TRANSLATE_MANAGER2_H_
|
| +#define CHROME_BROWSER_TRANSLATE_TRANSLATE_MANAGER2_H_
|
| +
|
| +#include <map>
|
| +#include <set>
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/lazy_instance.h"
|
| +#include "base/singleton.h"
|
| +#include "base/task.h"
|
| +#include "chrome/common/net/url_fetcher.h"
|
| +#include "chrome/common/notification_observer.h"
|
| +#include "chrome/common/notification_registrar.h"
|
| +#include "chrome/common/translate_errors.h"
|
| +
|
| +class GURL;
|
| +struct PageTranslatedDetails;
|
| +class PrefService;
|
| +class TabContents;
|
| +class TranslateInfoBarDelegate2;
|
| +
|
| +// The TranslateManager class is responsible for showing an info-bar when a page
|
| +// in a language different than the user language is loaded. It triggers the
|
| +// page translation the user requests.
|
| +// It is a singleton.
|
| +
|
| +class TranslateManager2 : public NotificationObserver,
|
| + public URLFetcher::Delegate {
|
| + public:
|
| + virtual ~TranslateManager2();
|
| +
|
| + // Translates the page contents from |source_lang| to |target_lang|.
|
| + // The actual translation might be performed asynchronously if the translate
|
| + // script is not yet available.
|
| + void TranslatePage(TabContents* tab_contents,
|
| + const std::string& source_lang,
|
| + const std::string& target_lang);
|
| +
|
| + // Reverts the contents of the page in |tab_contents| to its original
|
| + // language.
|
| + void RevertTranslation(TabContents* tab_contents);
|
| +
|
| + // Clears the translate script, so it will be fetched next time we translate.
|
| + // Currently used by unit-tests.
|
| + void ClearTranslateScript() { translate_script_.clear(); }
|
| +
|
| + // NotificationObserver implementation:
|
| + virtual void Observe(NotificationType type,
|
| + const NotificationSource& source,
|
| + const NotificationDetails& details);
|
| +
|
| + // URLFetcher::Delegate implementation:
|
| + virtual void OnURLFetchComplete(const URLFetcher* source,
|
| + const GURL& url,
|
| + const URLRequestStatus& status,
|
| + int response_code,
|
| + const ResponseCookies& cookies,
|
| + const std::string& data);
|
| +
|
| + // Convenience method to know if a tab is showing a translate infobar.
|
| + static bool IsShowingTranslateInfobar(TabContents* tab);
|
| +
|
| + // Returns true if the URL can be translated, if it is not an internal URL
|
| + // (chrome:// and others).
|
| + static bool IsTranslatableURL(const GURL& url);
|
| +
|
| + // Fills |languages| with the list of languages that the translate server can
|
| + // translate to and from.
|
| + static void GetSupportedLanguages(std::vector<std::string>* languages);
|
| +
|
| + // Returns the language code that can be used with the Translate method for a
|
| + // specified |chrome_locale|.
|
| + static std::string GetLanguageCode(const std::string& chrome_locale);
|
| +
|
| + // Returns true if |language| is supported by the translation server.
|
| + static bool IsSupportedLanguage(const std::string& language);
|
| +
|
| + protected:
|
| + TranslateManager2();
|
| +
|
| + private:
|
| + friend struct DefaultSingletonTraits<TranslateManager2>;
|
| +
|
| + // Structure that describes a translate request.
|
| + // Translation may be deferred while the translate script is being retrieved
|
| + // from the translate server.
|
| + struct PendingRequest {
|
| + int render_process_id;
|
| + int render_view_id;
|
| + int page_id;
|
| + std::string source_lang;
|
| + std::string target_lang;
|
| + };
|
| +
|
| + // Starts the translation process on |tab| containing the page in the
|
| + // |page_lang| language.
|
| + void InitiateTranslation(TabContents* tab, const std::string& page_lang);
|
| +
|
| + // If the tab identified by |process_id| and |render_id| has been closed, this
|
| + // does nothing, otherwise it calls InitiateTranslation.
|
| + void InitiateTranslationPosted(int process_id,
|
| + int render_id,
|
| + const std::string& page_lang);
|
| +
|
| + // Sends a translation request to the RenderView of |tab_contents|.
|
| + void DoTranslatePage(TabContents* tab_contents,
|
| + const std::string& translate_script,
|
| + const std::string& source_lang,
|
| + const std::string& target_lang);
|
| +
|
| + // Shows the after translate or error infobar depending on the details.
|
| + void PageTranslated(TabContents* tab, PageTranslatedDetails* details);
|
| +
|
| + // Returns true if the passed language has been configured by the user as an
|
| + // accept language.
|
| + bool IsAcceptLanguage(TabContents* tab, const std::string& language);
|
| +
|
| + // Initializes the |accept_languages_| language table based on the associated
|
| + // preference in |prefs|.
|
| + void InitAcceptLanguages(PrefService* prefs);
|
| +
|
| + // Fetches the JS translate script (the script that is injected in the page
|
| + // to translate it).
|
| + void RequestTranslateScript();
|
| +
|
| + // Shows the specified translate |infobar| in the given |tab|. If a current
|
| + // translate infobar is showing, it just replaces it with the new one.
|
| + void ShowInfoBar(TabContents* tab, TranslateInfoBarDelegate2* infobar);
|
| +
|
| + // Returns the language to translate to, which is the language the UI is
|
| + // configured in. Returns an empty string if that language is not supported
|
| + // by the translation service.
|
| + static std::string GetTargetLanguage();
|
| +
|
| + // Returns the translate info bar showing in |tab| or NULL if none is showing.
|
| + static TranslateInfoBarDelegate2* GetTranslateInfoBarDelegate2(
|
| + TabContents* tab);
|
| +
|
| + NotificationRegistrar notification_registrar_;
|
| +
|
| + // A map that associates a profile with its parsed "accept languages".
|
| + typedef std::set<std::string> LanguageSet;
|
| + typedef std::map<PrefService*, LanguageSet> PrefServiceLanguagesMap;
|
| + PrefServiceLanguagesMap accept_languages_;
|
| +
|
| + ScopedRunnableMethodFactory<TranslateManager2> method_factory_;
|
| +
|
| + // The JS injected in the page to do the translation.
|
| + std::string translate_script_;
|
| +
|
| + // Whether the translate JS is currently being retrieved.
|
| + bool translate_script_request_pending_;
|
| +
|
| + // The list of pending translate requests. Translate requests are queued when
|
| + // the translate script is not ready and has to be fetched from the translate
|
| + // server.
|
| + std::vector<PendingRequest> pending_requests_;
|
| +
|
| + // The languages supported by the translation server.
|
| + static base::LazyInstance<std::set<std::string> > supported_languages_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TranslateManager2);
|
| +};
|
| +
|
| +#endif // CHROME_BROWSER_TRANSLATE_TRANSLATE_MANAGER2_H_
|
|
|