1 // Copyright (c) 2012 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 "chrome/browser/translate/options_menu_model.h" 6 7 #include "base/metrics/histogram.h" 8 #include "chrome/app/chrome_command_ids.h" 9 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/translate/translate_infobar_delegate.h" 11 #include "chrome/common/url_constants.h" 12 #include "content/public/browser/navigation_controller.h" 13 #include "content/public/browser/navigation_entry.h" 14 #include "content/public/browser/web_contents.h" 15 #include "grit/generated_resources.h" 16 #include "grit/locale_settings.h" 17 #include "ui/base/l10n/l10n_util.h" 18 19 using content::NavigationEntry; 20 using content::OpenURLParams; 21 using content::Referrer; 22 using content::WebContents; 23 24 OptionsMenuModel::OptionsMenuModel( 25 TranslateInfoBarDelegate* translate_delegate) 26 : ui::SimpleMenuModel(this), 27 translate_infobar_delegate_(translate_delegate) { 28 string16 original_language = translate_delegate->language_name_at( 29 translate_delegate->original_language_index()); 30 string16 target_language = translate_delegate->language_name_at( 31 translate_delegate->target_language_index()); 32 33 bool autodetermined_source_language = 34 translate_delegate->original_language_index() == 35 TranslateInfoBarDelegate::kNoIndex; 36 37 // Populate the menu. 38 // Incognito mode does not get any preferences related items. 39 if (!translate_delegate->web_contents()->GetBrowserContext()-> 40 IsOffTheRecord()) { 41 if (!autodetermined_source_language) { 42 AddCheckItem(IDC_TRANSLATE_OPTIONS_ALWAYS, 43 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS_ALWAYS, 44 original_language, target_language)); 45 AddCheckItem(IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG, 46 l10n_util::GetStringFUTF16( 47 IDS_TRANSLATE_INFOBAR_OPTIONS_NEVER_TRANSLATE_LANG, 48 original_language)); 49 } 50 AddCheckItem(IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE, 51 l10n_util::GetStringUTF16( 52 IDS_TRANSLATE_INFOBAR_OPTIONS_NEVER_TRANSLATE_SITE)); 53 AddSeparator(ui::NORMAL_SEPARATOR); 54 } 55 if (!autodetermined_source_language) { 56 AddItem(IDC_TRANSLATE_REPORT_BAD_LANGUAGE_DETECTION, 57 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS_REPORT_ERROR, 58 original_language)); 59 } 60 AddItemWithStringId(IDC_TRANSLATE_OPTIONS_ABOUT, 61 IDS_TRANSLATE_INFOBAR_OPTIONS_ABOUT); 62 } 63 64 OptionsMenuModel::~OptionsMenuModel() { 65 } 66 67 bool OptionsMenuModel::IsCommandIdChecked(int command_id) const { 68 switch (command_id) { 69 case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG: 70 return !translate_infobar_delegate_->IsTranslatableLanguageByPrefs(); 71 72 case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE: 73 return translate_infobar_delegate_->IsSiteBlacklisted(); 74 75 case IDC_TRANSLATE_OPTIONS_ALWAYS: 76 return translate_infobar_delegate_->ShouldAlwaysTranslate(); 77 78 default: 79 NOTREACHED() << "Invalid command_id from menu"; 80 break; 81 } 82 return false; 83 } 84 85 bool OptionsMenuModel::IsCommandIdEnabled(int command_id) const { 86 switch (command_id) { 87 case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG : 88 case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE : 89 return !translate_infobar_delegate_->ShouldAlwaysTranslate(); 90 91 case IDC_TRANSLATE_OPTIONS_ALWAYS : 92 return (translate_infobar_delegate_->IsTranslatableLanguageByPrefs() && 93 !translate_infobar_delegate_->IsSiteBlacklisted()); 94 95 default: 96 break; 97 } 98 return true; 99 } 100 101 bool OptionsMenuModel::GetAcceleratorForCommandId( 102 int command_id, ui::Accelerator* accelerator) { 103 return false; 104 } 105 106 void OptionsMenuModel::ExecuteCommand(int command_id, int event_flags) { 107 switch (command_id) { 108 case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG: 109 translate_infobar_delegate_->ToggleTranslatableLanguageByPrefs(); 110 break; 111 112 case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE: 113 translate_infobar_delegate_->ToggleSiteBlacklist(); 114 break; 115 116 case IDC_TRANSLATE_OPTIONS_ALWAYS: 117 translate_infobar_delegate_->ToggleAlwaysTranslate(); 118 break; 119 120 case IDC_TRANSLATE_REPORT_BAD_LANGUAGE_DETECTION: 121 translate_infobar_delegate_->ReportLanguageDetectionError(); 122 break; 123 124 case IDC_TRANSLATE_OPTIONS_ABOUT: { 125 WebContents* web_contents = translate_infobar_delegate_->web_contents(); 126 if (web_contents) { 127 OpenURLParams params( 128 GURL(chrome::kAboutGoogleTranslateURL), Referrer(), 129 NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_LINK, false); 130 web_contents->OpenURL(params); 131 } 132 break; 133 } 134 135 default: 136 NOTREACHED() << "Invalid command id from menu."; 137 break; 138 } 139 } 140