summaryrefslogtreecommitdiffstats
path: root/chrome/browser/tab_contents/language_state.cc
diff options
context:
space:
mode:
authorjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-12 21:53:55 +0000
committerjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-12 21:53:55 +0000
commit3b1c18191d41eac0a551b3009269a259757ca070 (patch)
tree5f466b716abc81ac3bb67262522ba1af0d699588 /chrome/browser/tab_contents/language_state.cc
parent7d9ad0b30c0775a7345e965294c9f86bb0d543e5 (diff)
downloadchromium_src-3b1c18191d41eac0a551b3009269a259757ca070.zip
chromium_src-3b1c18191d41eac0a551b3009269a259757ca070.tar.gz
chromium_src-3b1c18191d41eac0a551b3009269a259757ca070.tar.bz2
Implements the auto-translate on click: if you have translated
a page and are navigating to a new page in the same language by clicking a link, the new page is automatically translated. In order to do that I moved the language state from the navigation entry to some dedicated class that each TabContents owns. Also added some basic unit-testing for good measure. BUG=35477 TEST=See bug steps. Run unit-tests. Review URL: http://codereview.chromium.org/596092 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38961 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/tab_contents/language_state.cc')
-rw-r--r--chrome/browser/tab_contents/language_state.cc51
1 files changed, 51 insertions, 0 deletions
diff --git a/chrome/browser/tab_contents/language_state.cc b/chrome/browser/tab_contents/language_state.cc
new file mode 100644
index 0000000..8522ed3
--- /dev/null
+++ b/chrome/browser/tab_contents/language_state.cc
@@ -0,0 +1,51 @@
+// 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.
+
+#include "chrome/browser/tab_contents/language_state.h"
+
+#include "chrome/browser/tab_contents/navigation_controller.h"
+#include "chrome/browser/tab_contents/navigation_entry.h"
+
+LanguageState::LanguageState(NavigationController* nav_controller)
+ : navigation_controller_(nav_controller),
+ translation_pending_(false) {
+}
+
+LanguageState::~LanguageState() {
+}
+
+void LanguageState::DidNavigate() {
+ prev_original_lang_ = original_lang_;
+ prev_current_lang_ = current_lang_;
+
+ original_lang_.clear();
+ current_lang_.clear();
+
+ translation_pending_ = false;
+}
+
+void LanguageState::LanguageDetermined(const std::string& page_language) {
+ original_lang_ = page_language;
+ current_lang_ = page_language;
+}
+
+std::string LanguageState::AutoTranslateTo() const {
+ // Only auto-translate if:
+ // - no translation is pending
+ // - this page is in the same language as the previous page
+ // - the previous page had been translated
+ // - this page is not already translated
+ // - the new page was navigated through a link.
+ if (!translation_pending_ &&
+ prev_original_lang_ == original_lang_ &&
+ prev_original_lang_ != prev_current_lang_ &&
+ original_lang_ == current_lang_ &&
+ navigation_controller_->GetActiveEntry() &&
+ navigation_controller_->GetActiveEntry()->transition_type() ==
+ PageTransition::LINK) {
+ return prev_current_lang_;
+ }
+
+ return std::string();
+}