diff options
author | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-12 21:53:55 +0000 |
---|---|---|
committer | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-12 21:53:55 +0000 |
commit | 3b1c18191d41eac0a551b3009269a259757ca070 (patch) | |
tree | 5f466b716abc81ac3bb67262522ba1af0d699588 /chrome/browser/tab_contents/language_state.cc | |
parent | 7d9ad0b30c0775a7345e965294c9f86bb0d543e5 (diff) | |
download | chromium_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.cc | 51 |
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(); +} |