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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java

Issue 2873103003: Implements logging in the new compact translate UI. (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
« no previous file with comments | « no previous file | tools/metrics/histograms/enums.xml » ('j') | tools/metrics/histograms/enums.xml » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 package org.chromium.chrome.browser.infobar; 5 package org.chromium.chrome.browser.infobar;
6 6
7 import android.support.design.widget.TabLayout; 7 import android.support.design.widget.TabLayout;
8 import android.view.LayoutInflater; 8 import android.view.LayoutInflater;
9 import android.view.View; 9 import android.view.View;
10 import android.view.View.OnClickListener; 10 import android.view.View.OnClickListener;
11 import android.widget.LinearLayout; 11 import android.widget.LinearLayout;
12 12
13 import org.chromium.base.annotations.CalledByNative; 13 import org.chromium.base.annotations.CalledByNative;
14 import org.chromium.base.metrics.RecordHistogram;
14 import org.chromium.chrome.R; 15 import org.chromium.chrome.R;
15 import org.chromium.chrome.browser.infobar.translate.TranslateMenu; 16 import org.chromium.chrome.browser.infobar.translate.TranslateMenu;
16 import org.chromium.chrome.browser.infobar.translate.TranslateMenuHelper; 17 import org.chromium.chrome.browser.infobar.translate.TranslateMenuHelper;
17 import org.chromium.chrome.browser.infobar.translate.TranslateTabLayout; 18 import org.chromium.chrome.browser.infobar.translate.TranslateTabLayout;
18 import org.chromium.chrome.browser.snackbar.Snackbar; 19 import org.chromium.chrome.browser.snackbar.Snackbar;
19 import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController; 20 import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController;
20 import org.chromium.chrome.browser.widget.TintedImageButton; 21 import org.chromium.chrome.browser.widget.TintedImageButton;
21 import org.chromium.ui.widget.Toast; 22 import org.chromium.ui.widget.Toast;
22 23
23 /** 24 /**
24 * Java version of the compcat translate infobar 25 * Java version of the compcat translate infobar
25 */ 26 */
26 class TranslateCompactInfoBar extends InfoBar 27 class TranslateCompactInfoBar extends InfoBar
27 implements TabLayout.OnTabSelectedListener, TranslateMenuHelper.Translat eMenuListener { 28 implements TabLayout.OnTabSelectedListener, TranslateMenuHelper.Translat eMenuListener {
28 public static final int TRANSLATING_INFOBAR = 1; 29 public static final int TRANSLATING_INFOBAR = 1;
29 30
30 private static final int SOURCE_TAB_INDEX = 0; 31 private static final int SOURCE_TAB_INDEX = 0;
31 private static final int TARGET_TAB_INDEX = 1; 32 private static final int TARGET_TAB_INDEX = 1;
32 33
33 private final int mInitialStep; 34 private final int mInitialStep;
34 private final TranslateOptions mOptions; 35 private final TranslateOptions mOptions;
35 36
36 private long mNativeTranslateInfoBarPtr; 37 private long mNativeTranslateInfoBarPtr;
37 private TranslateTabLayout mTabLayout; 38 private TranslateTabLayout mTabLayout;
38 39
40 private static final String INFOBAR_HISTOGRAM_TRANSLATE_LANGUAGE =
Leo 2017/05/10 07:23:58 Any chance moving all the definitions to Metrics.j
ramyasharma 2017/05/10 09:54:52 Hmmm.. as we discussed, keeping these metrics in t
41 "Translate.Compact.infobar_translate_language";
42 private static final String INFOBAR_HISTOGRAM_MORE_LANGUAGES_LANGUAGE =
43 "Translate.Compact.infobar_more_languages_translate_language";
44 private static final String INFOBAR_HISTOGRAM_PAGE_NOT_IN_LANGUAGE =
45 "Translate.Compact.infobar_page_not_in_language";
46 private static final String INFOBAR_HISTOGRAM_ALWAYS_TRANSLATE_LANGUAGE =
47 "Translate.Compact.infobar_always_translate_lang";
48 private static final String INFOBAR_HISTOGRAM_NEVER_TRANSLATE_LANGUAGE =
49 "Translate.Compact.infobar_never_translate_lang";
Ilya Sherman 2017/05/10 07:10:20 Did you mean to add these histograms to histograms
ramyasharma 2017/05/10 09:54:52 Yes, sorry I missed this. Fixed the case thanks.
50 private static final String INFOBAR_HISTOGRAM = "Translate.Compact";
51
52 /**
53 * This is used to back a UMA histogram, so it should be treated as
54 * append-only. The values should not be changed or reused, and
55 * INFOBAR_HISTOGRAM_BOUNDARY should be the last.
56 */
57 private static final Integer INFOBAR_IMPRESSION = 0;
58 private static final Integer INFOBAR_TRANSLATE = 1;
59 private static final Integer INFOBAR_DECLINE = 2;
60 private static final Integer INFOBAR_OPTIONS = 3;
61 private static final Integer INFOBAR_MORE_LANGUAGES = 4;
62 private static final Integer INFOBAR_MORE_LANGUAGES_TRANSLATE = 5;
63 private static final Integer INFOBAR_PAGE_NOT_IN = 6;
64 private static final Integer INFOBAR_ALWAYS_TRANSLATE = 7;
65 private static final Integer INFOBAR_NEVER_TRANSLATE = 8;
66 private static final Integer INFOBAR_NEVER_TRANSLATE_SITE = 9;
67 private static final Integer INFOBAR_SCROLL_HIDE = 10;
68 private static final Integer INFOBAR_SCROLL_SHOW = 11;
69 private static final Integer INFOBAR_REVERT = 12;
70 private static final Integer INFOBAR_SNACKBAR_CANCEL_ALWAYS = 13;
71 private static final Integer INFOBAR_SNACKBAR_CANCEL_NEVER_SITE = 14;
72 private static final Integer INFOBAR_SNACKBAR_CANCEL_NEVER = 15;
73 private static final Integer INFOBAR_HISTOGRAM_BOUNDARY = 16;
74
39 // Need 2 instances of TranslateMenuHelper to prevent a race condition bug w hich happens when 75 // Need 2 instances of TranslateMenuHelper to prevent a race condition bug w hich happens when
40 // showing language menu after dismissing overflow menu. 76 // showing language menu after dismissing overflow menu.
41 private TranslateMenuHelper mOverflowMenuHelper; 77 private TranslateMenuHelper mOverflowMenuHelper;
42 private TranslateMenuHelper mLanguageMenuHelper; 78 private TranslateMenuHelper mLanguageMenuHelper;
43 79
44 private TintedImageButton mMenuButton; 80 private TintedImageButton mMenuButton;
45 81
46 /** The controller for translate UI snackbars. */ 82 /** The controller for translate UI snackbars. */
47 class TranslateSnackbarController implements SnackbarController { 83 class TranslateSnackbarController implements SnackbarController {
48 private final int mMenuItemId; 84 private final int mMenuItemId;
49 85
50 public TranslateSnackbarController(int menuItemId) { 86 public TranslateSnackbarController(int menuItemId) {
51 mMenuItemId = menuItemId; 87 mMenuItemId = menuItemId;
52 } 88 }
53 89
54 @Override 90 @Override
55 public void onDismissNoAction(Object actionData) { 91 public void onDismissNoAction(Object actionData) {
56 handleTranslateOptionPostSnackbar(mMenuItemId); 92 handleTranslateOptionPostSnackbar(mMenuItemId);
57 } 93 }
58 94
59 @Override 95 @Override
60 public void onAction(Object actionData) { 96 public void onAction(Object actionData) {
61 // TODO(ramyasharma): Add logging metric to track cancel actions. 97 switch (mMenuItemId) {
62 // Do nothing. 98 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
99 RecordHistogram.recordEnumeratedHistogram(INFOBAR_HISTOGRAM,
100 INFOBAR_SNACKBAR_CANCEL_ALWAYS, INFOBAR_HISTOGRAM_BO UNDARY);
Ilya Sherman 2017/05/10 07:10:20 Optional nit: There's a lot of repetition of these
ramyasharma 2017/05/10 09:54:52 Thanks for the idea. Done.
101 return;
102 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
103 RecordHistogram.recordEnumeratedHistogram(INFOBAR_HISTOGRAM,
104 INFOBAR_SNACKBAR_CANCEL_NEVER, INFOBAR_HISTOGRAM_BOU NDARY);
105 return;
106 case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
107 RecordHistogram.recordEnumeratedHistogram(INFOBAR_HISTOGRAM,
108 INFOBAR_SNACKBAR_CANCEL_NEVER_SITE, INFOBAR_HISTOGRA M_BOUNDARY);
109 return;
110 }
63 } 111 }
64 }; 112 };
65 113
66 @CalledByNative 114 @CalledByNative
67 private static InfoBar create(int initialStep, String sourceLanguageCode, 115 private static InfoBar create(int initialStep, String sourceLanguageCode,
68 String targetLanguageCode, boolean alwaysTranslate, boolean triggere dFromMenu, 116 String targetLanguageCode, boolean alwaysTranslate, boolean triggere dFromMenu,
69 String[] languages, String[] codes) { 117 String[] languages, String[] codes) {
118 RecordHistogram.recordEnumeratedHistogram(
119 INFOBAR_HISTOGRAM, INFOBAR_IMPRESSION, INFOBAR_HISTOGRAM_BOUNDAR Y);
70 return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targ etLanguageCode, 120 return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targ etLanguageCode,
71 alwaysTranslate, triggeredFromMenu, languages, codes); 121 alwaysTranslate, triggeredFromMenu, languages, codes);
72 } 122 }
73 123
74 TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String t argetLanguageCode, 124 TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String t argetLanguageCode,
75 boolean alwaysTranslate, boolean triggeredFromMenu, String[] languag es, 125 boolean alwaysTranslate, boolean triggeredFromMenu, String[] languag es,
76 String[] codes) { 126 String[] codes) {
77 super(R.drawable.infobar_translate_compact, null, null); 127 super(R.drawable.infobar_translate_compact, null, null);
78 mInitialStep = initialStep; 128 mInitialStep = initialStep;
79 mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCod e, languages, codes, 129 mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCod e, languages, codes,
(...skipping 19 matching lines...) Expand all
99 mTabLayout.getTabAt(TARGET_TAB_INDEX).select(); 149 mTabLayout.getTabAt(TARGET_TAB_INDEX).select();
100 mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX); 150 mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX);
101 } 151 }
102 152
103 mTabLayout.addOnTabSelectedListener(this); 153 mTabLayout.addOnTabSelectedListener(this);
104 154
105 mMenuButton = (TintedImageButton) content.findViewById(R.id.translate_in fobar_menu_button); 155 mMenuButton = (TintedImageButton) content.findViewById(R.id.translate_in fobar_menu_button);
106 mMenuButton.setOnClickListener(new OnClickListener() { 156 mMenuButton.setOnClickListener(new OnClickListener() {
107 @Override 157 @Override
108 public void onClick(View v) { 158 public void onClick(View v) {
159 RecordHistogram.recordEnumeratedHistogram(
160 INFOBAR_HISTOGRAM, INFOBAR_OPTIONS, INFOBAR_HISTOGRAM_BO UNDARY);
109 initMenuHelper(TranslateMenu.MENU_OVERFLOW); 161 initMenuHelper(TranslateMenu.MENU_OVERFLOW);
110 mOverflowMenuHelper.show(TranslateMenu.MENU_OVERFLOW); 162 mOverflowMenuHelper.show(TranslateMenu.MENU_OVERFLOW);
111 } 163 }
112 }); 164 });
113 165
114 parent.addContent(content, 1.0f); 166 parent.addContent(content, 1.0f);
115 } 167 }
116 168
117 private void initMenuHelper(int menuType) { 169 private void initMenuHelper(int menuType) {
118 switch (menuType) { 170 switch (menuType) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 @Override 220 @Override
169 protected void onNativeDestroyed() { 221 protected void onNativeDestroyed() {
170 mNativeTranslateInfoBarPtr = 0; 222 mNativeTranslateInfoBarPtr = 0;
171 super.onNativeDestroyed(); 223 super.onNativeDestroyed();
172 } 224 }
173 225
174 @Override 226 @Override
175 public void onTabSelected(TabLayout.Tab tab) { 227 public void onTabSelected(TabLayout.Tab tab) {
176 switch (tab.getPosition()) { 228 switch (tab.getPosition()) {
177 case SOURCE_TAB_INDEX: 229 case SOURCE_TAB_INDEX:
230 RecordHistogram.recordEnumeratedHistogram(
231 INFOBAR_HISTOGRAM, INFOBAR_REVERT, INFOBAR_HISTOGRAM_BOU NDARY);
178 onButtonClicked(ActionType.TRANSLATE_SHOW_ORIGINAL); 232 onButtonClicked(ActionType.TRANSLATE_SHOW_ORIGINAL);
179 return; 233 return;
180 case TARGET_TAB_INDEX: 234 case TARGET_TAB_INDEX:
235 RecordHistogram.recordEnumeratedHistogram(
236 INFOBAR_HISTOGRAM, INFOBAR_TRANSLATE, INFOBAR_HISTOGRAM_ BOUNDARY);
237 RecordHistogram.recordSparseSlowlyHistogram(
238 INFOBAR_HISTOGRAM_TRANSLATE_LANGUAGE, mOptions.targetLan guage.hashCode());
181 startTranslating(TARGET_TAB_INDEX); 239 startTranslating(TARGET_TAB_INDEX);
182 return; 240 return;
183 default: 241 default:
184 assert false : "Unexpected Tab Index"; 242 assert false : "Unexpected Tab Index";
185 } 243 }
186 } 244 }
187 245
188 @Override 246 @Override
189 public void onTabUnselected(TabLayout.Tab tab) {} 247 public void onTabUnselected(TabLayout.Tab tab) {}
190 248
191 @Override 249 @Override
192 public void onTabReselected(TabLayout.Tab tab) {} 250 public void onTabReselected(TabLayout.Tab tab) {}
193 251
194 @Override 252 @Override
195 public void onOverflowMenuItemClicked(int itemId) { 253 public void onOverflowMenuItemClicked(int itemId) {
196 switch (itemId) { 254 switch (itemId) {
197 case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE: 255 case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE:
256 RecordHistogram.recordEnumeratedHistogram(
257 INFOBAR_HISTOGRAM, INFOBAR_MORE_LANGUAGES, INFOBAR_HISTO GRAM_BOUNDARY);
198 initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE); 258 initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE);
199 mLanguageMenuHelper.show(TranslateMenu.MENU_TARGET_LANGUAGE); 259 mLanguageMenuHelper.show(TranslateMenu.MENU_TARGET_LANGUAGE);
200 return; 260 return;
201 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: 261 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
262 RecordHistogram.recordEnumeratedHistogram(
263 INFOBAR_HISTOGRAM, INFOBAR_ALWAYS_TRANSLATE, INFOBAR_HIS TOGRAM_BOUNDARY);
264 RecordHistogram.recordSparseSlowlyHistogram(
265 INFOBAR_HISTOGRAM_ALWAYS_TRANSLATE_LANGUAGE,
266 mOptions.sourceLanguageCode().hashCode());
202 // Only show snackbar when "Always Translate" is enabled. 267 // Only show snackbar when "Always Translate" is enabled.
203 if (!mOptions.alwaysTranslateLanguageState()) { 268 if (!mOptions.alwaysTranslateLanguageState()) {
204 createAndShowSnackbar( 269 createAndShowSnackbar(
205 getContext().getString(R.string.translate_snackbar_a lways_translate, 270 getContext().getString(R.string.translate_snackbar_a lways_translate,
206 mOptions.sourceLanguageName(), mOptions.targ etLanguageName()), 271 mOptions.sourceLanguageName(), mOptions.targ etLanguageName()),
207 Snackbar.UMA_TRANSLATE_ALWAYS, itemId); 272 Snackbar.UMA_TRANSLATE_ALWAYS, itemId);
208 } else { 273 } else {
209 handleTranslateOptionPostSnackbar(itemId); 274 handleTranslateOptionPostSnackbar(itemId);
210 } 275 }
211 return; 276 return;
212 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: 277 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
278 RecordHistogram.recordEnumeratedHistogram(
279 INFOBAR_HISTOGRAM, INFOBAR_NEVER_TRANSLATE, INFOBAR_HIST OGRAM_BOUNDARY);
280 RecordHistogram.recordSparseSlowlyHistogram(
281 INFOBAR_HISTOGRAM_NEVER_TRANSLATE_LANGUAGE,
282 mOptions.sourceLanguageCode().hashCode());
213 createAndShowSnackbar( 283 createAndShowSnackbar(
214 getContext().getString(R.string.translate_snackbar_langu age_never, 284 getContext().getString(R.string.translate_snackbar_langu age_never,
215 mOptions.sourceLanguageName()), 285 mOptions.sourceLanguageName()),
216 Snackbar.UMA_TRANSLATE_NEVER, itemId); 286 Snackbar.UMA_TRANSLATE_NEVER, itemId);
217 return; 287 return;
218 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: 288 case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
289 RecordHistogram.recordEnumeratedHistogram(INFOBAR_HISTOGRAM,
290 INFOBAR_NEVER_TRANSLATE_SITE, INFOBAR_HISTOGRAM_BOUNDARY );
219 createAndShowSnackbar( 291 createAndShowSnackbar(
220 getContext().getString(R.string.translate_snackbar_site_ never), 292 getContext().getString(R.string.translate_snackbar_site_ never),
221 Snackbar.UMA_TRANSLATE_NEVER_SITE, itemId); 293 Snackbar.UMA_TRANSLATE_NEVER_SITE, itemId);
222 return; 294 return;
223 case TranslateMenu.ID_OVERFLOW_NOT_THIS_LANGUAGE: 295 case TranslateMenu.ID_OVERFLOW_NOT_THIS_LANGUAGE:
296 RecordHistogram.recordEnumeratedHistogram(
297 INFOBAR_HISTOGRAM, INFOBAR_PAGE_NOT_IN, INFOBAR_HISTOGRA M_BOUNDARY);
224 initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE); 298 initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE);
225 mLanguageMenuHelper.show(TranslateMenu.MENU_SOURCE_LANGUAGE); 299 mLanguageMenuHelper.show(TranslateMenu.MENU_SOURCE_LANGUAGE);
226 return; 300 return;
227 default: 301 default:
228 assert false : "Unexpected overflow menu code"; 302 assert false : "Unexpected overflow menu code";
229 } 303 }
230 } 304 }
231 305
232 @Override 306 @Override
233 public void onTargetMenuItemClicked(String code) { 307 public void onTargetMenuItemClicked(String code) {
234 // Reset target code in both UI and native. 308 // Reset target code in both UI and native.
235 if (mOptions.setTargetLanguage(code)) { 309 if (mOptions.setTargetLanguage(code)) {
310 RecordHistogram.recordSparseSlowlyHistogram(INFOBAR_HISTOGRAM_MORE_L ANGUAGES_LANGUAGE,
311 mOptions.targetLanguageCode().hashCode());
236 nativeApplyStringTranslateOption( 312 nativeApplyStringTranslateOption(
237 mNativeTranslateInfoBarPtr, TranslateOption.TARGET_CODE, cod e); 313 mNativeTranslateInfoBarPtr, TranslateOption.TARGET_CODE, cod e);
238 // Adjust UI. 314 // Adjust UI.
239 mTabLayout.replaceTabTitle(TARGET_TAB_INDEX, mOptions.getRepresentat ionFromCode(code)); 315 mTabLayout.replaceTabTitle(TARGET_TAB_INDEX, mOptions.getRepresentat ionFromCode(code));
240 startTranslating(mTabLayout.getSelectedTabPosition()); 316 startTranslating(mTabLayout.getSelectedTabPosition());
241 } 317 }
242 } 318 }
243 319
244 @Override 320 @Override
245 public void onSourceMenuItemClicked(String code) { 321 public void onSourceMenuItemClicked(String code) {
246 // Reset source code in both UI and native. 322 // Reset source code in both UI and native.
247 if (mOptions.setSourceLanguage(code)) { 323 if (mOptions.setSourceLanguage(code)) {
324 RecordHistogram.recordSparseSlowlyHistogram(INFOBAR_HISTOGRAM_PAGE_N OT_IN_LANGUAGE,
325 mOptions.sourceLanguageCode().hashCode());
248 nativeApplyStringTranslateOption( 326 nativeApplyStringTranslateOption(
249 mNativeTranslateInfoBarPtr, TranslateOption.SOURCE_CODE, cod e); 327 mNativeTranslateInfoBarPtr, TranslateOption.SOURCE_CODE, cod e);
250 // Adjust UI. 328 // Adjust UI.
251 mTabLayout.replaceTabTitle(SOURCE_TAB_INDEX, mOptions.getRepresentat ionFromCode(code)); 329 mTabLayout.replaceTabTitle(SOURCE_TAB_INDEX, mOptions.getRepresentat ionFromCode(code));
252 startTranslating(mTabLayout.getSelectedTabPosition()); 330 startTranslating(mTabLayout.getSelectedTabPosition());
253 } 331 }
254 } 332 }
255 333
256 private void createAndShowSnackbar(String title, int umaType, int itemId) { 334 private void createAndShowSnackbar(String title, int umaType, int itemId) {
257 if (getSnackbarManager() == null) { 335 if (getSnackbarManager() == null) {
(...skipping 26 matching lines...) Expand all
284 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL ATE_SITE, true); 362 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL ATE_SITE, true);
285 return; 363 return;
286 } 364 }
287 } 365 }
288 366
289 private native void nativeApplyStringTranslateOption( 367 private native void nativeApplyStringTranslateOption(
290 long nativeTranslateCompactInfoBar, int option, String value); 368 long nativeTranslateCompactInfoBar, int option, String value);
291 private native void nativeApplyBoolTranslateOption( 369 private native void nativeApplyBoolTranslateOption(
292 long nativeTranslateCompactInfoBar, int option, boolean value); 370 long nativeTranslateCompactInfoBar, int option, boolean value);
293 } 371 }
OLDNEW
« no previous file with comments | « no previous file | tools/metrics/histograms/enums.xml » ('j') | tools/metrics/histograms/enums.xml » ('J')

Powered by Google App Engine
This is Rietveld 408576698