diff options
author | feldstein@chromium.org <feldstein@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-16 20:33:53 +0000 |
---|---|---|
committer | feldstein@chromium.org <feldstein@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-16 20:33:53 +0000 |
commit | da02f52b7a55681e02e36acbcf2f54528f8b496b (patch) | |
tree | 084028eb1664caf371adc91a709cf57420558536 /chrome | |
parent | 8b1d765ba965eee30319fa2615f96ba34a220bae (diff) | |
download | chromium_src-da02f52b7a55681e02e36acbcf2f54528f8b496b.zip chromium_src-da02f52b7a55681e02e36acbcf2f54528f8b496b.tar.gz chromium_src-da02f52b7a55681e02e36acbcf2f54528f8b496b.tar.bz2 |
Add the always/never translate buttons
Port over the windows work onto the mac to add the button when a user presses
translate or cancel more than 3 times in a row.
BUG=48136
TEST=Cancel or accept translation more than 3 times in a row to see the button
pop up and work.
Review URL: http://codereview.chromium.org/2891015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52734 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
5 files changed, 123 insertions, 9 deletions
diff --git a/chrome/browser/cocoa/translate/before_translate_infobar_controller.h b/chrome/browser/cocoa/translate/before_translate_infobar_controller.h index 0ff8cc8..ff54daa 100644 --- a/chrome/browser/cocoa/translate/before_translate_infobar_controller.h +++ b/chrome/browser/cocoa/translate/before_translate_infobar_controller.h @@ -5,7 +5,19 @@ #import "chrome/browser/cocoa/translate/translate_infobar_base.h" @interface BeforeTranslateInfobarController : TranslateInfoBarControllerBase { - + scoped_nsobject<NSButton> alwaysTranslateButton_; + scoped_nsobject<NSButton> neverTranslateButton_; } +// Creates and initializes the alwaysTranslate and neverTranslate buttons. +- (void)initializeExtraControls; + @end + +@interface BeforeTranslateInfobarController (TestingAPI) + +- (NSButton*)alwaysTranslateButton; +- (NSButton*)neverTranslateButton; + +@end + diff --git a/chrome/browser/cocoa/translate/before_translate_infobar_controller.mm b/chrome/browser/cocoa/translate/before_translate_infobar_controller.mm index bcae753..44beb4b 100644 --- a/chrome/browser/cocoa/translate/before_translate_infobar_controller.mm +++ b/chrome/browser/cocoa/translate/before_translate_infobar_controller.mm @@ -11,13 +11,60 @@ using TranslateInfoBarUtilities::MoveControl; using TranslateInfoBarUtilities::VerifyControlOrderAndSpacing; +namespace { + +NSButton* CreateNSButtonWithResourceIDAndParameter( + int resourceId, const string16& param) { + string16 title = l10n_util::GetStringFUTF16(resourceId, param); + NSButton* button = [[NSButton alloc] init]; + [button setTitle:base::SysUTF16ToNSString(title)]; + [button setBezelStyle:NSTexturedRoundedBezelStyle]; + return button; +} + +} // namespace + @implementation BeforeTranslateInfobarController +- (id) initWithDelegate:(InfoBarDelegate *)delegate { + if ((self = [super initWithDelegate:delegate])) { + [self initializeExtraControls]; + } + return self; +} + +- (void)initializeExtraControls { + TranslateInfoBarDelegate* delegate = [self delegate]; + const string16& language = delegate->GetLanguageDisplayableNameAt( + delegate->original_language_index()); + neverTranslateButton_.reset( + CreateNSButtonWithResourceIDAndParameter( + IDS_TRANSLATE_INFOBAR_NEVER_TRANSLATE, language)); + [neverTranslateButton_ setTarget:self]; + [neverTranslateButton_ setAction:@selector(neverTranslate:)]; + + alwaysTranslateButton_.reset( + CreateNSButtonWithResourceIDAndParameter( + IDS_TRANSLATE_INFOBAR_ALWAYS_TRANSLATE, language)); + [alwaysTranslateButton_ setTarget:self]; + [alwaysTranslateButton_ setAction:@selector(alwaysTranslate:)]; +} + - (void)layout { MoveControl(label1_, fromLanguagePopUp_, spaceBetweenControls_ / 2, true); MoveControl(fromLanguagePopUp_, label2_, spaceBetweenControls_, true); MoveControl(label2_, okButton_, spaceBetweenControls_, true); MoveControl(okButton_, cancelButton_, spaceBetweenControls_, true); + NSView* lastControl = cancelButton_; + if (neverTranslateButton_.get()) { + MoveControl(lastControl, neverTranslateButton_.get(), + spaceBetweenControls_, true); + lastControl = neverTranslateButton_.get(); + } + if (alwaysTranslateButton_.get()) { + MoveControl(lastControl, alwaysTranslateButton_.get(), + spaceBetweenControls_, true); + } } - (void)loadLabelText { @@ -33,8 +80,27 @@ using TranslateInfoBarUtilities::VerifyControlOrderAndSpacing; } - (NSArray*)visibleControls { - return [NSArray arrayWithObjects:label1_.get(), fromLanguagePopUp_.get(), - label2_.get(), okButton_, cancelButton_, nil]; + NSMutableArray* visibleControls = [NSMutableArray arrayWithObjects: + label1_.get(), fromLanguagePopUp_.get(), label2_.get(), + okButton_, cancelButton_, nil]; + + if ([self delegate]->ShouldShowNeverTranslateButton()) + [visibleControls addObject:neverTranslateButton_.get()]; + + if ([self delegate]->ShouldShowAlwaysTranslateButton()) + [visibleControls addObject:alwaysTranslateButton_.get()]; + + return visibleControls; +} + +// This is called when the "Never Translate [language]" button is pressed. +- (void)neverTranslate:(id)sender { + [self delegate]->NeverTranslatePageLanguage(); +} + +// This is called when the "Always Translate [language]" button is pressed. +- (void)alwaysTranslate:(id)sender { + [self delegate]->AlwaysTranslatePageLanguage(); } - (bool)verifyLayout { @@ -44,3 +110,14 @@ using TranslateInfoBarUtilities::VerifyControlOrderAndSpacing; } @end + +@implementation BeforeTranslateInfobarController (TestingAPI) + +- (NSButton*)alwaysTranslateButton { + return alwaysTranslateButton_.get(); +} +- (NSButton*)neverTranslateButton { + return neverTranslateButton_.get(); +} + +@end diff --git a/chrome/browser/cocoa/translate/translate_infobar_base.h b/chrome/browser/cocoa/translate/translate_infobar_base.h index befa37c..116abd5 100644 --- a/chrome/browser/cocoa/translate/translate_infobar_base.h +++ b/chrome/browser/cocoa/translate/translate_infobar_base.h @@ -14,7 +14,6 @@ #include "chrome/browser/translate/languages_menu_model.h" #include "chrome/browser/translate/options_menu_model.h" #include "chrome/browser/translate/translate_infobar_delegate.h" -#include "chrome/common/notification_registrar.h" #include "chrome/common/translate_errors.h" class TranslateInfoBarMenuModel; diff --git a/chrome/browser/cocoa/translate/translate_infobar_base.mm b/chrome/browser/cocoa/translate/translate_infobar_base.mm index bf2b631..108ce74 100644 --- a/chrome/browser/cocoa/translate/translate_infobar_base.mm +++ b/chrome/browser/cocoa/translate/translate_infobar_base.mm @@ -20,7 +20,6 @@ #include "chrome/browser/cocoa/translate/translate_message_infobar_controller.h" #include "chrome/browser/translate/translate_infobar_delegate.h" #include "grit/generated_resources.h" -#include "grit/locale_settings.h" #include "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" using TranslateInfoBarUtilities::MoveControl; diff --git a/chrome/browser/cocoa/translate/translate_infobar_unittest.mm b/chrome/browser/cocoa/translate/translate_infobar_unittest.mm index 4aea03b..8e3d257 100644 --- a/chrome/browser/cocoa/translate/translate_infobar_unittest.mm +++ b/chrome/browser/cocoa/translate/translate_infobar_unittest.mm @@ -12,12 +12,9 @@ #import "chrome/browser/cocoa/infobar.h" #import "chrome/browser/cocoa/translate/translate_infobar_base.h" #import "chrome/browser/cocoa/translate/before_translate_infobar_controller.h" -#import "chrome/browser/cocoa/translate/after_translate_infobar_controller.h" -#import "chrome/browser/cocoa/translate/translate_message_infobar_controller.h" #import "chrome/browser/renderer_host/site_instance.h" #import "chrome/browser/tab_contents/tab_contents.h" #import "chrome/browser/translate/translate_infobar_delegate.h" -#import "ipc/ipc_channel.h" #import "testing/gmock/include/gmock/gmock.h" #import "testing/gtest/include/gtest/gtest.h" #import "testing/platform_test.h" @@ -222,4 +219,34 @@ TEST_F(TranslationInfoBarTest, Bug36895) { } } -} // namespace +// Verify that the infobar shows the "Always translate this language" button +// after doing 3 translations. +TEST_F(TranslationInfoBarTest, TriggerShowAlwaysTranslateButton) { + TranslatePrefs translate_prefs(browser_helper_.profile()->GetPrefs()); + translate_prefs.ResetTranslationAcceptedCount("en"); + for (int i = 0; i < 4; ++i) { + translate_prefs.IncrementTranslationAcceptedCount("en"); + } + CreateInfoBar(TranslateInfoBarDelegate::kBeforeTranslate); + BeforeTranslateInfobarController* controller = + (BeforeTranslateInfobarController*)infobar_controller.get(); + EXPECT_TRUE([[controller alwaysTranslateButton] superview] != nil); + EXPECT_TRUE([[controller neverTranslateButton] superview] == nil); +} + +// Verify that the infobar shows the "Never translate this language" button +// after denying 3 translations. +TEST_F(TranslationInfoBarTest, TriggerShowNeverTranslateButton) { + TranslatePrefs translate_prefs(browser_helper_.profile()->GetPrefs()); + translate_prefs.ResetTranslationDeniedCount("en"); + for (int i = 0; i < 4; ++i) { + translate_prefs.IncrementTranslationDeniedCount("en"); + } + CreateInfoBar(TranslateInfoBarDelegate::kBeforeTranslate); + BeforeTranslateInfobarController* controller = + (BeforeTranslateInfobarController*)infobar_controller.get(); + EXPECT_TRUE([[controller alwaysTranslateButton] superview] == nil); + EXPECT_TRUE([[controller neverTranslateButton] superview] != nil); +} + +} // namespace |