Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "chrome/browser/ui/cocoa/status_bubble_mac.h" | 5 #include "chrome/browser/ui/cocoa/status_bubble_mac.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| 11 #include "base/debug/stack_trace.h" | |
| 11 #include "base/mac/mac_util.h" | 12 #include "base/mac/mac_util.h" |
| 12 #include "base/mac/scoped_block.h" | 13 #include "base/mac/scoped_block.h" |
| 13 #include "base/mac/sdk_forward_declarations.h" | 14 #include "base/mac/sdk_forward_declarations.h" |
| 14 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
| 15 #include "base/strings/string_util.h" | 16 #include "base/strings/string_util.h" |
| 16 #include "base/strings/sys_string_conversions.h" | 17 #include "base/strings/sys_string_conversions.h" |
| 17 #include "base/strings/utf_string_conversions.h" | 18 #include "base/strings/utf_string_conversions.h" |
| 18 #import "chrome/browser/ui/cocoa/bubble_view.h" | 19 #import "chrome/browser/ui/cocoa/bubble_view.h" |
| 19 #include "chrome/browser/ui/elide_url.h" | 20 #include "chrome/browser/ui/elide_url.h" |
| 20 #include "net/base/net_util.h" | 21 #include "net/base/net_util.h" |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 198 void StatusBubbleMac::SetStatus(const base::string16& status) { | 199 void StatusBubbleMac::SetStatus(const base::string16& status) { |
| 199 SetText(status, false); | 200 SetText(status, false); |
| 200 } | 201 } |
| 201 | 202 |
| 202 void StatusBubbleMac::SetURL(const GURL& url, const std::string& languages) { | 203 void StatusBubbleMac::SetURL(const GURL& url, const std::string& languages) { |
| 203 url_ = url; | 204 url_ = url; |
| 204 languages_ = languages; | 205 languages_ = languages; |
| 205 | 206 |
| 206 CGFloat bubble_width = NSWidth([window_ frame]); | 207 CGFloat bubble_width = NSWidth([window_ frame]); |
| 207 if (state_ == kBubbleHidden) { | 208 if (state_ == kBubbleHidden) { |
| 208 DCHECK_EQ(ui::kWindowSizeDeterminedLater.size.width, | 209 // TODO(rohitrao): The window size is expected to be (1,1) whenever the |
| 209 [window_ frame].size.width); | 210 // window is hidden, but the GPU bots are hitting cases where this is not |
| 210 DCHECK_EQ(ui::kWindowSizeDeterminedLater.size.height, | 211 // true. Instead of enforcing this invariant with a DCHECK, add logging to |
| 211 [window_ frame].size.height); | 212 // try and debug it and fix up the window size if needed. crbug.com/464754 |
| 213 NSRect frame = [window_ frame]; | |
| 214 if (!CGSizeEqualToSize(frame.size, ui::kWindowSizeDeterminedLater.size)) { | |
|
erikchen
2015/03/17 18:14:31
You may want to wrap this logic so that it doesn't
erikchen
2015/03/17 18:15:37
I'm referring to the logs messages and stack_trace
| |
| 215 LOG(ERROR) << "Window size should be (1,1), but is instead (" | |
| 216 << frame.size.width << "," << frame.size.height << ")"; | |
| 217 LOG(ERROR) << base::debug::StackTrace().ToString(); | |
| 218 frame.size = ui::kWindowSizeDeterminedLater.size; | |
| 219 [window_ setFrame:frame display:NO]; | |
| 220 } | |
| 212 bubble_width = NSWidth(CalculateWindowFrame(/*expand=*/false)); | 221 bubble_width = NSWidth(CalculateWindowFrame(/*expand=*/false)); |
| 213 } | 222 } |
| 214 | 223 |
| 215 int text_width = static_cast<int>(bubble_width - | 224 int text_width = static_cast<int>(bubble_width - |
| 216 kBubbleViewTextPositionX - | 225 kBubbleViewTextPositionX - |
| 217 kTextPadding); | 226 kTextPadding); |
| 218 | 227 |
| 219 // Scale from view to window coordinates before eliding URL string. | 228 // Scale from view to window coordinates before eliding URL string. |
| 220 NSSize scaled_width = NSMakeSize(text_width, 0); | 229 NSSize scaled_width = NSMakeSize(text_width, 0); |
| 221 scaled_width = [[parent_ contentView] convertSize:scaled_width fromView:nil]; | 230 scaled_width = [[parent_ contentView] convertSize:scaled_width fromView:nil]; |
| (...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 752 } | 761 } |
| 753 | 762 |
| 754 void StatusBubbleMac::UpdateSizeAndPosition() { | 763 void StatusBubbleMac::UpdateSizeAndPosition() { |
| 755 if (!window_) | 764 if (!window_) |
| 756 return; | 765 return; |
| 757 | 766 |
| 758 // There is no need to update the size if the bubble is hidden. | 767 // There is no need to update the size if the bubble is hidden. |
| 759 if (state_ == kBubbleHidden) { | 768 if (state_ == kBubbleHidden) { |
| 760 // Verify that hidden bubbles always have size equal to | 769 // Verify that hidden bubbles always have size equal to |
| 761 // ui::kWindowSizeDeterminedLater. | 770 // ui::kWindowSizeDeterminedLater. |
| 762 DCHECK_EQ(ui::kWindowSizeDeterminedLater.size.width, | 771 // TODO(rohitrao): The GPU bots are hitting cases where this is not |
| 763 [window_ frame].size.width); | 772 // true. Instead of enforcing this invariant with a DCHECK, add logging to |
| 764 DCHECK_EQ(ui::kWindowSizeDeterminedLater.size.height, | 773 // try and debug it and fix up the window size if needed. crbug.com/464754 |
| 765 [window_ frame].size.height); | 774 NSRect frame = [window_ frame]; |
| 775 if (!CGSizeEqualToSize(frame.size, ui::kWindowSizeDeterminedLater.size)) { | |
| 776 LOG(ERROR) << "Window size should be (1,1), but is instead (" | |
| 777 << frame.size.width << "," << frame.size.height << ")"; | |
| 778 LOG(ERROR) << base::debug::StackTrace().ToString(); | |
| 779 frame.size = ui::kWindowSizeDeterminedLater.size; | |
| 780 [window_ setFrame:frame display:YES]; | |
| 781 } | |
| 766 return; | 782 return; |
| 767 } | 783 } |
| 768 | 784 |
| 769 SetFrameAvoidingMouse(CalculateWindowFrame(/*expand=*/false), | 785 SetFrameAvoidingMouse(CalculateWindowFrame(/*expand=*/false), |
| 770 GetMouseLocation()); | 786 GetMouseLocation()); |
| 771 } | 787 } |
| 772 | 788 |
| 773 void StatusBubbleMac::SwitchParentWindow(NSWindow* parent) { | 789 void StatusBubbleMac::SwitchParentWindow(NSWindow* parent) { |
| 774 DCHECK(parent); | 790 DCHECK(parent); |
| 775 DCHECK(is_attached()); | 791 DCHECK(is_attached()); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 824 } | 840 } |
| 825 | 841 |
| 826 // Round the top corners when the bubble is below the parent window. | 842 // Round the top corners when the bubble is below the parent window. |
| 827 if (NSMinY(window_frame) < NSMinY(parent_frame)) { | 843 if (NSMinY(window_frame) < NSMinY(parent_frame)) { |
| 828 corner_flags |= kRoundedTopLeftCorner | kRoundedTopRightCorner; | 844 corner_flags |= kRoundedTopLeftCorner | kRoundedTopRightCorner; |
| 829 } | 845 } |
| 830 } | 846 } |
| 831 | 847 |
| 832 return corner_flags; | 848 return corner_flags; |
| 833 } | 849 } |
| OLD | NEW |