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 {
     14 
     15 const char kAboutGoogleTranslateURL[] =
     16 #if defined(OS_CHROMEOS)
     17     "https://support.google.com/chromeos/?p=ib_translation_bar";
     18 #else
     19     "https://support.google.com/chrome/?p=ib_translation_bar";
     20 #endif
     21 
     22 }  // namespace
     23 
     24 OptionsMenuModel::OptionsMenuModel(TranslateInfoBarDelegate* translate_delegate)
     25     : ui::SimpleMenuModel(this),
     26       translate_infobar_delegate_(translate_delegate) {
     27   // |translate_delegate| must already be owned.
     28   DCHECK(translate_infobar_delegate_->GetTranslateDriver());
     29 
     30   base::string16 original_language = translate_delegate->language_name_at(
     31       translate_delegate->original_language_index());
     32   base::string16 target_language = translate_delegate->language_name_at(
     33       translate_delegate->target_language_index());
     34 
     35   bool autodetermined_source_language =
     36       translate_delegate->original_language_index() ==
     37       TranslateInfoBarDelegate::kNoIndex;
     38 
     39   // Populate the menu.
     40   // Incognito mode does not get any preferences related items.
     41   if (!translate_delegate->is_off_the_record()) {
     42     if (!autodetermined_source_language) {
     43       AddCheckItem(ALWAYS_TRANSLATE,
     44           l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS_ALWAYS,
     45                                      original_language, target_language));
     46       AddCheckItem(NEVER_TRANSLATE_LANGUAGE,
     47                    l10n_util::GetStringFUTF16(
     48                        IDS_TRANSLATE_INFOBAR_OPTIONS_NEVER_TRANSLATE_LANG,
     49                        original_language));
     50     }
     51     AddCheckItem(NEVER_TRANSLATE_SITE,
     52                  l10n_util::GetStringUTF16(
     53                      IDS_TRANSLATE_INFOBAR_OPTIONS_NEVER_TRANSLATE_SITE));
     54     AddSeparator(ui::NORMAL_SEPARATOR);
     55   }
     56   if (!autodetermined_source_language) {
     57     AddItem(REPORT_BAD_DETECTION,
     58         l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS_REPORT_ERROR,
     59                                    original_language));
     60   }
     61   AddItemWithStringId(ABOUT_TRANSLATE, 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 NEVER_TRANSLATE_LANGUAGE:
     70       return !translate_infobar_delegate_->IsTranslatableLanguageByPrefs();
     71 
     72     case NEVER_TRANSLATE_SITE:
     73       return translate_infobar_delegate_->IsSiteBlacklisted();
     74 
     75     case ALWAYS_TRANSLATE:
     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 NEVER_TRANSLATE_LANGUAGE:
     88     case NEVER_TRANSLATE_SITE:
     89       return !translate_infobar_delegate_->ShouldAlwaysTranslate();
     90 
     91     case ALWAYS_TRANSLATE:
     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,
    103     ui::Accelerator* accelerator) {
    104   return false;
    105 }
    106 
    107 void OptionsMenuModel::ExecuteCommand(int command_id, int event_flags) {
    108   switch (command_id) {
    109     case NEVER_TRANSLATE_LANGUAGE:
    110       translate_infobar_delegate_->ToggleTranslatableLanguageByPrefs();
    111       break;
    112 
    113     case NEVER_TRANSLATE_SITE:
    114       translate_infobar_delegate_->ToggleSiteBlacklist();
    115       break;
    116 
    117     case ALWAYS_TRANSLATE:
    118       translate_infobar_delegate_->ToggleAlwaysTranslate();
    119       break;
    120 
    121     case REPORT_BAD_DETECTION:
    122       translate_infobar_delegate_->ReportLanguageDetectionError();
    123       break;
    124 
    125     case ABOUT_TRANSLATE: {
    126       TranslateDriver* translate_driver =
    127           translate_infobar_delegate_->GetTranslateDriver();
    128       if (translate_driver)
    129         translate_driver->OpenUrlInNewTab(GURL(kAboutGoogleTranslateURL));
    130       break;
    131     }
    132 
    133     default:
    134       NOTREACHED() << "Invalid command id from menu.";
    135       break;
    136   }
    137 }
    138