blob: a1f7aa21b4f9f0640146cf02dbb340fb40f90a7f [file] [log] [blame]
// Copyright 2021 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 "content/browser/preloading/prerender/prerender_handle_impl.h"
#include "content/public/browser/prerender_trigger_type.h"
namespace content {
PrerenderHandleImpl::PrerenderHandleImpl(
base::WeakPtr<PrerenderHostRegistry> prerender_host_registry,
int frame_tree_node_id,
const GURL& prerendering_url)
: prerender_host_registry_(std::move(prerender_host_registry)),
frame_tree_node_id_(frame_tree_node_id),
prerendering_url_(prerendering_url) {
DCHECK(!prerendering_url_.is_empty());
// PrerenderHandleImpl is now designed only for embedder triggers (e.g.,
// recording kEmbedderTriggeredAndDestroyed on the destructor). If you use
// this handle for other triggers, please make sure to update the logging etc.
auto* prerender_host =
prerender_host_registry_->FindNonReservedHostById(frame_tree_node_id);
DCHECK(prerender_host);
DCHECK_EQ(prerender_host->trigger_type(), PrerenderTriggerType::kEmbedder);
}
PrerenderHandleImpl::~PrerenderHandleImpl() {
if (prerender_host_registry_) {
prerender_host_registry_->CancelHost(
frame_tree_node_id_,
PrerenderHost::FinalStatus::kEmbedderTriggeredAndDestroyed);
}
}
GURL PrerenderHandleImpl::GetInitialPrerenderingUrl() {
return prerendering_url_;
}
base::WeakPtr<PrerenderHandle> PrerenderHandleImpl::GetWeakPtr() {
return weak_factory_.GetWeakPtr();
}
} // namespace content