blob: 57559c21296eeb38b28da8519beeb149c1474510 [file] [log] [blame]
// Copyright 2017 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.
#import "ios/chrome/browser/prerender/prerender_service.h"
#import "ios/chrome/browser/prerender/preload_controller.h"
#import "ios/chrome/browser/tabs/legacy_tab_helper.h"
#import "ios/chrome/browser/tabs/tab.h"
#include "ios/web/public/web_state/web_state.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
PrerenderService::PrerenderService(ios::ChromeBrowserState* browser_state)
: controller_(
[[PreloadController alloc] initWithBrowserState:browser_state]) {}
PrerenderService::~PrerenderService() {}
void PrerenderService::Shutdown() {
[controller_ browserStateDestroyed];
controller_ = nil;
}
void PrerenderService::SetDelegate(id<PreloadControllerDelegate> delegate) {
controller_.delegate = delegate;
}
id<PreloadProvider> PrerenderService::GetPreloadProvider() const {
return controller_;
}
void PrerenderService::StartPrerender(const GURL& url,
const web::Referrer& referrer,
ui::PageTransition transition,
bool immediately) {
[controller_ prerenderURL:url
referrer:referrer
transition:transition
immediately:immediately];
}
void PrerenderService::CancelPrerender() {
[controller_ cancelPrerender];
}
bool PrerenderService::HasPrerenderForUrl(const GURL& url) {
return url == controller_.prerenderedURL;
}
bool PrerenderService::IsWebStatePrerendered(web::WebState* web_state) {
Tab* tab = LegacyTabHelper::GetTabForWebState(web_state);
return tab.isPrerenderTab;
}
std::unique_ptr<web::WebState> PrerenderService::ReleasePrerenderContents() {
return [controller_ releasePrerenderContents];
}