blob: fe2a4e03cba3d3a64c37ca1ea5f72f6f152fbfe0 [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 "chrome/browser/prerender/chrome_prerender_contents_delegate.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/task_manager/web_contents_tags.h"
#include "chrome/browser/ui/tab_helpers.h"
#include "chrome/common/chrome_render_frame.mojom.h"
#include "components/prerender/browser/prerender_contents.h"
#include "components/prerender/browser/prerender_histograms.h"
#include "components/prerender/browser/prerender_manager.h"
#include "content/public/browser/web_contents.h"
namespace prerender {
// static
PrerenderContents* ChromePrerenderContentsDelegate::FromWebContents(
content::WebContents* web_contents) {
if (!web_contents)
return nullptr;
PrerenderManager* prerender_manager =
PrerenderManagerFactory::GetForBrowserContext(
web_contents->GetBrowserContext());
if (!prerender_manager)
return nullptr;
return prerender_manager->GetPrerenderContents(web_contents);
}
void ChromePrerenderContentsDelegate::OnPrerenderContentsCreated(
content::WebContents* web_contents) {
DCHECK(web_contents);
TabHelpers::AttachTabHelpers(web_contents);
// Tag the prerender contents with the task manager specific prerender tag, so
// that it shows up in the task manager.
task_manager::WebContentsTags::CreateForPrerenderContents(web_contents);
}
void ChromePrerenderContentsDelegate::ReleasePrerenderContents(
content::WebContents* web_contents) {
DCHECK(web_contents);
// Clear the task manager tag we added earlier to our
// WebContents since it's no longer a prerender contents.
task_manager::WebContentsTags::ClearTag(web_contents);
}
} // namespace prerender