// Copyright (c) 2016 GitHub, Inc. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. #include "shell/browser/api/electron_api_system_preferences.h" #include "shell/common/gin_converters/callback_converter.h" #include "shell/common/gin_converters/value_converter.h" #include "shell/common/gin_helper/dictionary.h" #include "shell/common/gin_helper/function_template_extensions.h" #include "shell/common/node_includes.h" #include "ui/gfx/animation/animation.h" #include "ui/gfx/color_utils.h" #include "ui/native_theme/native_theme.h" namespace electron::api { gin::WrapperInfo SystemPreferences::kWrapperInfo = {gin::kEmbedderNativeGin}; #if BUILDFLAG(IS_WIN) SystemPreferences::SystemPreferences() { InitializeWindow(); } #else SystemPreferences::SystemPreferences() = default; #endif #if BUILDFLAG(IS_WIN) SystemPreferences::~SystemPreferences() { Browser::Get()->RemoveObserver(this); } #else SystemPreferences::~SystemPreferences() = default; #endif v8::Local SystemPreferences::GetAnimationSettings( v8::Isolate* isolate) { auto dict = gin_helper::Dictionary::CreateEmpty(isolate); dict.Set("shouldRenderRichAnimation", gfx::Animation::ShouldRenderRichAnimation()); dict.Set("scrollAnimationsEnabledBySystem", gfx::Animation::ScrollAnimationsEnabledBySystem()); dict.Set("prefersReducedMotion", gfx::Animation::PrefersReducedMotion()); return dict.GetHandle(); } // static gin::Handle SystemPreferences::Create(v8::Isolate* isolate) { return gin::CreateHandle(isolate, new SystemPreferences()); } gin::ObjectTemplateBuilder SystemPreferences::GetObjectTemplateBuilder( v8::Isolate* isolate) { return gin_helper::EventEmitterMixin< SystemPreferences>::GetObjectTemplateBuilder(isolate) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) .SetMethod("getColor", &SystemPreferences::GetColor) .SetMethod("getAccentColor", &SystemPreferences::GetAccentColor) .SetMethod("getMediaAccessStatus", &SystemPreferences::GetMediaAccessStatus) #endif #if BUILDFLAG(IS_WIN) .SetMethod("isAeroGlassEnabled", &SystemPreferences::IsAeroGlassEnabled) #elif BUILDFLAG(IS_MAC) .SetMethod("postNotification", &SystemPreferences::PostNotification) .SetMethod("subscribeNotification", &SystemPreferences::SubscribeNotification) .SetMethod("unsubscribeNotification", &SystemPreferences::UnsubscribeNotification) .SetMethod("postLocalNotification", &SystemPreferences::PostLocalNotification) .SetMethod("subscribeLocalNotification", &SystemPreferences::SubscribeLocalNotification) .SetMethod("unsubscribeLocalNotification", &SystemPreferences::UnsubscribeLocalNotification) .SetMethod("postWorkspaceNotification", &SystemPreferences::PostWorkspaceNotification) .SetMethod("subscribeWorkspaceNotification", &SystemPreferences::SubscribeWorkspaceNotification) .SetMethod("unsubscribeWorkspaceNotification", &SystemPreferences::UnsubscribeWorkspaceNotification) .SetMethod("registerDefaults", &SystemPreferences::RegisterDefaults) .SetMethod("getUserDefault", &SystemPreferences::GetUserDefault) .SetMethod("setUserDefault", &SystemPreferences::SetUserDefault) .SetMethod("removeUserDefault", &SystemPreferences::RemoveUserDefault) .SetMethod("isSwipeTrackingFromScrollEventsEnabled", &SystemPreferences::IsSwipeTrackingFromScrollEventsEnabled) .SetMethod("getEffectiveAppearance", &SystemPreferences::GetEffectiveAppearance) .SetMethod("getSystemColor", &SystemPreferences::GetSystemColor) .SetMethod("canPromptTouchID", &SystemPreferences::CanPromptTouchID) .SetMethod("promptTouchID", &SystemPreferences::PromptTouchID) .SetMethod("isTrustedAccessibilityClient", &SystemPreferences::IsTrustedAccessibilityClient) .SetMethod("askForMediaAccess", &SystemPreferences::AskForMediaAccess) .SetProperty( "accessibilityDisplayShouldReduceTransparency", &SystemPreferences::AccessibilityDisplayShouldReduceTransparency) #endif .SetMethod("getAnimationSettings", &SystemPreferences::GetAnimationSettings); } const char* SystemPreferences::GetTypeName() { return "SystemPreferences"; } } // namespace electron::api namespace { using electron::api::SystemPreferences; void Initialize(v8::Local exports, v8::Local unused, v8::Local context, void* priv) { v8::Isolate* isolate = context->GetIsolate(); gin_helper::Dictionary dict(isolate, exports); dict.Set("systemPreferences", SystemPreferences::Create(isolate)); } } // namespace NODE_LINKED_BINDING_CONTEXT_AWARE(electron_browser_system_preferences, Initialize)