// 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.

#include "libcef/browser/extensions/extension_background_host.h"

#include "libcef/browser/alloy/alloy_browser_host_impl.h"
#include "libcef/browser/extensions/extension_host_delegate.h"

#include "base/callback.h"

namespace extensions {

CefExtensionBackgroundHost::CefExtensionBackgroundHost(
    AlloyBrowserHostImpl* browser,
    base::OnceClosure deleted_callback,
    const Extension* extension,
    content::WebContents* host_contents,
    const GURL& url,
    mojom::ViewType host_type)
    : ExtensionHost(new CefExtensionHostDelegate(browser),
                    extension,
                    host_contents->GetBrowserContext(),
                    host_contents,
                    url,
                    host_type),
      deleted_callback_(std::move(deleted_callback)) {
  DCHECK(!deleted_callback_.is_null());

  // Only used for background pages.
  DCHECK(host_type == mojom::ViewType::kExtensionBackgroundPage);
}

CefExtensionBackgroundHost::~CefExtensionBackgroundHost() {
  std::move(deleted_callback_).Run();
}

bool CefExtensionBackgroundHost::
    ShouldAllowRendererInitiatedCrossProcessNavigation(
        bool is_main_frame_navigation) {
  // Block navigations that cause the main frame to navigate to non-extension
  // content (i.e. to web content).
  return !is_main_frame_navigation;
}

}  // namespace extensions