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