| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/tab_contents/language_state.h" | 5 #include "components/translate/core/browser/language_state.h" |
| 6 | 6 |
| 7 #include "chrome/browser/tab_contents/language_state_observer.h" | 7 #include "base/logging.h" |
| 8 #include "content/public/browser/navigation_controller.h" | 8 #include "components/translate/core/browser/translate_client.h" |
| 9 #include "content/public/browser/navigation_details.h" | |
| 10 #include "content/public/browser/navigation_entry.h" | |
| 11 #include "content/public/browser/web_contents.h" | |
| 12 | 9 |
| 13 using content::NavigationController; | 10 LanguageState::LanguageState(TranslateClient* client) |
| 14 | |
| 15 LanguageState::LanguageState(NavigationController* nav_controller) | |
| 16 : is_page_translated_(false), | 11 : is_page_translated_(false), |
| 17 navigation_controller_(nav_controller), | 12 translate_client_(client), |
| 18 page_needs_translation_(false), | 13 page_needs_translation_(false), |
| 19 translation_pending_(false), | 14 translation_pending_(false), |
| 20 translation_declined_(false), | 15 translation_declined_(false), |
| 21 in_page_navigation_(false), | 16 in_page_navigation_(false), |
| 22 translate_enabled_(false), | 17 translate_enabled_(false) { |
| 23 observer_(NULL) { | 18 DCHECK(translate_client_); |
| 24 } | 19 } |
| 25 | 20 |
| 26 LanguageState::~LanguageState() { | 21 LanguageState::~LanguageState() { |
| 27 } | 22 } |
| 28 | 23 |
| 29 void LanguageState::DidNavigate( | 24 void LanguageState::DidNavigate(bool in_page_navigation, |
| 30 const content::LoadCommittedDetails& details) { | 25 bool is_main_frame, |
| 31 in_page_navigation_ = details.is_in_page; | 26 bool reload) { |
| 32 if (in_page_navigation_ || !details.is_main_frame) | 27 in_page_navigation_ = in_page_navigation; |
| 28 if (in_page_navigation_ || !is_main_frame) |
| 33 return; // Don't reset our states, the page has not changed. | 29 return; // Don't reset our states, the page has not changed. |
| 34 | 30 |
| 35 bool reload = | |
| 36 details.entry->GetTransitionType() == content::PAGE_TRANSITION_RELOAD || | |
| 37 details.type == content::NAVIGATION_TYPE_SAME_PAGE; | |
| 38 if (reload) { | 31 if (reload) { |
| 39 // We might not get a LanguageDetermined notifications on reloads. Make sure | 32 // We might not get a LanguageDetermined notifications on reloads. Make sure |
| 40 // to keep the original language and to set current_lang_ so | 33 // to keep the original language and to set current_lang_ so |
| 41 // IsPageTranslated() returns false. | 34 // IsPageTranslated() returns false. |
| 42 current_lang_ = original_lang_; | 35 current_lang_ = original_lang_; |
| 43 } else { | 36 } else { |
| 44 prev_original_lang_ = original_lang_; | 37 prev_original_lang_ = original_lang_; |
| 45 prev_current_lang_ = current_lang_; | 38 prev_current_lang_ = current_lang_; |
| 46 original_lang_.clear(); | 39 original_lang_.clear(); |
| 47 current_lang_.clear(); | 40 current_lang_.clear(); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 72 bool LanguageState::InTranslateNavigation() const { | 65 bool LanguageState::InTranslateNavigation() const { |
| 73 // The user is in the same translate session if | 66 // The user is in the same translate session if |
| 74 // - no translation is pending | 67 // - no translation is pending |
| 75 // - this page is in the same language as the previous page | 68 // - this page is in the same language as the previous page |
| 76 // - the previous page had been translated | 69 // - the previous page had been translated |
| 77 // - the new page was navigated through a link. | 70 // - the new page was navigated through a link. |
| 78 return | 71 return |
| 79 !translation_pending_ && | 72 !translation_pending_ && |
| 80 prev_original_lang_ == original_lang_ && | 73 prev_original_lang_ == original_lang_ && |
| 81 prev_original_lang_ != prev_current_lang_ && | 74 prev_original_lang_ != prev_current_lang_ && |
| 82 navigation_controller_ && | 75 translate_client_->IsLinkNavigation(); |
| 83 navigation_controller_->GetActiveEntry() && | |
| 84 navigation_controller_->GetActiveEntry()->GetTransitionType() == | |
| 85 content::PAGE_TRANSITION_LINK; | |
| 86 } | 76 } |
| 87 | 77 |
| 88 void LanguageState::SetCurrentLanguage(const std::string& language) { | 78 void LanguageState::SetCurrentLanguage(const std::string& language) { |
| 89 current_lang_ = language; | 79 current_lang_ = language; |
| 90 SetIsPageTranslated(current_lang_ != original_lang_); | 80 SetIsPageTranslated(current_lang_ != original_lang_); |
| 91 } | 81 } |
| 92 | 82 |
| 93 std::string LanguageState::AutoTranslateTo() const { | 83 std::string LanguageState::AutoTranslateTo() const { |
| 94 if (InTranslateNavigation() && !is_page_translated_) | 84 if (InTranslateNavigation() && !is_page_translated_) |
| 95 return prev_current_lang_; | 85 return prev_current_lang_; |
| 96 | 86 |
| 97 return std::string(); | 87 return std::string(); |
| 98 } | 88 } |
| 99 | 89 |
| 100 void LanguageState::SetTranslateEnabled(bool value) { | 90 void LanguageState::SetTranslateEnabled(bool value) { |
| 101 if (translate_enabled_ == value) | 91 if (translate_enabled_ == value) |
| 102 return; | 92 return; |
| 103 | 93 |
| 104 translate_enabled_ = value; | 94 translate_enabled_ = value; |
| 105 if (observer_) { | 95 translate_client_->OnTranslateEnabledChanged(); |
| 106 content::WebContents* web_contents = | |
| 107 navigation_controller_->GetWebContents(); | |
| 108 observer_->OnTranslateEnabledChanged(web_contents); | |
| 109 } | |
| 110 } | 96 } |
| 111 | 97 |
| 112 bool LanguageState::HasLanguageChanged() const { | 98 bool LanguageState::HasLanguageChanged() const { |
| 113 return original_lang_ != prev_original_lang_; | 99 return original_lang_ != prev_original_lang_; |
| 114 } | 100 } |
| 115 | 101 |
| 116 void LanguageState::SetIsPageTranslated(bool value) { | 102 void LanguageState::SetIsPageTranslated(bool value) { |
| 117 if (is_page_translated_ == value) | 103 if (is_page_translated_ == value) |
| 118 return; | 104 return; |
| 119 | 105 |
| 120 is_page_translated_ = value; | 106 is_page_translated_ = value; |
| 121 if (observer_) { | 107 translate_client_->OnIsPageTranslatedChanged(); |
| 122 content::WebContents* web_contents = | |
| 123 navigation_controller_->GetWebContents(); | |
| 124 observer_->OnIsPageTranslatedChanged(web_contents); | |
| 125 } | |
| 126 | 108 |
| 127 // With the translation done, the translate feature must be enabled. | 109 // With the translation done, the translate feature must be enabled. |
| 128 if (is_page_translated_) | 110 if (is_page_translated_) |
| 129 SetTranslateEnabled(true); | 111 SetTranslateEnabled(true); |
| 130 } | 112 } |
| OLD | NEW |