blob: e77ec30b0a7b0ffbfb1bb5d6a31e0942ea3cb42a [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/public/browser/prerender_web_contents_delegate.h"
#include "content/browser/preloading/prerender/prerender_final_status.h"
#include "content/browser/preloading/prerender/prerender_host_registry.h"
#include "content/browser/web_contents/web_contents_impl.h"
namespace content {
WebContents* PrerenderWebContentsDelegate::OpenURLFromTab(
WebContents* source,
const OpenURLParams& params,
base::OnceCallback<void(NavigationHandle&)> navigation_handle_callback) {
NOTREACHED();
}
WebContents* PrerenderWebContentsDelegate::AddNewContents(
WebContents* source,
std::unique_ptr<WebContents> new_contents,
const GURL& target_url,
WindowOpenDisposition disposition,
const blink::mojom::WindowFeatures& window_features,
bool user_gesture,
bool* was_blocked) {
// A prerendered page cannot open a new window.
NOTREACHED();
}
void PrerenderWebContentsDelegate::ActivateContents(WebContents* contents) {
// WebContents should not be activated with this delegate.
NOTREACHED();
}
void PrerenderWebContentsDelegate::LoadingStateChanged(
WebContents* source,
bool should_show_loading_ui) {
// Loading events should be deferred until prerender activation.
NOTREACHED();
}
void PrerenderWebContentsDelegate::CloseContents(WebContents* source) {
// Cancelling prerendering will eventually destroy `this` and `source`.
static_cast<WebContentsImpl*>(source)
->GetPrerenderHostRegistry()
->CancelAllHosts(PrerenderFinalStatus::kTabClosedWithoutUserGesture);
}
bool PrerenderWebContentsDelegate::ShouldSuppressDialogs(WebContents* source) {
// Dialogs (JS dialogs and BeforeUnload confirm) should not be shown on a
// prerendered page.
NOTREACHED();
}
bool PrerenderWebContentsDelegate::ShouldFocusPageAfterCrash(
WebContents* source) {
// A prerendered page cannot be focused.
return false;
}
bool PrerenderWebContentsDelegate::TakeFocus(WebContents* source,
bool reverse) {
// A prerendered page cannot be focused.
return false;
}
void PrerenderWebContentsDelegate::WebContentsCreated(
WebContents* source_contents,
int opener_render_process_id,
int opener_render_frame_id,
const std::string& frame_name,
const GURL& target_url,
WebContents* new_contents) {
// A prerendered page should not create a new WebContents.
NOTREACHED();
}
bool PrerenderWebContentsDelegate::CanEnterFullscreenModeForTab(
RenderFrameHost* requesting_frame) {
// This should not be called for a prerendered page.
NOTREACHED();
}
void PrerenderWebContentsDelegate::EnterFullscreenModeForTab(
RenderFrameHost* requesting_frame,
const blink::mojom::FullscreenOptions& options) {
// This should not be called for a prerendered page.
NOTREACHED();
}
void PrerenderWebContentsDelegate::FullscreenStateChangedForTab(
RenderFrameHost* requesting_frame,
const blink::mojom::FullscreenOptions& options) {
// This should not be called for a prerendered page.
NOTREACHED();
}
void PrerenderWebContentsDelegate::ExitFullscreenModeForTab(WebContents*) {
// This should not be called for a prerendered page.
NOTREACHED();
}
bool PrerenderWebContentsDelegate::IsFullscreenForTabOrPending(
const WebContents* web_contents) {
return false;
}
void PrerenderWebContentsDelegate::OnDidBlockNavigation(
WebContents* web_contents,
const GURL& blocked_url,
blink::mojom::NavigationBlockedReason reason) {
// DCHECK against LifecycleState in RenderFrameHostImpl::DidBlockNavigation()
// ensures this is never called during prerendering.
NOTREACHED();
}
bool PrerenderWebContentsDelegate::ShouldAllowRunningInsecureContent(
WebContents* web_contents,
bool allowed_per_prefs,
const url::Origin& origin,
const GURL& resource_url) {
// MixedContentChecker::ShouldBlockNavigation() should cancel prerendering
// for mixed contents before this is called.
NOTREACHED();
}
PreloadingEligibility PrerenderWebContentsDelegate::IsPrerender2Supported(
WebContents& web_contents,
PreloadingTriggerType trigger_type) {
// This should be checked in the initiator's WebContents.
NOTREACHED();
}
} // namespace content