// 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/browser_host_impl.h"
#include "libcef/browser/extensions/extension_host_delegate.h"

#include "base/callback.h"

namespace extensions {

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

  // Only used for background pages.
  DCHECK(host_type == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE);
}

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

bool CefExtensionBackgroundHost::ShouldTransferNavigation(
    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
