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