1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "components/translate/core/browser/options_menu_model.h" 6 7#include "base/metrics/histogram.h" 8#include "components/translate/core/browser/translate_driver.h" 9#include "components/translate/core/browser/translate_infobar_delegate.h" 10#include "grit/components_strings.h" 11#include "ui/base/l10n/l10n_util.h" 12 13namespace { 14 15const char kAboutGoogleTranslateURL[] = 16#if defined(OS_CHROMEOS) 17 "https://support.google.com/chromeos/?p=ib_translation_bar"; 18#else 19 "https://support.google.com/chrome/?p=ib_translation_bar"; 20#endif 21 22} // namespace 23 24OptionsMenuModel::OptionsMenuModel(TranslateInfoBarDelegate* translate_delegate) 25 : ui::SimpleMenuModel(this), 26 translate_infobar_delegate_(translate_delegate) { 27 // |translate_delegate| must already be owned. 28 DCHECK(translate_infobar_delegate_->GetTranslateDriver()); 29 30 base::string16 original_language = translate_delegate->language_name_at( 31 translate_delegate->original_language_index()); 32 base::string16 target_language = translate_delegate->language_name_at( 33 translate_delegate->target_language_index()); 34 35 bool autodetermined_source_language = 36 translate_delegate->original_language_index() == 37 TranslateInfoBarDelegate::kNoIndex; 38 39 // Populate the menu. 40 // Incognito mode does not get any preferences related items. 41 if (!translate_delegate->is_off_the_record()) { 42 if (!autodetermined_source_language) { 43 AddCheckItem(ALWAYS_TRANSLATE, 44 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS_ALWAYS, 45 original_language, target_language)); 46 AddCheckItem(NEVER_TRANSLATE_LANGUAGE, 47 l10n_util::GetStringFUTF16( 48 IDS_TRANSLATE_INFOBAR_OPTIONS_NEVER_TRANSLATE_LANG, 49 original_language)); 50 } 51 AddCheckItem(NEVER_TRANSLATE_SITE, 52 l10n_util::GetStringUTF16( 53 IDS_TRANSLATE_INFOBAR_OPTIONS_NEVER_TRANSLATE_SITE)); 54 AddSeparator(ui::NORMAL_SEPARATOR); 55 } 56 if (!autodetermined_source_language) { 57 AddItem(REPORT_BAD_DETECTION, 58 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS_REPORT_ERROR, 59 original_language)); 60 } 61 AddItemWithStringId(ABOUT_TRANSLATE, IDS_TRANSLATE_INFOBAR_OPTIONS_ABOUT); 62} 63 64OptionsMenuModel::~OptionsMenuModel() { 65} 66 67bool OptionsMenuModel::IsCommandIdChecked(int command_id) const { 68 switch (command_id) { 69 case NEVER_TRANSLATE_LANGUAGE: 70 return !translate_infobar_delegate_->IsTranslatableLanguageByPrefs(); 71 72 case NEVER_TRANSLATE_SITE: 73 return translate_infobar_delegate_->IsSiteBlacklisted(); 74 75 case ALWAYS_TRANSLATE: 76 return translate_infobar_delegate_->ShouldAlwaysTranslate(); 77 78 default: 79 NOTREACHED() << "Invalid command_id from menu"; 80 break; 81 } 82 return false; 83} 84 85bool OptionsMenuModel::IsCommandIdEnabled(int command_id) const { 86 switch (command_id) { 87 case NEVER_TRANSLATE_LANGUAGE: 88 case NEVER_TRANSLATE_SITE: 89 return !translate_infobar_delegate_->ShouldAlwaysTranslate(); 90 91 case ALWAYS_TRANSLATE: 92 return (translate_infobar_delegate_->IsTranslatableLanguageByPrefs() && 93 !translate_infobar_delegate_->IsSiteBlacklisted()); 94 95 default: 96 break; 97 } 98 return true; 99} 100 101bool OptionsMenuModel::GetAcceleratorForCommandId( 102 int command_id, 103 ui::Accelerator* accelerator) { 104 return false; 105} 106 107void OptionsMenuModel::ExecuteCommand(int command_id, int event_flags) { 108 switch (command_id) { 109 case NEVER_TRANSLATE_LANGUAGE: 110 translate_infobar_delegate_->ToggleTranslatableLanguageByPrefs(); 111 break; 112 113 case NEVER_TRANSLATE_SITE: 114 translate_infobar_delegate_->ToggleSiteBlacklist(); 115 break; 116 117 case ALWAYS_TRANSLATE: 118 translate_infobar_delegate_->ToggleAlwaysTranslate(); 119 break; 120 121 case REPORT_BAD_DETECTION: 122 translate_infobar_delegate_->ReportLanguageDetectionError(); 123 break; 124 125 case ABOUT_TRANSLATE: { 126 TranslateDriver* translate_driver = 127 translate_infobar_delegate_->GetTranslateDriver(); 128 if (translate_driver) 129 translate_driver->OpenUrlInNewTab(GURL(kAboutGoogleTranslateURL)); 130 break; 131 } 132 133 default: 134 NOTREACHED() << "Invalid command id from menu."; 135 break; 136 } 137} 138