Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / components / translate / core / browser / options_menu_model.cc
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