Home | History | Annotate | Download | only in browser
      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