// 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 UI_WEBUI_MOJO_BUBBLE_WEB_UI_CONTROLLER_H_
#define UI_WEBUI_MOJO_BUBBLE_WEB_UI_CONTROLLER_H_

#include "base/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "ui/webui/mojo_web_ui_controller.h"

namespace content {
class WebUI;
}  // namespace content

namespace ui {

class MojoBubbleWebUIController : public MojoWebUIController {
 public:
  class Embedder {
   public:
    virtual void ShowUI() = 0;
    virtual void CloseUI() = 0;
  };

  // By default MojoBubbleWebUIController do not have normal WebUI bindings.
  // Pass |enable_chrome_send| as true if these are needed.
  explicit MojoBubbleWebUIController(content::WebUI* contents,
                                     bool enable_chrome_send = false);
  MojoBubbleWebUIController(const MojoBubbleWebUIController&) = delete;
  MojoBubbleWebUIController& operator=(const MojoBubbleWebUIController&) =
      delete;
  ~MojoBubbleWebUIController() override;

  void set_embedder(base::WeakPtr<Embedder> embedder) { embedder_ = embedder; }
  base::WeakPtr<Embedder> embedder() { return embedder_; }

 private:
  base::WeakPtr<Embedder> embedder_;
};

}  // namespace ui

#endif  // UI_WEBUI_MOJO_BUBBLE_WEB_UI_CONTROLLER_H_
