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

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

Issue 1150193004: Straighten up life cycle of native InfoBar pointers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed david's comments Created 5 years, 6 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_infobar.h" 5 #include "chrome/browser/ui/android/infobars/translate_infobar.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h" 8 #include "base/android/jni_array.h"
9 #include "base/android/jni_weak_ref.h" 9 #include "base/android/jni_weak_ref.h"
10 #include "chrome/browser/translate/chrome_translate_client.h" 10 #include "chrome/browser/translate/chrome_translate_client.h"
11 #include "components/translate/core/browser/translate_infobar_delegate.h" 11 #include "components/translate/core/browser/translate_infobar_delegate.h"
12 #include "jni/TranslateInfoBarDelegate_jni.h" 12 #include "jni/TranslateInfoBar_jni.h"
13 13
14 // ChromeTranslateClient 14 // ChromeTranslateClient
15 // ---------------------------------------------------------- 15 // ----------------------------------------------------------
16 16
17 scoped_ptr<infobars::InfoBar> ChromeTranslateClient::CreateInfoBar( 17 scoped_ptr<infobars::InfoBar> ChromeTranslateClient::CreateInfoBar(
18 scoped_ptr<translate::TranslateInfoBarDelegate> delegate) const { 18 scoped_ptr<translate::TranslateInfoBarDelegate> delegate) const {
19 return make_scoped_ptr(new TranslateInfoBar(delegate.Pass())); 19 return make_scoped_ptr(new TranslateInfoBar(delegate.Pass()));
20 } 20 }
21 21
22 22
23 // TranslateInfoBar ----------------------------------------------------------- 23 // TranslateInfoBar -----------------------------------------------------------
24 24
25 TranslateInfoBar::TranslateInfoBar( 25 TranslateInfoBar::TranslateInfoBar(
26 scoped_ptr<translate::TranslateInfoBarDelegate> delegate) 26 scoped_ptr<translate::TranslateInfoBarDelegate> delegate)
27 : InfoBarAndroid(delegate.Pass()), java_translate_delegate_() { 27 : InfoBarAndroid(delegate.Pass()) {
28 } 28 }
29 29
30 TranslateInfoBar::~TranslateInfoBar() { 30 TranslateInfoBar::~TranslateInfoBar() {
31 if (java_info_bar()) {
David Trainor- moved to gerrit 2015/06/03 19:38:46 Just override onNativeDestroyed() in java?
Changwan Ryu 2015/06/04 01:42:27 Done.
32 JNIEnv* env = base::android::AttachCurrentThread();
33 Java_TranslateInfoBar_onNativeDestroyed(env, java_info_bar());
34 }
31 } 35 }
32 36
33 ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) { 37 ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) {
34 java_translate_delegate_.Reset(Java_TranslateInfoBarDelegate_create(env));
35 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 38 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
36 std::vector<base::string16> languages; 39 std::vector<base::string16> languages;
37 languages.reserve(delegate->num_languages()); 40 languages.reserve(delegate->num_languages());
38 for (size_t i = 0; i < delegate->num_languages(); ++i) 41 for (size_t i = 0; i < delegate->num_languages(); ++i)
39 languages.push_back(delegate->language_name_at(i)); 42 languages.push_back(delegate->language_name_at(i));
40 43
41 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = 44 base::android::ScopedJavaLocalRef<jobjectArray> java_languages =
42 base::android::ToJavaArrayOfStrings(env, languages); 45 base::android::ToJavaArrayOfStrings(env, languages);
43 return Java_TranslateInfoBarDelegate_showTranslateInfoBar( 46 return Java_TranslateInfoBar_show(
44 env, java_translate_delegate_.obj(), reinterpret_cast<intptr_t>(this), 47 env, delegate->translate_step(),
45 delegate->translate_step(), delegate->original_language_index(), 48 delegate->original_language_index(), delegate->target_language_index(),
46 delegate->target_language_index(), delegate->ShouldAlwaysTranslate(), 49 delegate->ShouldAlwaysTranslate(),
47 ShouldDisplayNeverTranslateInfoBarOnCancel(), 50 ShouldDisplayNeverTranslateInfoBarOnCancel(),
48 delegate->triggered_from_menu(), java_languages.obj()); 51 delegate->triggered_from_menu(), java_languages.obj());
49 } 52 }
50 53
51 void TranslateInfoBar::ProcessButton(int action, 54 void TranslateInfoBar::ProcessButton(int action,
52 const std::string& action_value) { 55 const std::string& action_value) {
53 if (!owner()) 56 if (!owner())
54 return; // We're closing; don't call anything, it might access the owner. 57 return; // We're closing; don't call anything, it might access the owner.
55 58
56 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 59 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
(...skipping 16 matching lines...) Expand all
73 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 76 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
74 DCHECK_NE(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, 77 DCHECK_NE(translate::TRANSLATE_STEP_BEFORE_TRANSLATE,
75 delegate->translate_step()); 78 delegate->translate_step());
76 79
77 // Ask the former bar to transfer ownership to us. 80 // Ask the former bar to transfer ownership to us.
78 DCHECK(source != NULL); 81 DCHECK(source != NULL);
79 static_cast<TranslateInfoBar*>(source)->TransferOwnership( 82 static_cast<TranslateInfoBar*>(source)->TransferOwnership(
80 this, delegate->translate_step()); 83 this, delegate->translate_step());
81 } 84 }
82 85
86 void TranslateInfoBar::SetJavaInfoBar(
87 const base::android::JavaRef<jobject>& java_info_bar) {
88 InfoBarAndroid::SetJavaInfoBar(java_info_bar);
89 JNIEnv* env = base::android::AttachCurrentThread();
90 Java_TranslateInfoBar_setNativePtr(env, java_info_bar.obj(),
91 reinterpret_cast<intptr_t>(this));
92 }
93
83 void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env, 94 void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env,
84 jobject obj, 95 jobject obj,
85 int source_language_index, 96 int source_language_index,
86 int target_language_index, 97 int target_language_index,
87 bool always_translate, 98 bool always_translate,
88 bool never_translate_language, 99 bool never_translate_language,
89 bool never_translate_site) { 100 bool never_translate_site) {
90 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 101 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
91 delegate->UpdateOriginalLanguageIndex(source_language_index); 102 delegate->UpdateOriginalLanguageIndex(source_language_index);
92 delegate->UpdateTargetLanguageIndex(target_language_index); 103 delegate->UpdateTargetLanguageIndex(target_language_index);
93 104
94 if (delegate->ShouldAlwaysTranslate() != always_translate) 105 if (delegate->ShouldAlwaysTranslate() != always_translate)
95 delegate->ToggleAlwaysTranslate(); 106 delegate->ToggleAlwaysTranslate();
96 107
97 if (never_translate_language && delegate->IsTranslatableLanguageByPrefs()) 108 if (never_translate_language && delegate->IsTranslatableLanguageByPrefs())
98 delegate->ToggleTranslatableLanguageByPrefs(); 109 delegate->ToggleTranslatableLanguageByPrefs();
99 110
100 if (never_translate_site && !delegate->IsSiteBlacklisted()) 111 if (never_translate_site && !delegate->IsSiteBlacklisted())
101 delegate->ToggleSiteBlacklist(); 112 delegate->ToggleSiteBlacklist();
102 } 113 }
103 114
104 void TranslateInfoBar::TransferOwnership(TranslateInfoBar* destination, 115 void TranslateInfoBar::TransferOwnership(TranslateInfoBar* destination,
105 translate::TranslateStep new_type) { 116 translate::TranslateStep new_type) {
106 JNIEnv* env = base::android::AttachCurrentThread(); 117 JNIEnv* env = base::android::AttachCurrentThread();
107 if (Java_TranslateInfoBarDelegate_changeTranslateInfoBarTypeAndPointer( 118 Java_TranslateInfoBar_changeTranslateInfoBarType(env, java_info_bar(),
108 env, java_translate_delegate_.obj(), 119 new_type);
109 reinterpret_cast<intptr_t>(destination), new_type)) { 120 ReassignJavaInfoBar(destination);
110 ReassignJavaInfoBar(destination);
111 destination->SetJavaDelegate(java_translate_delegate_.Release());
112 }
113 }
114
115 void TranslateInfoBar::SetJavaDelegate(jobject delegate) {
116 JNIEnv* env = base::android::AttachCurrentThread();
117 java_translate_delegate_.Reset(env, delegate);
118 } 121 }
119 122
120 bool TranslateInfoBar::ShouldDisplayNeverTranslateInfoBarOnCancel() { 123 bool TranslateInfoBar::ShouldDisplayNeverTranslateInfoBarOnCancel() {
121 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 124 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
122 return (delegate->translate_step() == 125 return (delegate->translate_step() ==
123 translate::TRANSLATE_STEP_BEFORE_TRANSLATE) && 126 translate::TRANSLATE_STEP_BEFORE_TRANSLATE) &&
124 delegate->ShouldShowNeverTranslateShortcut(); 127 delegate->ShouldShowNeverTranslateShortcut();
125 } 128 }
126 129
127 translate::TranslateInfoBarDelegate* TranslateInfoBar::GetDelegate() { 130 translate::TranslateInfoBarDelegate* TranslateInfoBar::GetDelegate() {
128 return delegate()->AsTranslateInfoBarDelegate(); 131 return delegate()->AsTranslateInfoBarDelegate();
129 } 132 }
130 133
131 134
132 // Native JNI methods --------------------------------------------------------- 135 // Native JNI methods ---------------------------------------------------------
133 136
134 bool RegisterTranslateInfoBarDelegate(JNIEnv* env) { 137 bool RegisterTranslateInfoBarDelegate(JNIEnv* env) {
135 return RegisterNativesImpl(env); 138 return RegisterNativesImpl(env);
136 } 139 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698