// 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. #ifndef ASH_DRAG_DROP_SCOPED_DRAG_DROP_OBSERVER_H_ #define ASH_DRAG_DROP_SCOPED_DRAG_DROP_OBSERVER_H_ #include "ash/shell.h" #include "ash/shell_observer.h" #include "base/scoped_observation.h" #include "ui/aura/client/drag_drop_client.h" #include "ui/aura/client/drag_drop_client_observer.h" namespace ui { class DropTargetEvent; } // namespace ui namespace ash { // A class which observes an `aura::client::DragDropClient` for the scope of its // existence. Drag events are passed to a callback supplied in the constructor. class ASH_EXPORT ScopedDragDropObserver : public aura::client::DragDropClientObserver, public ShellObserver { public: ScopedDragDropObserver( aura::client::DragDropClient* client, base::RepeatingCallback event_callback); ScopedDragDropObserver(const ScopedDragDropObserver&) = delete; ScopedDragDropObserver& operator=(const ScopedDragDropObserver&) = delete; ~ScopedDragDropObserver() override; private: // aura::client::DragDropClientObserver: void OnDragUpdated(const ui::DropTargetEvent& event) override; void OnDragCompleted(const ui::DropTargetEvent& event) override; void OnDragCancelled() override; // ShellObserver: void OnShellDestroying() override; base::RepeatingCallback event_callback_; base::ScopedObservation drag_drop_client_observer_{this}; base::ScopedObservation shell_observer_{this}; }; } // namespace ash #endif // ASH_DRAG_DROP_SCOPED_DRAG_DROP_OBSERVER_H_