| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ash/crosapi/native_theme_service_ash.h" |
| |
| #include "ui/native_theme/native_theme.h" |
| |
| namespace crosapi { |
| |
| /******** NativeThemeServiceAsh::Dispatcher ********/ |
| |
| NativeThemeServiceAsh::Dispatcher::Dispatcher() { |
| ui::NativeTheme::GetInstanceForNativeUi()->AddObserver(this); |
| } |
| |
| NativeThemeServiceAsh::Dispatcher::~Dispatcher() { |
| ui::NativeTheme::GetInstanceForNativeUi()->RemoveObserver(this); |
| } |
| |
| void NativeThemeServiceAsh::Dispatcher::OnNativeThemeUpdated( |
| ui::NativeTheme* observed_theme) { |
| DCHECK_EQ(ui::NativeTheme::GetInstanceForNativeUi(), observed_theme); |
| |
| mojom::NativeThemeInfoPtr info = NativeThemeServiceAsh::GetNativeThemeInfo(); |
| for (auto& observer : observers_) { |
| mojom::NativeThemeInfoPtr info_copy = info->Clone(); |
| observer->OnNativeThemeInfoChanged(std::move(info_copy)); |
| } |
| } |
| |
| /******** NativeThemeServiceAsh ********/ |
| |
| // static |
| mojom::NativeThemeInfoPtr NativeThemeServiceAsh::GetNativeThemeInfo() { |
| auto info = mojom::NativeThemeInfo::New(); |
| info->dark_mode = |
| ui::NativeTheme::GetInstanceForNativeUi()->ShouldUseDarkColors(); |
| return info; |
| } |
| |
| NativeThemeServiceAsh::NativeThemeServiceAsh() = default; |
| |
| NativeThemeServiceAsh::~NativeThemeServiceAsh() = default; |
| |
| void NativeThemeServiceAsh::BindReceiver( |
| mojo::PendingReceiver<mojom::NativeThemeService> receiver) { |
| receivers_.Add(this, std::move(receiver)); |
| } |
| |
| void NativeThemeServiceAsh::AddNativeThemeInfoObserver( |
| mojo::PendingRemote<mojom::NativeThemeInfoObserver> observer) { |
| // Fire the observer with the initial value. |
| mojo::Remote<mojom::NativeThemeInfoObserver> remote(std::move(observer)); |
| remote->OnNativeThemeInfoChanged(GetNativeThemeInfo()); |
| |
| dispatcher_.observers_.Add(std::move(remote)); |
| } |
| |
| } // namespace crosapi |