| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/cocoa/translate_infobar.h" | 6 #import "chrome/browser/cocoa/translate_infobar.h" |
| 7 | 7 |
| 8 #include "app/l10n_util.h" | 8 #include "app/l10n_util.h" |
| 9 #include "base/logging.h" // for NOTREACHED() | 9 #include "base/logging.h" // for NOTREACHED() |
| 10 #include "base/mac_util.h" | 10 #include "base/mac_util.h" |
| 11 #include "base/sys_string_conversions.h" | 11 #include "base/sys_string_conversions.h" |
| 12 #include "chrome/app/chrome_dll_resource.h" | 12 #include "chrome/app/chrome_dll_resource.h" |
| 13 #import "chrome/browser/cocoa/hover_close_button.h" | 13 #import "chrome/browser/cocoa/hover_close_button.h" |
| 14 #include "chrome/browser/cocoa/infobar.h" | 14 #include "chrome/browser/cocoa/infobar.h" |
| 15 #import "chrome/browser/cocoa/infobar_controller.h" | 15 #import "chrome/browser/cocoa/infobar_controller.h" |
| 16 #import "chrome/browser/cocoa/infobar_gradient_view.h" | 16 #import "chrome/browser/cocoa/infobar_gradient_view.h" |
| 17 #include "chrome/browser/tab_contents/tab_contents.h" | 17 #include "chrome/browser/tab_contents/tab_contents.h" |
| 18 #include "chrome/browser/translate/page_translated_details.h" | 18 #include "chrome/browser/translate/page_translated_details.h" |
| 19 #include "chrome/common/notification_service.h" | 19 #include "chrome/common/notification_service.h" |
| 20 #include "grit/generated_resources.h" | 20 #include "grit/generated_resources.h" |
| 21 #include "grit/locale_settings.h" | 21 #include "grit/locale_settings.h" |
| 22 #include "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" | 22 #include "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" |
| 23 | 23 |
| 24 // http://crbug.com/46663 disabled since it never worked. |
| 25 #define DISABLE_VERIFY_CONTROL_ORDER 1 |
| 26 |
| 24 // Colors for translate infobar gradient background. | 27 // Colors for translate infobar gradient background. |
| 25 const int kGreyTopColor[] = {0xC0, 0xC0, 0xC0}; | 28 const int kGreyTopColor[] = {0xC0, 0xC0, 0xC0}; |
| 26 const int kGreyBottomColor[] = {0xCC, 0xCC, 0xCC}; | 29 const int kGreyBottomColor[] = {0xCC, 0xCC, 0xCC}; |
| 27 | 30 |
| 28 #pragma mark Anonymous helper functions. | 31 #pragma mark Anonymous helper functions. |
| 29 namespace { | 32 namespace { |
| 30 | 33 |
| 31 // Move the |toMove| view |spacing| pixels before/after the |anchor| view. | 34 // Move the |toMove| view |spacing| pixels before/after the |anchor| view. |
| 32 // |after| signifies the side of |anchor| on which to place |toMove|. | 35 // |after| signifies the side of |anchor| on which to place |toMove|. |
| 33 void MoveControl(NSView* anchor, NSView* toMove, int spacing, bool after) { | 36 void MoveControl(NSView* anchor, NSView* toMove, int spacing, bool after) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 54 NSRect viewFrame = [toMove frame]; | 57 NSRect viewFrame = [toMove frame]; |
| 55 | 58 |
| 56 viewFrame.origin.y = | 59 viewFrame.origin.y = |
| 57 floor((NSHeight(superViewFrame) - NSHeight(viewFrame))/2.0); | 60 floor((NSHeight(superViewFrame) - NSHeight(viewFrame))/2.0); |
| 58 [toMove setFrame:viewFrame]; | 61 [toMove setFrame:viewFrame]; |
| 59 } | 62 } |
| 60 | 63 |
| 61 // Check that the control |before| is ordered visually before the |after| | 64 // Check that the control |before| is ordered visually before the |after| |
| 62 // control. | 65 // control. |
| 63 // Also, check that there is space between them. | 66 // Also, check that there is space between them. |
| 67 // http://crbug.com/46663 the code below seems to be the reverse of this |
| 68 // comment. |
| 69 #if !defined(DISABLE_VERIFY_CONTROL_ORDER) |
| 64 bool VerifyControlOrderAndSpacing(id before, id after) { | 70 bool VerifyControlOrderAndSpacing(id before, id after) { |
| 65 NSRect beforeFrame = [before frame]; | 71 CGFloat spaceBetweenControls = 0; |
| 66 NSRect afterFrame = [after frame]; | 72 if (before && after) { |
| 67 NSUInteger spaceBetweenControls = -1; | 73 // When messaging nil, the rects won't always be zeroed (only sizeof(id) is |
| 68 | 74 // going to be zeroed by the Objective-C runtime, rest will be uninitialized |
| 75 // memory). |
| 76 NSRect beforeFrame = [before frame]; |
| 77 NSRect afterFrame = [after frame]; |
| 69 spaceBetweenControls = NSMaxX(beforeFrame) - NSMinX(afterFrame); | 78 spaceBetweenControls = NSMaxX(beforeFrame) - NSMinX(afterFrame); |
| 70 // RTL case to be used when we have an RTL version of this UI. | 79 // RTL case to be used when we have an RTL version of this UI. |
| 71 // spaceBetweenControls = NSMaxX(afterFrame) - NSMinX(beforeFrame); | 80 // spaceBetweenControls = NSMaxX(afterFrame) - NSMinX(beforeFrame); |
| 72 | 81 |
| 82 } |
| 83 |
| 73 return (spaceBetweenControls >= 0); | 84 return (spaceBetweenControls >= 0); |
| 74 } | 85 } |
| 86 #endif // !defined(DISABLE_VERIFY_CONTROL_ORDER) |
| 75 | 87 |
| 76 // Creates a label control in the style we need for the translate infobar's | 88 // Creates a label control in the style we need for the translate infobar's |
| 77 // labels within |bounds|. | 89 // labels within |bounds|. |
| 78 NSTextField* CreateLabel(NSRect bounds) { | 90 NSTextField* CreateLabel(NSRect bounds) { |
| 79 NSTextField* ret = [[NSTextField alloc] initWithFrame:bounds]; | 91 NSTextField* ret = [[NSTextField alloc] initWithFrame:bounds]; |
| 80 [ret setEditable:NO]; | 92 [ret setEditable:NO]; |
| 81 [ret setDrawsBackground:NO]; | 93 [ret setDrawsBackground:NO]; |
| 82 [ret setBordered:NO]; | 94 [ret setBordered:NO]; |
| 83 return ret; | 95 return ret; |
| 84 } | 96 } |
| (...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 764 LOG(ERROR) << | 776 LOG(ERROR) << |
| 765 "State: " << state << " translationPending " << translationPending << | 777 "State: " << state << " translationPending " << translationPending << |
| 766 " Control @" << i << (hasSuperView ? " has" : " doesn't have") << | 778 " Control @" << i << (hasSuperView ? " has" : " doesn't have") << |
| 767 " a superview" << [[control description] UTF8String] << | 779 " a superview" << [[control description] UTF8String] << |
| 768 " Title=" << [title UTF8String]; | 780 " Title=" << [title UTF8String]; |
| 769 return false; | 781 return false; |
| 770 } | 782 } |
| 771 } | 783 } |
| 772 | 784 |
| 773 // Step 2: Check that controls are ordered correctly with no overlap. | 785 // Step 2: Check that controls are ordered correctly with no overlap. |
| 786 #if !defined(DISABLE_VERIFY_CONTROL_ORDER) |
| 787 // http://crbug.com/46663 this appears to be invalid. |
| 788 // VerifyControlOrderAndSpacing had an unsigned >= 0 bug, so it used to always |
| 789 // return true. With that bug fixed, this loop now can return a failure. |
| 790 // Scanning the code, it's not clear how this would pass since not all |
| 791 // controls are visible and it needs the array order to always match display |
| 792 // order. |
| 774 id previousControl = nil; | 793 id previousControl = nil; |
| 775 for (NSUInteger i = 0; i < [allControls count]; ++i) { | 794 for (NSUInteger i = 0; i < [allControls count]; ++i) { |
| 776 id control = [allControls objectAtIndex:i]; | 795 id control = [allControls objectAtIndex:i]; |
| 777 if (!VerifyControlOrderAndSpacing(previousControl, control)) { | 796 if (!VerifyControlOrderAndSpacing(previousControl, control)) { |
| 778 LOG(ERROR) << | 797 LOG(ERROR) << |
| 779 "State: " << state << " translationPending " << translationPending << | 798 "State: " << state << " translationPending " << translationPending << |
| 780 " Control @" << i << " not ordered correctly: " << | 799 " Control @" << i << " not ordered correctly: " << |
| 781 [[control description] UTF8String]; | 800 [[control description] UTF8String]; |
| 782 return false; | 801 return false; |
| 783 } | 802 } |
| 784 previousControl = control; | 803 previousControl = control; |
| 785 } | 804 } |
| 805 #endif // !defined(DISABLE_VERIFY_CONTROL_ORDER) |
| 786 | 806 |
| 787 // Step 3: Check other misc. attributes of layout. | 807 // Step 3: Check other misc. attributes of layout. |
| 788 if (state == TranslateInfoBarDelegate::kTranslateError && translationPending) | 808 if (state == TranslateInfoBarDelegate::kTranslateError && translationPending) |
| 789 { | 809 { |
| 790 if ([[label1_ stringValue] length] != 0) { | 810 if ([[label1_ stringValue] length] != 0) { |
| 791 LOG(ERROR) << "Expected empty label1_, instead got" << | 811 LOG(ERROR) << "Expected empty label1_, instead got" << |
| 792 [[label1_ description] UTF8String]; | 812 [[label1_ description] UTF8String]; |
| 793 return false; | 813 return false; |
| 794 } | 814 } |
| 795 } | 815 } |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 912 PageTranslatedDetails* page_translated_details = | 932 PageTranslatedDetails* page_translated_details = |
| 913 Details<PageTranslatedDetails>(details).ptr(); | 933 Details<PageTranslatedDetails>(details).ptr(); |
| 914 TranslateErrors::Type error = page_translated_details->error_type; | 934 TranslateErrors::Type error = page_translated_details->error_type; |
| 915 TranslateInfoBarDelegate::TranslateState newState = | 935 TranslateInfoBarDelegate::TranslateState newState = |
| 916 TranslateInfoBarDelegate::kAfterTranslate; | 936 TranslateInfoBarDelegate::kAfterTranslate; |
| 917 if (page_translated_details->error_type != TranslateErrors::NONE) | 937 if (page_translated_details->error_type != TranslateErrors::NONE) |
| 918 newState = TranslateInfoBarDelegate::kTranslateError; | 938 newState = TranslateInfoBarDelegate::kTranslateError; |
| 919 [controller_ updateState:newState translationPending:false error:error]; | 939 [controller_ updateState:newState translationPending:false error:error]; |
| 920 | 940 |
| 921 } | 941 } |
| OLD | NEW |