| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/browser/theme_helper_mac.h" | 5 #include "content/browser/theme_helper_mac.h" |
| 6 | 6 |
| 7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/mac/mac_util.h" | 10 #include "base/mac/mac_util.h" |
| 11 #include "base/strings/sys_string_conversions.h" | 11 #include "base/strings/sys_string_conversions.h" |
| 12 #include "content/browser/renderer_host/render_process_host_impl.h" | 12 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 13 #include "content/common/renderer.mojom.h" |
| 13 #include "content/common/view_messages.h" | 14 #include "content/common/view_messages.h" |
| 14 #include "content/public/browser/browser_thread.h" | 15 #include "content/public/browser/browser_thread.h" |
| 15 #include "content/public/browser/notification_service.h" | 16 #include "content/public/browser/notification_service.h" |
| 16 #include "content/public/browser/notification_types.h" | 17 #include "content/public/browser/notification_types.h" |
| 17 #include "content/public/browser/render_process_host.h" | 18 #include "content/public/browser/render_process_host.h" |
| 18 #include "content/public/common/content_switches.h" | 19 #include "content/public/common/content_switches.h" |
| 19 | 20 |
| 20 using content::RenderProcessHost; | 21 using content::RenderProcessHost; |
| 21 using content::RenderProcessHostImpl; | 22 using content::RenderProcessHostImpl; |
| 22 using content::ThemeHelperMac; | 23 using content::ThemeHelperMac; |
| 23 | 24 |
| 24 namespace { | 25 namespace { |
| 25 | 26 |
| 26 blink::WebScrollbarButtonsPlacement GetButtonPlacement() { | 27 blink::WebScrollbarButtonsPlacement GetButtonPlacement() { |
| 27 NSString* scrollbar_variant = [[NSUserDefaults standardUserDefaults] | 28 NSString* scrollbar_variant = [[NSUserDefaults standardUserDefaults] |
| 28 objectForKey:@"AppleScrollBarVariant"]; | 29 objectForKey:@"AppleScrollBarVariant"]; |
| 29 if ([scrollbar_variant isEqualToString:@"Single"]) | 30 if ([scrollbar_variant isEqualToString:@"Single"]) |
| 30 return blink::WebScrollbarButtonsPlacementSingle; | 31 return blink::WebScrollbarButtonsPlacementSingle; |
| 31 else if ([scrollbar_variant isEqualToString:@"DoubleMin"]) | 32 else if ([scrollbar_variant isEqualToString:@"DoubleMin"]) |
| 32 return blink::WebScrollbarButtonsPlacementDoubleStart; | 33 return blink::WebScrollbarButtonsPlacementDoubleStart; |
| 33 else if ([scrollbar_variant isEqualToString:@"DoubleBoth"]) | 34 else if ([scrollbar_variant isEqualToString:@"DoubleBoth"]) |
| 34 return blink::WebScrollbarButtonsPlacementDoubleBoth; | 35 return blink::WebScrollbarButtonsPlacementDoubleBoth; |
| 35 else | 36 else |
| 36 return blink::WebScrollbarButtonsPlacementDoubleEnd; | 37 return blink::WebScrollbarButtonsPlacementDoubleEnd; |
| 37 } | 38 } |
| 38 | 39 |
| 39 void FillScrollbarThemeParams(ViewMsg_UpdateScrollbarTheme_Params* params) { | 40 void FillScrollbarThemeParams( |
| 41 content::mojom::UpdateScrollbarThemeParams* params) { |
| 40 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 42 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 41 | 43 |
| 42 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | 44 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; |
| 43 [defaults synchronize]; | 45 [defaults synchronize]; |
| 44 | 46 |
| 45 params->initial_button_delay = | 47 params->initial_button_delay = |
| 46 [defaults floatForKey:@"NSScrollerButtonDelay"]; | 48 [defaults floatForKey:@"NSScrollerButtonDelay"]; |
| 47 params->autoscroll_button_delay = | 49 params->autoscroll_button_delay = |
| 48 [defaults floatForKey:@"NSScrollerButtonPeriod"]; | 50 [defaults floatForKey:@"NSScrollerButtonPeriod"]; |
| 49 params->jump_on_track_click = | 51 params->jump_on_track_click = |
| 50 [defaults boolForKey:@"AppleScrollerPagingBehavior"]; | 52 [defaults boolForKey:@"AppleScrollerPagingBehavior"]; |
| 51 params->preferred_scroller_style = | 53 params->preferred_scroller_style = |
| 52 ThemeHelperMac::GetPreferredScrollerStyle(); | 54 ThemeHelperMac::GetPreferredScrollerStyle(); |
| 53 params->button_placement = GetButtonPlacement(); | 55 params->button_placement = GetButtonPlacement(); |
| 54 } | 56 } |
| 55 | 57 |
| 56 ViewMsg_SystemColorsChanged* CreateSystemColorsChangedMessage() { | 58 void SendSystemColorsChangedMessage(content::mojom::Renderer* renderer) { |
| 57 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 59 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 58 | 60 |
| 59 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | 61 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; |
| 60 [defaults synchronize]; | 62 [defaults synchronize]; |
| 61 | 63 |
| 62 return new ViewMsg_SystemColorsChanged( | 64 renderer->OnSystemColorsChanged( |
| 63 [[defaults stringForKey:@"AppleAquaColorVariant"] intValue], | 65 [[defaults stringForKey:@"AppleAquaColorVariant"] intValue], |
| 64 base::SysNSStringToUTF8( | 66 base::SysNSStringToUTF8( |
| 65 [defaults stringForKey:@"AppleHighlightedTextColor"]), | 67 [defaults stringForKey:@"AppleHighlightedTextColor"]), |
| 66 base::SysNSStringToUTF8( | 68 base::SysNSStringToUTF8( |
| 67 [defaults stringForKey:@"AppleHighlightColor"])); | 69 [defaults stringForKey:@"AppleHighlightColor"])); |
| 68 } | 70 } |
| 69 | 71 |
| 70 } // namespace | 72 } // namespace |
| 71 | 73 |
| 72 @interface ScrollbarPrefsObserver : NSObject | 74 @interface ScrollbarPrefsObserver : NSObject |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 } | 134 } |
| 133 | 135 |
| 134 + (void)behaviorPrefsChanged:(NSNotification*)notification { | 136 + (void)behaviorPrefsChanged:(NSNotification*)notification { |
| 135 [self notifyPrefsChangedWithRedraw:NO]; | 137 [self notifyPrefsChangedWithRedraw:NO]; |
| 136 } | 138 } |
| 137 | 139 |
| 138 + (void)systemColorsChanged:(NSNotification*)notification { | 140 + (void)systemColorsChanged:(NSNotification*)notification { |
| 139 for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); | 141 for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); |
| 140 !it.IsAtEnd(); | 142 !it.IsAtEnd(); |
| 141 it.Advance()) { | 143 it.Advance()) { |
| 142 it.GetCurrentValue()->Send(CreateSystemColorsChangedMessage()); | 144 SendSystemColorsChangedMessage( |
| 145 it.GetCurrentValue()->GetRendererInterface()); |
| 143 } | 146 } |
| 144 } | 147 } |
| 145 | 148 |
| 146 + (void)notifyPrefsChangedWithRedraw:(BOOL)redraw { | 149 + (void)notifyPrefsChangedWithRedraw:(BOOL)redraw { |
| 147 ViewMsg_UpdateScrollbarTheme_Params params; | |
| 148 FillScrollbarThemeParams(¶ms); | |
| 149 params.redraw = redraw; | |
| 150 | |
| 151 for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); | 150 for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); |
| 152 !it.IsAtEnd(); | 151 !it.IsAtEnd(); |
| 153 it.Advance()) { | 152 it.Advance()) { |
| 153 content::mojom::UpdateScrollbarThemeParamsPtr params = |
| 154 content::mojom::UpdateScrollbarThemeParams::New(); |
| 155 FillScrollbarThemeParams(params.get()); |
| 156 params->redraw = redraw; |
| 154 RenderProcessHostImpl* rphi = | 157 RenderProcessHostImpl* rphi = |
| 155 static_cast<RenderProcessHostImpl*>(it.GetCurrentValue()); | 158 static_cast<RenderProcessHostImpl*>(it.GetCurrentValue()); |
| 156 rphi->RecomputeAndUpdateWebKitPreferences(); | 159 rphi->RecomputeAndUpdateWebKitPreferences(); |
| 157 rphi->Send(new ViewMsg_UpdateScrollbarTheme(params)); | 160 rphi->GetRendererInterface()->UpdateScrollbarTheme(std::move(params)); |
| 158 } | 161 } |
| 159 } | 162 } |
| 160 | 163 |
| 161 @end | 164 @end |
| 162 | 165 |
| 163 namespace content { | 166 namespace content { |
| 164 | 167 |
| 165 // static | 168 // static |
| 166 ThemeHelperMac* ThemeHelperMac::GetInstance() { | 169 ThemeHelperMac* ThemeHelperMac::GetInstance() { |
| 167 return base::Singleton<ThemeHelperMac, | 170 return base::Singleton<ThemeHelperMac, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 183 ThemeHelperMac::~ThemeHelperMac() { | 186 ThemeHelperMac::~ThemeHelperMac() { |
| 184 } | 187 } |
| 185 | 188 |
| 186 void ThemeHelperMac::Observe(int type, | 189 void ThemeHelperMac::Observe(int type, |
| 187 const NotificationSource& source, | 190 const NotificationSource& source, |
| 188 const NotificationDetails& details) { | 191 const NotificationDetails& details) { |
| 189 DCHECK_EQ(NOTIFICATION_RENDERER_PROCESS_CREATED, type); | 192 DCHECK_EQ(NOTIFICATION_RENDERER_PROCESS_CREATED, type); |
| 190 | 193 |
| 191 // When a new RenderProcess is created, send it the initial preference | 194 // When a new RenderProcess is created, send it the initial preference |
| 192 // parameters. | 195 // parameters. |
| 193 ViewMsg_UpdateScrollbarTheme_Params params; | 196 content::mojom::UpdateScrollbarThemeParamsPtr params = |
| 194 FillScrollbarThemeParams(¶ms); | 197 content::mojom::UpdateScrollbarThemeParams::New(); |
| 195 params.redraw = false; | 198 FillScrollbarThemeParams(params.get()); |
| 199 params->redraw = false; |
| 196 | 200 |
| 197 RenderProcessHostImpl* rphi = | 201 RenderProcessHostImpl* rphi = |
| 198 Source<content::RenderProcessHostImpl>(source).ptr(); | 202 Source<content::RenderProcessHostImpl>(source).ptr(); |
| 199 rphi->RecomputeAndUpdateWebKitPreferences(); | 203 rphi->RecomputeAndUpdateWebKitPreferences(); |
| 200 rphi->Send(new ViewMsg_UpdateScrollbarTheme(params)); | 204 |
| 201 rphi->Send(CreateSystemColorsChangedMessage()); | 205 content::mojom::Renderer* renderer = rphi->GetRendererInterface(); |
| 206 renderer->UpdateScrollbarTheme(std::move(params)); |
| 207 SendSystemColorsChangedMessage(renderer); |
| 202 } | 208 } |
| 203 | 209 |
| 204 } // namespace content | 210 } // namespace content |
| OLD | NEW |