summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/cocoa/translate/before_translate_infobar_controller.h14
-rw-r--r--chrome/browser/cocoa/translate/before_translate_infobar_controller.mm81
-rw-r--r--chrome/browser/cocoa/translate/translate_infobar_base.h1
-rw-r--r--chrome/browser/cocoa/translate/translate_infobar_base.mm1
-rw-r--r--chrome/browser/cocoa/translate/translate_infobar_unittest.mm35
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