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