Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(631)

Unified Diff: chrome/browser/translate/translate_manager2.h

Issue 2602003: Refactored the translate infobars. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Synced Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/translate/translate_infobar_view.h ('k') | chrome/browser/translate/translate_manager2.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « chrome/browser/translate/translate_infobar_view.h ('k') | chrome/browser/translate/translate_manager2.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698