|  | // Copyright 2019 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "content/browser/theme_helper.h" | 
|  |  | 
|  | #include "content/browser/renderer_host/render_process_host_impl.h" | 
|  | #include "content/common/renderer.mojom.h" | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | // static | 
|  | ThemeHelper* ThemeHelper::GetInstance() { | 
|  | static base::NoDestructor<ThemeHelper> s_theme_helper; | 
|  | return s_theme_helper.get(); | 
|  | } | 
|  |  | 
|  | ThemeHelper::ThemeHelper() : theme_observer_(this) { | 
|  | theme_observer_.Add(ui::NativeTheme::GetInstanceForWeb()); | 
|  | } | 
|  |  | 
|  | ThemeHelper::~ThemeHelper() {} | 
|  |  | 
|  | mojom::UpdateSystemColorInfoParamsPtr MakeUpdateSystemColorInfoParams( | 
|  | ui::NativeTheme* native_theme) { | 
|  | mojom::UpdateSystemColorInfoParamsPtr params = | 
|  | mojom::UpdateSystemColorInfoParams::New(); | 
|  | params->is_dark_mode = native_theme->ShouldUseDarkColors(); | 
|  | params->is_high_contrast = native_theme->UsesHighContrastColors(); | 
|  | const auto& colors = native_theme->GetSystemColors(); | 
|  | params->colors.insert(colors.begin(), colors.end()); | 
|  |  | 
|  | return params; | 
|  | } | 
|  |  | 
|  | void ThemeHelper::OnNativeThemeUpdated(ui::NativeTheme* observed_theme) { | 
|  | DCHECK(theme_observer_.IsObserving(observed_theme)); | 
|  |  | 
|  | mojom::UpdateSystemColorInfoParamsPtr params = | 
|  | MakeUpdateSystemColorInfoParams(observed_theme); | 
|  | for (auto iter = RenderProcessHost::AllHostsIterator(); !iter.IsAtEnd(); | 
|  | iter.Advance()) { | 
|  | if (iter.GetCurrentValue()->IsInitializedAndNotDead()) { | 
|  | iter.GetCurrentValue()->GetRendererInterface()->UpdateSystemColorInfo( | 
|  | params->Clone()); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | void ThemeHelper::SendSystemColorInfo(mojom::Renderer* renderer) const { | 
|  | mojom::UpdateSystemColorInfoParamsPtr params = | 
|  | MakeUpdateSystemColorInfoParams(ui::NativeTheme::GetInstanceForWeb()); | 
|  | renderer->UpdateSystemColorInfo(std::move(params)); | 
|  | } | 
|  |  | 
|  | }  // namespace content |