Commit b75f6ec6 authored by Stefan Zager's avatar Stefan Zager Committed by Commit Bot

Speculative fix for mac DCHECK failure

BUG=880388

Change-Id: Ie1a1c4fcf3ee6dbf7a058fdfdf88c3e84417097c
Reviewed-on: https://chromium-review.googlesource.com/c/1265831Reviewed-by: default avatarPhilip Rogers <pdr@chromium.org>
Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Commit-Queue: Stefan Zager <szager@chromium.org>
Cr-Commit-Position: refs/heads/master@{#597582}
parent a6ac5b9e
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
@interface BlinkScrollbarObserver : NSObject { @interface BlinkScrollbarObserver : NSObject {
blink::Scrollbar* _scrollbar; blink::Scrollbar* _scrollbar;
RetainPtr<ScrollbarPainter> _scrollbarPainter; RetainPtr<ScrollbarPainter> _scrollbarPainter;
BOOL _suppressSetScrollbarsHidden;
} }
- (id)initWithScrollbar:(blink::Scrollbar*)scrollbar - (id)initWithScrollbar:(blink::Scrollbar*)scrollbar
painter:(const RetainPtr<ScrollbarPainter>&)painter; painter:(const RetainPtr<ScrollbarPainter>&)painter;
...@@ -78,6 +79,10 @@ ...@@ -78,6 +79,10 @@
return _scrollbarPainter.Get(); return _scrollbarPainter.Get();
} }
- (void)setSuppressSetScrollbarsHidden:(BOOL)value {
_suppressSetScrollbarsHidden = value;
}
- (void)dealloc { - (void)dealloc {
[_scrollbarPainter.Get() removeObserver:self forKeyPath:@"knobAlpha"]; [_scrollbarPainter.Get() removeObserver:self forKeyPath:@"knobAlpha"];
[super dealloc]; [super dealloc];
...@@ -88,8 +93,10 @@ ...@@ -88,8 +93,10 @@
change:(NSDictionary*)change change:(NSDictionary*)change
context:(void*)context { context:(void*)context {
if ([keyPath isEqualToString:@"knobAlpha"]) { if ([keyPath isEqualToString:@"knobAlpha"]) {
BOOL visible = [_scrollbarPainter.Get() knobAlpha] > 0; if (!_suppressSetScrollbarsHidden) {
_scrollbar->SetScrollbarsHiddenIfOverlay(!visible); BOOL visible = [_scrollbarPainter.Get() knobAlpha] > 0;
_scrollbar->SetScrollbarsHiddenIfOverlay(!visible);
}
} }
} }
...@@ -283,7 +290,9 @@ void ScrollbarThemeMac::PaintThumbInternal(GraphicsContext& context, ...@@ -283,7 +290,9 @@ void ScrollbarThemeMac::PaintThumbInternal(GraphicsContext& context,
{ {
LocalCurrentGraphicsContext local_context(context, local_rect); LocalCurrentGraphicsContext local_context(context, local_rect);
ScrollbarPainter scrollbar_painter = PainterForScrollbar(scrollbar); RetainPtr<BlinkScrollbarObserver> observer =
GetScrollbarPainterMap().at(const_cast<Scrollbar*>(&scrollbar));
ScrollbarPainter scrollbar_painter = [observer.Get() painter];
[scrollbar_painter setEnabled:scrollbar.Enabled()]; [scrollbar_painter setEnabled:scrollbar.Enabled()];
// drawKnob aligns the thumb to right side of the draw rect. // drawKnob aligns the thumb to right side of the draw rect.
// If the vertical overlay scrollbar is on the left, use trackWidth instead // If the vertical overlay scrollbar is on the left, use trackWidth instead
...@@ -299,6 +308,7 @@ void ScrollbarThemeMac::PaintThumbInternal(GraphicsContext& context, ...@@ -299,6 +308,7 @@ void ScrollbarThemeMac::PaintThumbInternal(GraphicsContext& context,
[scrollbar_painter setDoubleValue:0]; [scrollbar_painter setDoubleValue:0];
[scrollbar_painter setKnobProportion:1]; [scrollbar_painter setKnobProportion:1];
[observer.Get() setSuppressSetScrollbarsHidden:YES];
CGFloat old_knob_alpha = [scrollbar_painter knobAlpha]; CGFloat old_knob_alpha = [scrollbar_painter knobAlpha];
[scrollbar_painter setKnobAlpha:1]; [scrollbar_painter setKnobAlpha:1];
...@@ -311,6 +321,7 @@ void ScrollbarThemeMac::PaintThumbInternal(GraphicsContext& context, ...@@ -311,6 +321,7 @@ void ScrollbarThemeMac::PaintThumbInternal(GraphicsContext& context,
[scrollbar_painter [scrollbar_painter
setBoundsSize:NSSizeFromCGSize(CGSize(scrollbar.FrameRect().Size()))]; setBoundsSize:NSSizeFromCGSize(CGSize(scrollbar.FrameRect().Size()))];
[scrollbar_painter setKnobAlpha:old_knob_alpha]; [scrollbar_painter setKnobAlpha:old_knob_alpha];
[observer.Get() setSuppressSetScrollbarsHidden:NO];
} }
if (opacity != 1.0f) if (opacity != 1.0f)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment