Index: chrome/browser/cocoa/translate_infobar.mm |
=================================================================== |
--- chrome/browser/cocoa/translate_infobar.mm (revision 49931) |
+++ chrome/browser/cocoa/translate_infobar.mm (working copy) |
@@ -21,6 +21,9 @@ |
#include "grit/locale_settings.h" |
#include "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" |
+// http://crbug.com/46663 disabled since it never worked. |
+#define DISABLE_VERIFY_CONTROL_ORDER 1 |
+ |
// Colors for translate infobar gradient background. |
const int kGreyTopColor[] = {0xC0, 0xC0, 0xC0}; |
const int kGreyBottomColor[] = {0xCC, 0xCC, 0xCC}; |
@@ -61,17 +64,26 @@ |
// Check that the control |before| is ordered visually before the |after| |
// control. |
// Also, check that there is space between them. |
+// http://crbug.com/46663 the code below seems to be the reverse of this |
+// comment. |
+#if !defined(DISABLE_VERIFY_CONTROL_ORDER) |
bool VerifyControlOrderAndSpacing(id before, id after) { |
- NSRect beforeFrame = [before frame]; |
- NSRect afterFrame = [after frame]; |
- NSUInteger spaceBetweenControls = -1; |
- |
+ CGFloat spaceBetweenControls = 0; |
+ if (before && after) { |
+ // When messaging nil, the rects won't always be zeroed (only sizeof(id) is |
+ // going to be zeroed by the Objective-C runtime, rest will be uninitialized |
+ // memory). |
+ NSRect beforeFrame = [before frame]; |
+ NSRect afterFrame = [after frame]; |
spaceBetweenControls = NSMaxX(beforeFrame) - NSMinX(afterFrame); |
// RTL case to be used when we have an RTL version of this UI. |
// spaceBetweenControls = NSMaxX(afterFrame) - NSMinX(beforeFrame); |
+ } |
+ |
return (spaceBetweenControls >= 0); |
} |
+#endif // !defined(DISABLE_VERIFY_CONTROL_ORDER) |
// Creates a label control in the style we need for the translate infobar's |
// labels within |bounds|. |
@@ -771,6 +783,13 @@ |
} |
// Step 2: Check that controls are ordered correctly with no overlap. |
+#if !defined(DISABLE_VERIFY_CONTROL_ORDER) |
+ // http://crbug.com/46663 this appears to be invalid. |
+ // VerifyControlOrderAndSpacing had an unsigned >= 0 bug, so it used to always |
+ // return true. With that bug fixed, this loop now can return a failure. |
+ // Scanning the code, it's not clear how this would pass since not all |
+ // controls are visible and it needs the array order to always match display |
+ // order. |
id previousControl = nil; |
for (NSUInteger i = 0; i < [allControls count]; ++i) { |
id control = [allControls objectAtIndex:i]; |
@@ -783,6 +802,7 @@ |
} |
previousControl = control; |
} |
+#endif // !defined(DISABLE_VERIFY_CONTROL_ORDER) |
// Step 3: Check other misc. attributes of layout. |
if (state == TranslateInfoBarDelegate::kTranslateError && translationPending) |