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

Side by Side Diff: chrome/browser/ui/android/infobars/translate_compact_infobar.cc

Issue 2894553002: Replace OnPageTranslate Obsever by a responder of delegate. (Closed)
Patch Set: Created 3 years, 7 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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/ui/android/infobars/translate_compact_infobar.h" 5 #include "chrome/browser/ui/android/infobars/translate_compact_infobar.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
10 #include "base/android/jni_array.h" 10 #include "base/android/jni_array.h"
11 #include "base/android/jni_string.h" 11 #include "base/android/jni_string.h"
12 #include "base/android/jni_weak_ref.h" 12 #include "base/android/jni_weak_ref.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "chrome/browser/translate/android/translate_utils.h" 14 #include "chrome/browser/translate/android/translate_utils.h"
15 #include "components/translate/core/browser/translate_infobar_delegate.h" 15 #include "components/translate/core/browser/translate_infobar_delegate.h"
16 #include "jni/TranslateCompactInfoBar_jni.h" 16 #include "jni/TranslateCompactInfoBar_jni.h"
17 17
18 using base::android::JavaParamRef; 18 using base::android::JavaParamRef;
19 using base::android::ScopedJavaLocalRef; 19 using base::android::ScopedJavaLocalRef;
20 20
21 // TranslateInfoBar ----------------------------------------------------------- 21 // TranslateInfoBar -----------------------------------------------------------
22 22
23 TranslateCompactInfoBar::TranslateCompactInfoBar( 23 TranslateCompactInfoBar::TranslateCompactInfoBar(
napper 2017/05/19 00:17:50 Dont you need to initialize action_flags_ here?
Leo 2017/05/19 03:30:23 Acknowledged.
24 std::unique_ptr<translate::TranslateInfoBarDelegate> delegate) 24 std::unique_ptr<translate::TranslateInfoBarDelegate> delegate)
25 : InfoBarAndroid(std::move(delegate)) { 25 : InfoBarAndroid(std::move(delegate)) {
26 // |translate_driver| must already be bound. 26 GetDelegate()->SetResponder(this);
27 DCHECK(GetDelegate()->GetTranslateDriver());
28 translate_driver_ = static_cast<translate::ContentTranslateDriver*>(
29 GetDelegate()->GetTranslateDriver());
30 translate_driver_->AddObserver(this);
31 } 27 }
32 28
33 TranslateCompactInfoBar::~TranslateCompactInfoBar() { 29 TranslateCompactInfoBar::~TranslateCompactInfoBar() {
34 DCHECK(translate_driver_); 30 GetDelegate()->SetResponder(nullptr);
35 translate_driver_->RemoveObserver(this);
36 } 31 }
37 32
38 ScopedJavaLocalRef<jobject> TranslateCompactInfoBar::CreateRenderInfoBar( 33 ScopedJavaLocalRef<jobject> TranslateCompactInfoBar::CreateRenderInfoBar(
39 JNIEnv* env) { 34 JNIEnv* env) {
40 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 35 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
41 36
42 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = 37 base::android::ScopedJavaLocalRef<jobjectArray> java_languages =
43 TranslateUtils::GetJavaLanguages(env, delegate); 38 TranslateUtils::GetJavaLanguages(env, delegate);
44 base::android::ScopedJavaLocalRef<jobjectArray> java_codes = 39 base::android::ScopedJavaLocalRef<jobjectArray> java_codes =
45 TranslateUtils::GetJavaLanguageCodes(env, delegate); 40 TranslateUtils::GetJavaLanguageCodes(env, delegate);
(...skipping 14 matching lines...) Expand all
60 java_hash_codes); 55 java_hash_codes);
61 } 56 }
62 57
63 void TranslateCompactInfoBar::ProcessButton(int action) { 58 void TranslateCompactInfoBar::ProcessButton(int action) {
64 if (!owner()) 59 if (!owner())
65 return; // We're closing; don't call anything, it might access the owner. 60 return; // We're closing; don't call anything, it might access the owner.
66 61
67 // TODO(ramyasharma): Handle other button clicks. 62 // TODO(ramyasharma): Handle other button clicks.
68 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 63 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
69 if (action == InfoBarAndroid::ACTION_TRANSLATE) { 64 if (action == InfoBarAndroid::ACTION_TRANSLATE) {
65 action_flags |= FLAG_TRANSLATE;
70 delegate->Translate(); 66 delegate->Translate();
71 if (!delegate->ShouldAlwaysTranslate() && ShouldAutoAlwaysTranslate()) { 67 if (!delegate->ShouldAlwaysTranslate() && ShouldAutoAlwaysTranslate()) {
72 JNIEnv* env = base::android::AttachCurrentThread(); 68 JNIEnv* env = base::android::AttachCurrentThread();
73 Java_TranslateCompactInfoBar_setAutoAlwaysTranslate(env, 69 Java_TranslateCompactInfoBar_setAutoAlwaysTranslate(env,
74 GetJavaInfoBar()); 70 GetJavaInfoBar());
75 } 71 }
76 } else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL) { 72 } else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL) {
73 action_flags |= FLAG_REVERT;
77 delegate->RevertTranslation(); 74 delegate->RevertTranslation();
78 } else if (action == InfoBarAndroid::ACTION_CANCEL) { 75 } else if (action == InfoBarAndroid::ACTION_CANCEL) {
79 delegate->TranslationDeclined(); 76 delegate->TranslationDeclined();
80 } else { 77 } else {
81 DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action); 78 DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action);
82 } 79 }
83 } 80 }
84 81
85 void TranslateCompactInfoBar::SetJavaInfoBar( 82 void TranslateCompactInfoBar::SetJavaInfoBar(
86 const base::android::JavaRef<jobject>& java_info_bar) { 83 const base::android::JavaRef<jobject>& java_info_bar) {
(...skipping 25 matching lines...) Expand all
112 } 109 }
113 110
114 void TranslateCompactInfoBar::ApplyBoolTranslateOption( 111 void TranslateCompactInfoBar::ApplyBoolTranslateOption(
115 JNIEnv* env, 112 JNIEnv* env,
116 const JavaParamRef<jobject>& obj, 113 const JavaParamRef<jobject>& obj,
117 int option, 114 int option,
118 jboolean value) { 115 jboolean value) {
119 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 116 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
120 if (option == TranslateUtils::OPTION_ALWAYS_TRANSLATE) { 117 if (option == TranslateUtils::OPTION_ALWAYS_TRANSLATE) {
121 if (delegate->ShouldAlwaysTranslate() != value) { 118 if (delegate->ShouldAlwaysTranslate() != value) {
119 action_flags |= FLAG_ALWAYS_TRANSLATE;
122 delegate->ToggleAlwaysTranslate(); 120 delegate->ToggleAlwaysTranslate();
123 } 121 }
124 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE) { 122 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE) {
125 if (value && delegate->IsTranslatableLanguageByPrefs()) { 123 if (value && delegate->IsTranslatableLanguageByPrefs()) {
124 action_flags |= FLAG_NEVER_LANGUAGE;
126 delegate->ToggleTranslatableLanguageByPrefs(); 125 delegate->ToggleTranslatableLanguageByPrefs();
127 } 126 }
128 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE_SITE) { 127 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE_SITE) {
129 if (value && !delegate->IsSiteBlacklisted()) { 128 if (value && !delegate->IsSiteBlacklisted()) {
129 action_flags |= FLAG_NEVER_SITE;
130 delegate->ToggleSiteBlacklist(); 130 delegate->ToggleSiteBlacklist();
131 } 131 }
132 } else { 132 } else {
133 DCHECK(false); 133 DCHECK(false);
134 } 134 }
135 } 135 }
136 136
137 void TranslateCompactInfoBar::OnPageTranslated(
138 const std::string& original_lang,
139 const std::string& translated_lang,
140 translate::TranslateErrors::Type error_type) {
141 if (!owner())
142 return; // We're closing; don't call anything, it might access the owner.
143
144 DCHECK(translate_driver_);
145 JNIEnv* env = base::android::AttachCurrentThread();
146 Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(),
147 error_type);
148 }
149
150 bool TranslateCompactInfoBar::ShouldAutoAlwaysTranslate() { 137 bool TranslateCompactInfoBar::ShouldAutoAlwaysTranslate() {
151 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 138 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
152 return (delegate->GetTranslationAcceptedCount() == kAcceptCountThreshold); 139 return (delegate->GetTranslationAcceptedCount() == kAcceptCountThreshold);
153 } 140 }
154 141
155 jboolean TranslateCompactInfoBar::ShouldAutoNeverTranslate( 142 jboolean TranslateCompactInfoBar::ShouldAutoNeverTranslate(
156 JNIEnv* env, 143 JNIEnv* env,
157 const base::android::JavaParamRef<jobject>& obj) { 144 const base::android::JavaParamRef<jobject>& obj) {
158 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 145 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
159 return (delegate->GetTranslationDeniedCount() == kDeniedCountThreshold); 146 return (delegate->GetTranslationDeniedCount() == kDeniedCountThreshold);
160 } 147 }
161 148
162 translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() { 149 translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() {
163 return delegate()->AsTranslateInfoBarDelegate(); 150 return delegate()->AsTranslateInfoBarDelegate();
164 } 151 }
165 152
153 void TranslateCompactInfoBar::ActionOnStep(
154 translate::TranslateStep step,
155 translate::TranslateErrors::Type error_type) {
156 if (!owner())
157 return; // We're closing; don't call anything.
158
159 if ((step == translate::TRANSLATE_STEP_AFTER_TRANSLATE) ||
160 (step == translate::TRANSLATE_STEP_TRANSLATE_ERROR)) {
161 JNIEnv* env = base::android::AttachCurrentThread();
napper 2017/05/19 00:17:50 Can this be: const JNIEnv* const env ... or at l
Leo 2017/05/19 03:30:23 Not sure whether JNI framework has treated the env
162 Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(),
163 error_type);
164 }
165 }
166
167 bool TranslateCompactInfoBar::Declined() {
168 return action_flags == 0;
napper 2017/05/19 00:17:50 It might be clearer if you had: FLAG_NONE = 0 th
Leo 2017/05/19 03:30:23 Acknowledged.
169 };
170
166 // Native JNI methods --------------------------------------------------------- 171 // Native JNI methods ---------------------------------------------------------
167 172
168 // static 173 // static
169 bool RegisterTranslateCompactInfoBar(JNIEnv* env) { 174 bool RegisterTranslateCompactInfoBar(JNIEnv* env) {
170 return RegisterNativesImpl(env); 175 return RegisterNativesImpl(env);
171 } 176 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698