// Copyright 2017 the Chromium Embedded Framework Authors. Portions copyright
// 2013 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 CEF_LIBCEF_BROWSER_EXTENSIONS_EXTENSION_BACKGROUND_HOST_H_
#define CEF_LIBCEF_BROWSER_EXTENSIONS_EXTENSION_BACKGROUND_HOST_H_

#include <memory>

#include "base/callback_forward.h"
#include "base/macros.h"
#include "extensions/browser/extension_host.h"

class CefBrowserHostImpl;

namespace content {
class WebContents;
}  // namespace content

namespace extensions {

// The ExtensionHost for a background page. This is a thin wrapper around the
// ExtensionHost base class to support CEF-specific constructor. Object lifespan
// is managed by ProcessManager.
class CefExtensionBackgroundHost : public ExtensionHost {
 public:
  CefExtensionBackgroundHost(CefBrowserHostImpl* browser,
                             base::OnceClosure deleted_callback,
                             const Extension* extension,
                             content::BrowserContext* browser_context,
                             content::WebContents* host_contents,
                             const GURL& url,
                             ViewType host_type);
  ~CefExtensionBackgroundHost() override;

  // content::WebContentsDelegate methods:
  bool ShouldTransferNavigation(bool is_main_frame_navigation) override;

 private:
  // Callback that will be executed on host deletion.
  base::OnceClosure deleted_callback_;

  DISALLOW_COPY_AND_ASSIGN(CefExtensionBackgroundHost);
};

}  // namespace extensions

#endif  // CEF_LIBCEF_BROWSER_EXTENSIONS_EXTENSION_BACKGROUND_HOST_H_
