NaCl: Update revision in DEPS, r12770 -> r12773
[chromium-blink-merge.git] / chrome / renderer / translate / translate_helper.h
blob88dd518cf69ab98019089428ef253b0121894002
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_RENDERER_TRANSLATE_TRANSLATE_HELPER_H_
6 #define CHROME_RENDERER_TRANSLATE_TRANSLATE_HELPER_H_
8 #include <string>
10 #include "base/gtest_prod_util.h"
11 #include "base/memory/weak_ptr.h"
12 #include "base/time/time.h"
13 #include "components/translate/core/common/translate_errors.h"
14 #include "content/public/renderer/render_view_observer.h"
16 namespace blink {
17 class WebDocument;
18 class WebFrame;
21 // This class deals with page translation.
22 // There is one TranslateHelper per RenderView.
24 class TranslateHelper : public content::RenderViewObserver {
25 public:
26 explicit TranslateHelper(content::RenderView* render_view);
27 virtual ~TranslateHelper();
29 // Informs us that the page's text has been extracted.
30 void PageCaptured(int page_id, const base::string16& contents);
32 protected:
33 // The following methods are protected so they can be overridden in
34 // unit-tests.
35 void OnTranslatePage(int page_id,
36 const std::string& translate_script,
37 const std::string& source_lang,
38 const std::string& target_lang);
39 void OnRevertTranslation(int page_id);
41 // Returns true if the translate library is available, meaning the JavaScript
42 // has already been injected in that page.
43 virtual bool IsTranslateLibAvailable();
45 // Returns true if the translate library has been initialized successfully.
46 virtual bool IsTranslateLibReady();
48 // Returns true if the translation script has finished translating the page.
49 virtual bool HasTranslationFinished();
51 // Returns true if the translation script has reported an error performing the
52 // translation.
53 virtual bool HasTranslationFailed();
55 // Starts the translation by calling the translate library. This method
56 // should only be called when the translate script has been injected in the
57 // page. Returns false if the call failed immediately.
58 virtual bool StartTranslation();
60 // Asks the Translate element in the page what the language of the page is.
61 // Can only be called if a translation has happened and was successful.
62 // Returns the language code on success, an empty string on failure.
63 virtual std::string GetOriginalPageLanguage();
65 // Adjusts a delay time for a posted task. This is used in tests to do tasks
66 // immediately by returning 0.
67 virtual base::TimeDelta AdjustDelay(int delayInMs);
69 // Executes the JavaScript code in |script| in the main frame of RenderView.
70 virtual void ExecuteScript(const std::string& script);
72 // Executes the JavaScript code in |script| in the main frame of RenderView,
73 // and returns the boolean returned by the script evaluation if the script was
74 // run successfully. Otherwise, returns |fallback| value.
75 virtual bool ExecuteScriptAndGetBoolResult(const std::string& script,
76 bool fallback);
78 // Executes the JavaScript code in |script| in the main frame of RenderView,
79 // and returns the string returned by the script evaluation if the script was
80 // run successfully. Otherwise, returns empty string.
81 virtual std::string ExecuteScriptAndGetStringResult(
82 const std::string& script);
84 // Executes the JavaScript code in |script| in the main frame of RenderView.
85 // and returns the number returned by the script evaluation if the script was
86 // run successfully. Otherwise, returns 0.0.
87 virtual double ExecuteScriptAndGetDoubleResult(const std::string& script);
89 private:
90 FRIEND_TEST_ALL_PREFIXES(TranslateHelperTest, AdoptHtmlLang);
91 FRIEND_TEST_ALL_PREFIXES(TranslateHelperTest,
92 CLDAgreeWithLanguageCodeHavingCountryCode);
93 FRIEND_TEST_ALL_PREFIXES(TranslateHelperTest,
94 CLDDisagreeWithWrongLanguageCode);
95 FRIEND_TEST_ALL_PREFIXES(TranslateHelperTest,
96 InvalidLanguageMetaTagProviding);
97 FRIEND_TEST_ALL_PREFIXES(TranslateHelperTest, LanguageCodeTypoCorrection);
98 FRIEND_TEST_ALL_PREFIXES(TranslateHelperTest, LanguageCodeSynonyms);
99 FRIEND_TEST_ALL_PREFIXES(TranslateHelperTest, ResetInvalidLanguageCode);
100 FRIEND_TEST_ALL_PREFIXES(TranslateHelperTest, SimilarLanguageCode);
101 FRIEND_TEST_ALL_PREFIXES(TranslateHelperTest, WellKnownWrongConfiguration);
103 // Converts language code to the one used in server supporting list.
104 static void ConvertLanguageCodeSynonym(std::string* code);
106 // Returns whether the page associated with |document| is a candidate for
107 // translation. Some pages can explictly specify (via a meta-tag) that they
108 // should not be translated.
109 static bool IsTranslationAllowed(blink::WebDocument* document);
111 // RenderViewObserver implementation.
112 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
114 // Cancels any translation that is currently being performed. This does not
115 // revert existing translations.
116 void CancelPendingTranslation();
118 // Checks if the current running page translation is finished or errored and
119 // notifies the browser accordingly. If the translation has not terminated,
120 // posts a task to check again later.
121 void CheckTranslateStatus();
123 // Called by TranslatePage to do the actual translation. |count| is used to
124 // limit the number of retries.
125 void TranslatePageImpl(int count);
127 // Sends a message to the browser to notify it that the translation failed
128 // with |error|.
129 void NotifyBrowserTranslationFailed(TranslateErrors::Type error);
131 // Convenience method to access the main frame. Can return NULL, typically
132 // if the page is being closed.
133 blink::WebFrame* GetMainFrame();
135 // ID to represent a page which TranslateHelper captured and determined a
136 // content language.
137 int page_id_;
139 // The states associated with the current translation.
140 bool translation_pending_;
141 std::string source_lang_;
142 std::string target_lang_;
144 // Time when a page langauge is determined. This is used to know a duration
145 // time from showing infobar to requesting translation.
146 base::TimeTicks language_determined_time_;
148 // Method factory used to make calls to TranslatePageImpl.
149 base::WeakPtrFactory<TranslateHelper> weak_method_factory_;
151 DISALLOW_COPY_AND_ASSIGN(TranslateHelper);
154 #endif // CHROME_RENDERER_TRANSLATE_TRANSLATE_HELPER_H_