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 |