1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/translate/options_menu_model.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/metrics/histogram.h" 8513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/app/chrome_command_ids.h" 94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/google/google_util.h" 1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/translate/translate_infobar_delegate.h" 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/locale_settings.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace { 184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochconst char kAboutGoogleTranslateUrl[] = 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#if defined(OS_CHROMEOS) 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "https://www.google.com/support/chromeos/bin/answer.py?answer=173424"; 224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#else 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "https://www.google.com/support/chrome/bin/answer.py?answer=173424"; 244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif 254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} // namespace 274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOptionsMenuModel::OptionsMenuModel( 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TranslateInfoBarDelegate* translate_delegate) 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : ALLOW_THIS_IN_INITIALIZER_LIST(ui::SimpleMenuModel(this)), 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch translate_infobar_delegate_(translate_delegate) { 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 original_language = translate_delegate->GetLanguageDisplayableNameAt( 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch translate_delegate->original_language_index()); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 target_language = translate_delegate->GetLanguageDisplayableNameAt( 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch translate_delegate->target_language_index()); 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Populate the menu. 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Incognito mode does not get any preferences related items. 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!translate_delegate->tab_contents()->profile()->IsOffTheRecord()) { 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddCheckItem(IDC_TRANSLATE_OPTIONS_ALWAYS, 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS_ALWAYS, 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick original_language, target_language)); 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddCheckItem(IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG, 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringFUTF16( 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IDS_TRANSLATE_INFOBAR_OPTIONS_NEVER_TRANSLATE_LANG, 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick original_language)); 473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddCheckItem(IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE, 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16( 493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IDS_TRANSLATE_INFOBAR_OPTIONS_NEVER_TRANSLATE_SITE)); 503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddSeparator(); 513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddItem(IDC_TRANSLATE_REPORT_BAD_LANGUAGE_DETECTION, 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS_REPORT_ERROR, 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch original_language)); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddItemWithStringId(IDC_TRANSLATE_OPTIONS_ABOUT, 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_TRANSLATE_INFOBAR_OPTIONS_ABOUT); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOptionsMenuModel::~OptionsMenuModel() { 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool OptionsMenuModel::IsCommandIdChecked(int command_id) const { 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (command_id) { 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG: 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return translate_infobar_delegate_->IsLanguageBlacklisted(); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE: 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return translate_infobar_delegate_->IsSiteBlacklisted(); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_TRANSLATE_OPTIONS_ALWAYS: 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return translate_infobar_delegate_->ShouldAlwaysTranslate(); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED() << "Invalid command_id from menu"; 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool OptionsMenuModel::IsCommandIdEnabled(int command_id) const { 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (command_id) { 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG : 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE : 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return !translate_infobar_delegate_->ShouldAlwaysTranslate(); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_TRANSLATE_OPTIONS_ALWAYS : 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (!translate_infobar_delegate_->IsLanguageBlacklisted() && 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch !translate_infobar_delegate_->IsSiteBlacklisted()); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool OptionsMenuModel::GetAcceleratorForCommandId( 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int command_id, ui::Accelerator* accelerator) { 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid OptionsMenuModel::ExecuteCommand(int command_id) { 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (command_id) { 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG: 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UMA_HISTOGRAM_COUNTS("Translate.NeverTranslateLang", 1); 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch translate_infobar_delegate_->ToggleLanguageBlacklist(); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE: 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UMA_HISTOGRAM_COUNTS("Translate.NeverTranslateSite", 1); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch translate_infobar_delegate_->ToggleSiteBlacklist(); 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_TRANSLATE_OPTIONS_ALWAYS: 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UMA_HISTOGRAM_COUNTS("Translate.AlwaysTranslateLang", 1); 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch translate_infobar_delegate_->ToggleAlwaysTranslate(); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_TRANSLATE_REPORT_BAD_LANGUAGE_DETECTION: 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch translate_infobar_delegate_->ReportLanguageDetectionError(); 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_TRANSLATE_OPTIONS_ABOUT: { 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContents* tab_contents = translate_infobar_delegate_->tab_contents(); 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (tab_contents) { 1254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch GURL about_url = google_util::AppendGoogleLocaleParam( 1264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch GURL(kAboutGoogleTranslateUrl)); 1274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch tab_contents->OpenURL( 1284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch about_url, GURL(), NEW_FOREGROUND_TAB, PageTransition::LINK); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED() << "Invalid command id from menu."; 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 138