Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: chrome/browser/ui/cocoa/translate/translate_infobar_base.mm

Issue 7981045: Make infobars ignore button clicks when closing. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import <Cocoa/Cocoa.h> 5 #import <Cocoa/Cocoa.h>
6 #import "chrome/browser/ui/cocoa/translate/translate_infobar_base.h" 6 #import "chrome/browser/ui/cocoa/translate/translate_infobar_base.h"
7 7
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/sys_string_conversions.h" 10 #include "base/sys_string_conversions.h"
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 [[optionsPopUp_ cell] setArrowPosition:NSPopUpArrowAtCenter]; 513 [[optionsPopUp_ cell] setArrowPosition:NSPopUpArrowAtCenter];
514 MoveControl(closeButton_, optionsPopUp_, spaceBetweenControls_, false); 514 MoveControl(closeButton_, optionsPopUp_, spaceBetweenControls_, false);
515 if (!VerifyControlOrderAndSpacing(lastView, optionsPopUp_)) { 515 if (!VerifyControlOrderAndSpacing(lastView, optionsPopUp_)) {
516 [optionsPopUp_ setHidden:YES]; 516 [optionsPopUp_ setHidden:YES];
517 } 517 }
518 } 518 }
519 } 519 }
520 520
521 // Called when "Translate" button is clicked. 521 // Called when "Translate" button is clicked.
522 - (IBAction)ok:(id)sender { 522 - (IBAction)ok:(id)sender {
523 // The delegate may be NULL if the infobar was closed. 523 if (![self owned])
524 return; // We're closing; don't call anything, it might access the owner.
524 TranslateInfoBarDelegate* delegate = [self delegate]; 525 TranslateInfoBarDelegate* delegate = [self delegate];
525 if (delegate) { 526 TranslateInfoBarDelegate::Type state = delegate->type();
526 TranslateInfoBarDelegate::Type state = delegate->type(); 527 DCHECK(state == TranslateInfoBarDelegate::BEFORE_TRANSLATE ||
527 DCHECK(state == TranslateInfoBarDelegate::BEFORE_TRANSLATE || 528 state == TranslateInfoBarDelegate::TRANSLATION_ERROR);
528 state == TranslateInfoBarDelegate::TRANSLATION_ERROR); 529 delegate->Translate();
529 delegate->Translate();
530 }
531 UMA_HISTOGRAM_COUNTS("Translate.Translate", 1); 530 UMA_HISTOGRAM_COUNTS("Translate.Translate", 1);
532 } 531 }
533 532
534 // Called when someone clicks on the "Nope" button. 533 // Called when someone clicks on the "Nope" button.
535 - (IBAction)cancel:(id)sender { 534 - (IBAction)cancel:(id)sender {
536 // The delegate may be NULL if the infobar was closed. 535 if (![self owned])
536 return; // We're closing; don't call anything, it might access the owner.
537 TranslateInfoBarDelegate* delegate = [self delegate]; 537 TranslateInfoBarDelegate* delegate = [self delegate];
538 if (delegate) { 538 DCHECK(delegate->type() == TranslateInfoBarDelegate::BEFORE_TRANSLATE);
539 DCHECK(delegate->type() == TranslateInfoBarDelegate::BEFORE_TRANSLATE); 539 delegate->TranslationDeclined();
540 delegate->TranslationDeclined(); 540 UMA_HISTOGRAM_COUNTS("Translate.DeclineTranslate", 1);
541 UMA_HISTOGRAM_COUNTS("Translate.DeclineTranslate", 1); 541 [super removeSelf];
542 }
543 [super dismiss:nil];
544 } 542 }
545 543
546 - (void)messageButtonPressed:(id)sender { 544 - (void)messageButtonPressed:(id)sender {
547 // The delegate may be NULL if the infobar was closed. 545 if (![self owned])
548 TranslateInfoBarDelegate* delegate = [self delegate]; 546 return; // We're closing; don't call anything, it might access the owner.
549 if (delegate) 547 [self delegate]->MessageInfoBarButtonPressed();
550 delegate->MessageInfoBarButtonPressed();
551 } 548 }
552 549
553 - (IBAction)showOriginal:(id)sender { 550 - (IBAction)showOriginal:(id)sender {
554 // The delegate may be NULL if the infobar was closed. 551 if (![self owned])
555 TranslateInfoBarDelegate* delegate = [self delegate]; 552 return; // We're closing; don't call anything, it might access the owner.
556 if (delegate) 553 [self delegate]->RevertTranslation();
557 delegate->RevertTranslation();
558 } 554 }
559 555
560 // Called when any of the language drop down menus are changed. 556 // Called when any of the language drop down menus are changed.
561 - (void)languageMenuChanged:(id)item { 557 - (void)languageMenuChanged:(id)item {
562 // The delegate may be NULL if the infobar was closed. 558 if (![self owned])
563 if (![self delegate]) 559 return; // We're closing; don't call anything, it might access the owner.
564 return;
565 if ([item respondsToSelector:@selector(tag)]) { 560 if ([item respondsToSelector:@selector(tag)]) {
566 int cmd = [item tag]; 561 int cmd = [item tag];
567 if (cmd >= IDC_TRANSLATE_TARGET_LANGUAGE_BASE) { 562 if (cmd >= IDC_TRANSLATE_TARGET_LANGUAGE_BASE) {
568 cmd -= IDC_TRANSLATE_TARGET_LANGUAGE_BASE; 563 cmd -= IDC_TRANSLATE_TARGET_LANGUAGE_BASE;
569 [self targetLanguageModified:cmd]; 564 [self targetLanguageModified:cmd];
570 return; 565 return;
571 } else if (cmd >= IDC_TRANSLATE_ORIGINAL_LANGUAGE_BASE) { 566 } else if (cmd >= IDC_TRANSLATE_ORIGINAL_LANGUAGE_BASE) {
572 cmd -= IDC_TRANSLATE_ORIGINAL_LANGUAGE_BASE; 567 cmd -= IDC_TRANSLATE_ORIGINAL_LANGUAGE_BASE;
573 [self sourceLanguageModified:cmd]; 568 [self sourceLanguageModified:cmd];
574 return; 569 return;
575 } 570 }
576 } 571 }
577 NOTREACHED() << "Language menu was changed with a bad language ID"; 572 NOTREACHED() << "Language menu was changed with a bad language ID";
578 } 573 }
579 574
580 // Called when the options menu is changed. 575 // Called when the options menu is changed.
581 - (void)optionsMenuChanged:(id)item { 576 - (void)optionsMenuChanged:(id)item {
577 if (![self owned])
578 return; // We're closing; don't call anything, it might access the owner.
582 if ([item respondsToSelector:@selector(tag)]) { 579 if ([item respondsToSelector:@selector(tag)]) {
583 int cmd = [item tag]; 580 int cmd = [item tag];
584 // Danger Will Robinson! : This call can release the infobar (e.g. invoking 581 // Danger Will Robinson! : This call can release the infobar (e.g. invoking
585 // "About Translate" can open a new tab). 582 // "About Translate" can open a new tab).
586 // Do not access member variables after this line! 583 // Do not access member variables after this line!
587 optionsMenuModel_->ExecuteCommand(cmd); 584 optionsMenuModel_->ExecuteCommand(cmd);
588 } else { 585 } else {
589 NOTREACHED(); 586 NOTREACHED();
590 } 587 }
591 } 588 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 return false; 671 return false;
675 } 672 }
676 previousControl = control; 673 previousControl = control;
677 } 674 }
678 675
679 return true; 676 return true;
680 } 677 }
681 678
682 @end // TranslateInfoBarControllerBase (TestingAPI) 679 @end // TranslateInfoBarControllerBase (TestingAPI)
683 680
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698