blob: 17a48a86838a205c8c538bc8e328e4dad684ab0a [file] [log] [blame]
// Copyright 2020 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 "components/no_state_prefetch/renderer/prerender_render_frame_observer.h"
#include "components/no_state_prefetch/renderer/no_state_prefetch_helper.h"
#include "components/no_state_prefetch/renderer/prerender_observer_list.h"
#include "content/public/renderer/render_frame.h"
#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
namespace prerender {
PrerenderRenderFrameObserver::PrerenderRenderFrameObserver(
content::RenderFrame* render_frame)
: content::RenderFrameObserver(render_frame) {
render_frame->GetAssociatedInterfaceRegistry()->AddInterface(
base::BindRepeating(
&PrerenderRenderFrameObserver::OnRenderFrameObserverRequest,
base::Unretained(this)));
}
PrerenderRenderFrameObserver::~PrerenderRenderFrameObserver() = default;
void PrerenderRenderFrameObserver::OnRenderFrameObserverRequest(
mojo::PendingAssociatedReceiver<prerender::mojom::PrerenderMessages>
receiver) {
receivers_.Add(this, std::move(receiver));
}
void PrerenderRenderFrameObserver::OnDestruct() {
delete this;
}
void PrerenderRenderFrameObserver::SetIsPrerendering(
const std::string& histogram_prefix) {
// If the NoStatePrefetchHelper for this frame already exists, don't create
// it. It can already be created for subframes during handling of
// RenderFrameCreated, if the parent frame was prerendering at time of
// subframe creation.
if (!prerender::NoStatePrefetchHelper::Get(render_frame())) {
// The NoStatePrefetchHelper will destroy itself either after recording
// histograms or on destruction of the RenderView.
new prerender::NoStatePrefetchHelper(render_frame(), histogram_prefix);
}
prerender::PrerenderObserverList::SetIsPrerenderingForFrame(
render_frame(), /*is_prerendering=*/true);
}
} // namespace prerender