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

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: removed unrelated file 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
« no previous file with comments | « chrome/browser/ui/android/infobars/translate_infobar.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 } 31 }
32 32
33 ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) { 33 ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) {
34 java_translate_delegate_.Reset(Java_TranslateInfoBarDelegate_create(env));
35 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 34 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
36 std::vector<base::string16> languages; 35 std::vector<base::string16> languages;
37 languages.reserve(delegate->num_languages()); 36 languages.reserve(delegate->num_languages());
38 for (size_t i = 0; i < delegate->num_languages(); ++i) 37 for (size_t i = 0; i < delegate->num_languages(); ++i)
39 languages.push_back(delegate->language_name_at(i)); 38 languages.push_back(delegate->language_name_at(i));
40 39
41 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = 40 base::android::ScopedJavaLocalRef<jobjectArray> java_languages =
42 base::android::ToJavaArrayOfStrings(env, languages); 41 base::android::ToJavaArrayOfStrings(env, languages);
43 return Java_TranslateInfoBarDelegate_showTranslateInfoBar( 42 return Java_TranslateInfoBar_show(
44 env, java_translate_delegate_.obj(), reinterpret_cast<intptr_t>(this), 43 env, delegate->translate_step(), delegate->original_language_index(),
45 delegate->translate_step(), delegate->original_language_index(),
46 delegate->target_language_index(), delegate->ShouldAlwaysTranslate(), 44 delegate->target_language_index(), delegate->ShouldAlwaysTranslate(),
47 ShouldDisplayNeverTranslateInfoBarOnCancel(), 45 ShouldDisplayNeverTranslateInfoBarOnCancel(),
48 delegate->triggered_from_menu(), java_languages.obj()); 46 delegate->triggered_from_menu(), java_languages.obj());
49 } 47 }
50 48
51 void TranslateInfoBar::ProcessButton(int action, 49 void TranslateInfoBar::ProcessButton(int action,
52 const std::string& action_value) { 50 const std::string& action_value) {
53 if (!owner()) 51 if (!owner())
54 return; // We're closing; don't call anything, it might access the owner. 52 return; // We're closing; don't call anything, it might access the owner.
55 53
(...skipping 17 matching lines...) Expand all
73 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 71 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
74 DCHECK_NE(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, 72 DCHECK_NE(translate::TRANSLATE_STEP_BEFORE_TRANSLATE,
75 delegate->translate_step()); 73 delegate->translate_step());
76 74
77 // Ask the former bar to transfer ownership to us. 75 // Ask the former bar to transfer ownership to us.
78 DCHECK(source != NULL); 76 DCHECK(source != NULL);
79 static_cast<TranslateInfoBar*>(source)->TransferOwnership( 77 static_cast<TranslateInfoBar*>(source)->TransferOwnership(
80 this, delegate->translate_step()); 78 this, delegate->translate_step());
81 } 79 }
82 80
81 void TranslateInfoBar::SetJavaInfoBar(
82 const base::android::JavaRef<jobject>& java_info_bar) {
83 InfoBarAndroid::SetJavaInfoBar(java_info_bar);
84 JNIEnv* env = base::android::AttachCurrentThread();
85 Java_TranslateInfoBar_setNativePtr(env, java_info_bar.obj(),
86 reinterpret_cast<intptr_t>(this));
87 }
88
83 void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env, 89 void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env,
84 jobject obj, 90 jobject obj,
85 int source_language_index, 91 int source_language_index,
86 int target_language_index, 92 int target_language_index,
87 bool always_translate, 93 bool always_translate,
88 bool never_translate_language, 94 bool never_translate_language,
89 bool never_translate_site) { 95 bool never_translate_site) {
90 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 96 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
91 delegate->UpdateOriginalLanguageIndex(source_language_index); 97 delegate->UpdateOriginalLanguageIndex(source_language_index);
92 delegate->UpdateTargetLanguageIndex(target_language_index); 98 delegate->UpdateTargetLanguageIndex(target_language_index);
93 99
94 if (delegate->ShouldAlwaysTranslate() != always_translate) 100 if (delegate->ShouldAlwaysTranslate() != always_translate)
95 delegate->ToggleAlwaysTranslate(); 101 delegate->ToggleAlwaysTranslate();
96 102
97 if (never_translate_language && delegate->IsTranslatableLanguageByPrefs()) 103 if (never_translate_language && delegate->IsTranslatableLanguageByPrefs())
98 delegate->ToggleTranslatableLanguageByPrefs(); 104 delegate->ToggleTranslatableLanguageByPrefs();
99 105
100 if (never_translate_site && !delegate->IsSiteBlacklisted()) 106 if (never_translate_site && !delegate->IsSiteBlacklisted())
101 delegate->ToggleSiteBlacklist(); 107 delegate->ToggleSiteBlacklist();
102 } 108 }
103 109
104 void TranslateInfoBar::TransferOwnership(TranslateInfoBar* destination, 110 void TranslateInfoBar::TransferOwnership(TranslateInfoBar* destination,
105 translate::TranslateStep new_type) { 111 translate::TranslateStep new_type) {
106 JNIEnv* env = base::android::AttachCurrentThread(); 112 JNIEnv* env = base::android::AttachCurrentThread();
107 if (Java_TranslateInfoBarDelegate_changeTranslateInfoBarTypeAndPointer( 113 Java_TranslateInfoBar_changeTranslateInfoBarType(env, GetJavaInfoBar(),
108 env, java_translate_delegate_.obj(), 114 new_type);
109 reinterpret_cast<intptr_t>(destination), new_type)) { 115 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 } 116 }
119 117
120 bool TranslateInfoBar::ShouldDisplayNeverTranslateInfoBarOnCancel() { 118 bool TranslateInfoBar::ShouldDisplayNeverTranslateInfoBarOnCancel() {
121 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); 119 translate::TranslateInfoBarDelegate* delegate = GetDelegate();
122 return (delegate->translate_step() == 120 return (delegate->translate_step() ==
123 translate::TRANSLATE_STEP_BEFORE_TRANSLATE) && 121 translate::TRANSLATE_STEP_BEFORE_TRANSLATE) &&
124 delegate->ShouldShowNeverTranslateShortcut(); 122 delegate->ShouldShowNeverTranslateShortcut();
125 } 123 }
126 124
127 translate::TranslateInfoBarDelegate* TranslateInfoBar::GetDelegate() { 125 translate::TranslateInfoBarDelegate* TranslateInfoBar::GetDelegate() {
128 return delegate()->AsTranslateInfoBarDelegate(); 126 return delegate()->AsTranslateInfoBarDelegate();
129 } 127 }
130 128
131 129
132 // Native JNI methods --------------------------------------------------------- 130 // Native JNI methods ---------------------------------------------------------
133 131
134 bool RegisterTranslateInfoBarDelegate(JNIEnv* env) { 132 bool RegisterTranslateInfoBarDelegate(JNIEnv* env) {
135 return RegisterNativesImpl(env); 133 return RegisterNativesImpl(env);
136 } 134 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/android/infobars/translate_infobar.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698