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

Side by Side Diff: components/translate/core/browser/language_state.cc

Issue 133273029: Move LanguageState to the translate component (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix more compile issues Created 6 years, 11 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 unified diff | Download patch
OLDNEW
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_driver.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(TranslateDriver* driver)
14
15 LanguageState::LanguageState(NavigationController* nav_controller)
16 : is_page_translated_(false), 11 : is_page_translated_(false),
17 navigation_controller_(nav_controller), 12 translate_driver_(driver),
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_driver_);
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
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_driver_->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_driver_->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_driver_->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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698