| OLD | NEW | 
| (Empty) |  | 
 |   1 // Copyright 2016 The Chromium Authors. All rights reserved. | 
 |   2 // Use of this source code is governed by a BSD-style license that can be | 
 |   3 // found in the LICENSE file. | 
 |   4  | 
 |   5 #import "ui/base/test/scoped_preferred_scroller_style_mac.h" | 
 |   6  | 
 |   7 #import "base/mac/sdk_forward_declarations.h" | 
 |   8 #import "base/mac/scoped_objc_class_swizzler.h" | 
 |   9  | 
 |  10 using base::mac::ScopedObjCClassSwizzler; | 
 |  11  | 
 |  12 namespace { | 
 |  13  | 
 |  14 void NotifyStyleChanged() { | 
 |  15   [[NSNotificationCenter defaultCenter] | 
 |  16       postNotificationName:NSPreferredScrollerStyleDidChangeNotification | 
 |  17                     object:nil]; | 
 |  18 } | 
 |  19  | 
 |  20 NSScrollerStyle GetScrollerStyle(bool overlay) { | 
 |  21   return overlay ? NSScrollerStyleOverlay : NSScrollerStyleLegacy; | 
 |  22 } | 
 |  23  | 
 |  24 }  // namespace | 
 |  25  | 
 |  26 // Donates a testing implementation of +[NSScroller preferredScrollerStyle] by | 
 |  27 // returning NSScrollerStyleLegacy. | 
 |  28 @interface FakeNSScrollerPreferredStyleLegacyDonor : NSObject | 
 |  29 @end | 
 |  30  | 
 |  31 @implementation FakeNSScrollerPreferredStyleLegacyDonor | 
 |  32  | 
 |  33 + (NSInteger)preferredScrollerStyle { | 
 |  34   return NSScrollerStyleLegacy; | 
 |  35 } | 
 |  36  | 
 |  37 @end | 
 |  38  | 
 |  39 // Donates a testing implementation of +[NSScroller preferredScrollerStyle] by | 
 |  40 // returning NSScrollerStyleOverlay. | 
 |  41 @interface FakeNSScrollerPreferredStyleOverlayDonor : NSObject | 
 |  42 @end | 
 |  43  | 
 |  44 @implementation FakeNSScrollerPreferredStyleOverlayDonor | 
 |  45  | 
 |  46 + (NSInteger)preferredScrollerStyle { | 
 |  47   return NSScrollerStyleOverlay; | 
 |  48 } | 
 |  49  | 
 |  50 @end | 
 |  51  | 
 |  52 namespace ui { | 
 |  53 namespace test { | 
 |  54  | 
 |  55 ScopedPreferredScrollerStyle::ScopedPreferredScrollerStyle(bool overlay) | 
 |  56     : overlay_(overlay) { | 
 |  57   if (![NSScroller respondsToSelector:@selector(preferredScrollerStyle)]) | 
 |  58     return; | 
 |  59  | 
 |  60   NSInteger previous_style = [NSScroller preferredScrollerStyle]; | 
 |  61   Class style_class = overlay_ | 
 |  62                           ? [FakeNSScrollerPreferredStyleOverlayDonor class] | 
 |  63                           : [FakeNSScrollerPreferredStyleLegacyDonor class]; | 
 |  64  | 
 |  65   swizzler_.reset(new ScopedObjCClassSwizzler( | 
 |  66       [NSScroller class], style_class, @selector(preferredScrollerStyle))); | 
 |  67  | 
 |  68   if (previous_style != GetScrollerStyle(overlay_)) | 
 |  69     NotifyStyleChanged(); | 
 |  70 } | 
 |  71  | 
 |  72 ScopedPreferredScrollerStyle::~ScopedPreferredScrollerStyle() { | 
 |  73   if (!swizzler_) | 
 |  74     return;  // Handle 10.6, which wouldn't have swizzled anything. | 
 |  75  | 
 |  76   swizzler_.reset(); | 
 |  77  | 
 |  78   if ([NSScroller preferredScrollerStyle] != GetScrollerStyle(overlay_)) | 
 |  79     NotifyStyleChanged(); | 
 |  80 } | 
 |  81  | 
 |  82 }  // namespace test | 
 |  83 }  // namespace ui | 
| OLD | NEW |