| // Copyright 2018 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/child/child_process_sandbox_support_impl_mac.h" |
| |
| #include <string> |
| #include <utility> |
| |
| #include "base/functional/bind.h" |
| #include "base/memory/read_only_shared_memory_region.h" |
| #include "content/public/child/child_thread.h" |
| |
| namespace content { |
| |
| WebSandboxSupportMac::WebSandboxSupportMac() { |
| if (auto* thread = ChildThread::Get()) { |
| thread->BindHostReceiver(sandbox_support_.BindNewPipeAndPassReceiver()); |
| sandbox_support_->GetSystemColors(base::BindOnce( |
| &WebSandboxSupportMac::OnGotSystemColors, base::Unretained(this))); |
| } |
| } |
| |
| WebSandboxSupportMac::~WebSandboxSupportMac() = default; |
| |
| SkColor WebSandboxSupportMac::GetSystemColor( |
| blink::MacSystemColorID color_id, |
| blink::mojom::ColorScheme color_scheme) { |
| if (!color_map_.IsValid()) { |
| DLOG(ERROR) << "GetSystemColor does not have a valid color_map_"; |
| return SK_ColorMAGENTA; |
| } |
| static_assert(blink::kMacSystemColorSchemeCount == 2, |
| "Light and dark color scheme system colors loaded."); |
| base::span<const SkColor> color_map = color_map_.GetMemoryAsSpan<SkColor>( |
| blink::kMacSystemColorIDCount * blink::kMacSystemColorSchemeCount); |
| base::span<const SkColor> color_map_for_scheme = |
| color_map.subspan(color_scheme == blink::mojom::ColorScheme::kDark |
| ? blink::kMacSystemColorIDCount |
| : 0, |
| blink::kMacSystemColorIDCount); |
| return color_map_for_scheme[static_cast<size_t>(color_id)]; |
| } |
| |
| void WebSandboxSupportMac::OnGotSystemColors( |
| base::ReadOnlySharedMemoryRegion region) { |
| color_map_ = region.Map(); |
| } |
| |
| } // namespace content |