// Copyright 2020 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 COMPONENTS_EXO_EXTENDED_DRAG_OFFER_H_
#define COMPONENTS_EXO_EXTENDED_DRAG_OFFER_H_

#include <cstdint>
#include <string>

#include "components/exo/data_offer_observer.h"

namespace gfx {
class Vector2d;
}

namespace exo {

class DataOffer;

class ExtendedDragOffer : public DataOfferObserver {
 public:
  class Delegate {
   public:
    virtual void OnDataOfferDestroying() = 0;

   protected:
    virtual ~Delegate() = default;
  };

  ExtendedDragOffer(DataOffer* offer, Delegate* delegate);
  ExtendedDragOffer(const ExtendedDragOffer&) = delete;
  ExtendedDragOffer& operator=(const ExtendedDragOffer&) = delete;
  ~ExtendedDragOffer() override;

  void Swallow(uint32_t serial, const std::string& mime_type);
  void Unswallow(uint32_t serial,
                 const std::string& mime_type,
                 const gfx::Vector2d& offset);

 private:
  // DataOfferObserver:
  void OnDataOfferDestroying(DataOffer* offer) override;

  DataOffer* offer_ = nullptr;

  // Created and destroyed at wayland/zcr_extended_drag.cc and its lifetime is
  // tied to the zcr_extended_drag_source_v1 object it's attached to.
  Delegate* const delegate_;
};

}  // namespace exo

#endif  // COMPONENTS_EXO_EXTENDED_DRAG_OFFER_H_
