1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // Copyright 2021 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 "components/remote_cocoa/browser/scoped_cg_window_id.h"
- #include <map>
- #include "base/no_destructor.h"
- namespace remote_cocoa {
- namespace {
- using ScoperMap = std::map<uint32_t, ScopedCGWindowID*>;
- ScoperMap& GetMap() {
- static base::NoDestructor<ScoperMap> map;
- return *map.get();
- }
- } // namespace
- ScopedCGWindowID::ScopedCGWindowID(uint32_t cg_window_id,
- const viz::FrameSinkId& frame_sink_id)
- : cg_window_id_(cg_window_id),
- frame_sink_id_(frame_sink_id),
- weak_factory_(this) {
- DCHECK_EQ(GetMap().count(cg_window_id), 0u);
- GetMap()[cg_window_id] = this;
- }
- ScopedCGWindowID::~ScopedCGWindowID() {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- weak_factory_.InvalidateWeakPtrs();
- auto found = GetMap().find(cg_window_id_);
- DCHECK_EQ(found->second, this);
- GetMap().erase(found);
- for (auto& observer : observer_list_)
- observer.OnScopedCGWindowIDDestroyed(cg_window_id_);
- observer_list_.Clear();
- }
- void ScopedCGWindowID::AddObserver(Observer* observer) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- observer_list_.AddObserver(observer);
- }
- void ScopedCGWindowID::RemoveObserver(Observer* observer) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- observer_list_.RemoveObserver(observer);
- }
- void ScopedCGWindowID::OnMouseMoved(const gfx::PointF& location_in_window,
- const gfx::Size& window_size) {
- for (auto& observer : observer_list_) {
- observer.OnScopedCGWindowIDMouseMoved(cg_window_id_, location_in_window,
- window_size);
- }
- }
- // static
- base::WeakPtr<ScopedCGWindowID> ScopedCGWindowID::Get(uint32_t cg_window_id) {
- auto found = GetMap().find(cg_window_id);
- if (found == GetMap().end())
- return nullptr;
- DCHECK_CALLED_ON_VALID_THREAD(found->second->thread_checker_);
- return found->second->weak_factory_.GetWeakPtr();
- }
- } // namespace remote_cocoa
|