Home | History | Annotate | Download | only in translate
      1 // Copyright (c) 2012 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 "chrome/browser/translate/options_menu_model.h"
      6 
      7 #include "base/metrics/histogram.h"
      8 #include "chrome/app/chrome_command_ids.h"
      9 #include "chrome/browser/profiles/profile.h"
     10 #include "chrome/browser/translate/translate_infobar_delegate.h"
     11 #include "chrome/common/url_constants.h"
     12 #include "content/public/browser/navigation_controller.h"
     13 #include "content/public/browser/navigation_entry.h"
     14 #include "content/public/browser/web_contents.h"
     15 #include "grit/generated_resources.h"
     16 #include "grit/locale_settings.h"
     17 #include "ui/base/l10n/l10n_util.h"
     18 
     19 using content::NavigationEntry;
     20 using content::OpenURLParams;
     21 using content::Referrer;
     22 using content::WebContents;
     23 
     24 OptionsMenuModel::OptionsMenuModel(
     25     TranslateInfoBarDelegate* translate_delegate)
     26     : ui::SimpleMenuModel(this),
     27       translate_infobar_delegate_(translate_delegate) {
     28   string16 original_language = translate_delegate->language_name_at(
     29       translate_delegate->original_language_index());
     30   string16 target_language = translate_delegate->language_name_at(
     31       translate_delegate->target_language_index());
     32 
     33   bool autodetermined_source_language =
     34       translate_delegate->original_language_index() ==
     35       TranslateInfoBarDelegate::kNoIndex;
     36 
     37   // Populate the menu.
     38   // Incognito mode does not get any preferences related items.
     39   if (!translate_delegate->web_contents()->GetBrowserContext()->
     40       IsOffTheRecord()) {
     41     if (!autodetermined_source_language) {
     42       AddCheckItem(IDC_TRANSLATE_OPTIONS_ALWAYS,
     43           l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS_ALWAYS,
     44                                      original_language, target_language));
     45       AddCheckItem(IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG,
     46           l10n_util::GetStringFUTF16(
     47               IDS_TRANSLATE_INFOBAR_OPTIONS_NEVER_TRANSLATE_LANG,
     48               original_language));
     49     }
     50     AddCheckItem(IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE,
     51         l10n_util::GetStringUTF16(
     52             IDS_TRANSLATE_INFOBAR_OPTIONS_NEVER_TRANSLATE_SITE));
     53     AddSeparator(ui::NORMAL_SEPARATOR);
     54   }
     55   if (!autodetermined_source_language) {
     56     AddItem(IDC_TRANSLATE_REPORT_BAD_LANGUAGE_DETECTION,
     57         l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS_REPORT_ERROR,
     58                                    original_language));
     59   }
     60   AddItemWithStringId(IDC_TRANSLATE_OPTIONS_ABOUT,
     61       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 IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG:
     70       return !translate_infobar_delegate_->IsTranslatableLanguageByPrefs();
     71 
     72     case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE:
     73       return translate_infobar_delegate_->IsSiteBlacklisted();
     74 
     75     case IDC_TRANSLATE_OPTIONS_ALWAYS:
     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 IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG :
     88     case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE :
     89       return !translate_infobar_delegate_->ShouldAlwaysTranslate();
     90 
     91     case IDC_TRANSLATE_OPTIONS_ALWAYS :
     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, ui::Accelerator* accelerator) {
    103   return false;
    104 }
    105 
    106 void OptionsMenuModel::ExecuteCommand(int command_id, int event_flags) {
    107   switch (command_id) {
    108     case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG:
    109       translate_infobar_delegate_->ToggleTranslatableLanguageByPrefs();
    110       break;
    111 
    112     case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE:
    113       translate_infobar_delegate_->ToggleSiteBlacklist();
    114       break;
    115 
    116     case IDC_TRANSLATE_OPTIONS_ALWAYS:
    117       translate_infobar_delegate_->ToggleAlwaysTranslate();
    118       break;
    119 
    120     case IDC_TRANSLATE_REPORT_BAD_LANGUAGE_DETECTION:
    121       translate_infobar_delegate_->ReportLanguageDetectionError();
    122       break;
    123 
    124     case IDC_TRANSLATE_OPTIONS_ABOUT: {
    125       WebContents* web_contents = translate_infobar_delegate_->web_contents();
    126       if (web_contents) {
    127         OpenURLParams params(
    128             GURL(chrome::kAboutGoogleTranslateURL), Referrer(),
    129             NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_LINK, false);
    130         web_contents->OpenURL(params);
    131       }
    132       break;
    133     }
    134 
    135     default:
    136       NOTREACHED() << "Invalid command id from menu.";
    137       break;
    138   }
    139 }
    140