Skip to content

Commit

Permalink
[Prerender] Move IsPrerenderSupported check to CreateAndStartHost
Browse files Browse the repository at this point in the history
With support for prerender on different predictors, we want to move
the common logic to check if prerender is supported or not to
PrerenderHostRegistry::CreateAndStartHost to clean up the code.

In order for tests to support Prerender2, we introduce
ScopedPrerenderWebContentsDelegate class which sets IsPrerender2Supported to true.

BUG=1292422

Change-Id: I518b41b2b42d481f94c71fe493fa8bbbeb599d6f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3724048
Reviewed-by: Mikel Astiz <mastiz@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Reviewed-by: Simon Pelchat <spelchat@chromium.org>
Reviewed-by: Sandro Maggi <sandromaggi@google.com>
Reviewed-by: Francois Pierre Doray <fdoray@chromium.org>
Reviewed-by: Takashi Toyoshima <toyoshim@chromium.org>
Reviewed-by: Sophie Chang <sophiechang@chromium.org>
Commit-Queue: Sreeja Kamishetty <sreejakshetty@chromium.org>
Reviewed-by: Balazs Engedy <engedy@chromium.org>
Reviewed-by: Hiroki Nakagawa <nhiroki@chromium.org>
Reviewed-by: Glen Robertson <glenrob@chromium.org>
Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1021356}
  • Loading branch information
sreejakshetty authored and Chromium LUCI CQ committed Jul 6, 2022
1 parent c409249 commit c94a0d2
Show file tree
Hide file tree
Showing 22 changed files with 123 additions and 23 deletions.
4 changes: 4 additions & 0 deletions chrome/browser/history/history_tab_helper_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "content/public/browser/web_contents.h"
#include "content/public/test/mock_navigation_handle.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/web_contents_tester.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
Expand Down Expand Up @@ -429,6 +430,9 @@ INSTANTIATE_TEST_SUITE_P(All,
MPArchType::kPrerender));

TEST_P(HistoryTabHelperMPArchTest, DoNotAffectToLimitTitleUpdates) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());

web_contents_tester()->NavigateAndCommit(page_url_);

content::NavigationEntry* entry =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include "content/public/browser/web_contents.h"
#include "content/public/test/mock_navigation_handle.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/web_contents_tester.h"
#include "media/base/media_switches.h"
#include "services/metrics/public/cpp/ukm_builders.h"
Expand Down Expand Up @@ -1383,6 +1384,9 @@ class MediaEngagementContentsObserverPrerenderTest

TEST_F(MediaEngagementContentsObserverPrerenderTest,
EnsureDoNotCleanupAfterNavigation_AudioContextInPrerendering) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());

GURL url = GURL("https://example.com");
content::NavigationSimulator::NavigateAndCommitFromBrowser(web_contents(),
url);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "components/page_load_metrics/browser/page_load_tracker.h"
#include "components/translate/core/browser/mock_translate_metrics_logger.h"
#include "components/translate/core/browser/translate_metrics_logger.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/web_contents_tester.h"
#include "testing/gmock/include/gmock/gmock.h"

Expand Down Expand Up @@ -264,6 +265,9 @@ TEST_F(TranslatePageLoadMetricsObserverTest, RepeatedAppEntersBackground) {
}

TEST_F(TranslatePageLoadMetricsObserverTest, PrerenderAndActivation) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());

PrepareMock(2);

EXPECT_CALL(*mock_translate_metrics_loggers()[0], OnPageLoadStart(true))
Expand Down
11 changes: 0 additions & 11 deletions chrome/browser/predictors/autocomplete_action_predictor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -194,17 +194,6 @@ void AutocompleteActionPredictor::StartPrerendering(
const gfx::Size& size) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (prerender_utils::IsDirectUrlInputPrerenderEnabled()) {
// Check whether preloading is enabled. If users disable this
// setting, it means users do not want to preload pages.
// TODO(https://crbug.com/1292422): Move this check into
// content::PrerenderHostRegistry::CreateAndStartHost().
content::WebContentsDelegate* web_contents_delegate =
web_contents.GetDelegate();
if (!web_contents_delegate ||
!web_contents_delegate->IsPrerender2Supported(web_contents)) {
return;
}

PrerenderManager::CreateForWebContents(&web_contents);
auto* prerender_manager = PrerenderManager::FromWebContents(&web_contents);
direct_url_input_prerender_handle_ =
Expand Down
6 changes: 6 additions & 0 deletions chrome/browser/prerender/prerender_manager_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ class PrerenderManagerTest : public ChromeRenderViewHostTestHarness {
prerender_manager_ = PrerenderManager::FromWebContents(web_contents());
ASSERT_TRUE(prerender_manager_);
prerender_manager_->set_skip_template_url_service_for_testing();
web_contents_delegate_ =
std::make_unique<content::test::ScopedPrerenderWebContentsDelegate>(
*web_contents());
}

content::WebContents* GetActiveWebContents() { return web_contents(); }
Expand Down Expand Up @@ -84,6 +87,9 @@ class PrerenderManagerTest : public ChromeRenderViewHostTestHarness {
private:
content::test::PrerenderTestHelper prerender_helper_;
base::test::ScopedFeatureList scoped_feature_list_;
std::unique_ptr<content::test::ScopedPrerenderWebContentsDelegate>
web_contents_delegate_;

net::EmbeddedTestServer test_server_;
raw_ptr<PrerenderManager> prerender_manager_;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "components/ukm/test_ukm_recorder.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/web_contents_tester.h"
#include "services/metrics/public/cpp/ukm_builders.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
Expand Down Expand Up @@ -267,6 +268,8 @@ TEST_F(TabManagerStatsCollectorPrerenderingTest,
KeepingWebContentsMapInPrerendering) {
std::unique_ptr<WebContents> tab1(CreateTestWebContents());
std::unique_ptr<WebContents> tab2(CreateTestWebContents());
content::test::ScopedPrerenderWebContentsDelegate tab1_delegate(*tab1.get());
content::test::ScopedPrerenderWebContentsDelegate tab2_delegate(*tab2.get());

GURL init_url("https://example1.test/");
content::NavigationSimulator::NavigateAndCommitFromBrowser(tab2.get(),
Expand Down
3 changes: 3 additions & 0 deletions chrome/browser/signin/dice_tab_helper_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "content/public/common/content_features.h"
#include "content/public/test/back_forward_cache_util.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
#include "google_apis/gaia/gaia_urls.h"
Expand Down Expand Up @@ -230,6 +231,8 @@ class DiceTabHelperPrerenderTest : public DiceTabHelperTest {
};

TEST_F(DiceTabHelperPrerenderTest, SigninStatusAfterPrerendering) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());
base::UserActionTester ua_tester;
DiceTabHelper::CreateForWebContents(web_contents());
DiceTabHelper* dice_tab_helper =
Expand Down
4 changes: 4 additions & 0 deletions chrome/browser/signin/reauth_tab_helper_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "chrome/browser/signin/reauth_result.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/web_contents_tester.h"
#include "net/base/net_errors.h"
#include "testing/gmock/include/gmock/gmock.h"
Expand Down Expand Up @@ -166,6 +167,9 @@ class ReauthTabHelperPrerenderTest : public ReauthTabHelperTest {

TEST_F(ReauthTabHelperPrerenderTest,
PrerenderDoesNotAffectLastCommittedErrorPage) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());

content::NavigationSimulator::NavigateAndCommitFromBrowser(web_contents(),
reauth_url());
EXPECT_FALSE(tab_helper()->has_last_committed_error_page());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,9 @@ class SyncEncryptionKeysTabHelperPrerenderingTest
// canceling prerendering.
TEST_F(SyncEncryptionKeysTabHelperPrerenderingTest,
CreateEncryptionKeysInPrerendering) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());

// Load a page.
ASSERT_FALSE(HasEncryptionKeysApiInMainFrame());
web_contents_tester()->NavigateAndCommit(GaiaUrls::GetInstance()->gaia_url());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include "chrome/browser/web_applications/web_app_constants.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/web_contents_tester.h"
#include "net/http/http_status_code.h"
#include "testing/gtest/include/gtest/gtest.h"
Expand Down Expand Up @@ -420,6 +421,9 @@ class WebAppIconDownloaderPrerenderTest : public WebAppIconDownloaderTest {
};

TEST_F(WebAppIconDownloaderPrerenderTest, PrerenderedPageNavigates) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());

// Navigate to an initial page.
NavigateAndCommit(GURL("http://foo.example"));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "chrome/browser/webauthn/chrome_authenticator_request_delegate.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/web_contents_tester.h"
#include "third_party/blink/public/common/features.h"

Expand Down Expand Up @@ -99,6 +100,9 @@ class AuthenticatorRequestSchedulerPrerenderTest

TEST_F(AuthenticatorRequestSchedulerPrerenderTest,
SingleWebContents_OneRequestInPrerendering) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());

// Navigate to an initial page.
NavigateAndCommit(GURL("https://example.com"));

Expand Down
4 changes: 4 additions & 0 deletions components/autofill_assistant/browser/controller_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
#include "components/ukm/content/source_url_recorder.h"
#include "components/ukm/test_ukm_recorder.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/test_browser_context.h"
#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
Expand Down Expand Up @@ -2219,6 +2220,9 @@ class ControllerPrerenderTest : public ControllerTest {
};

TEST_F(ControllerPrerenderTest, SuccessfulNavigation) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());

EXPECT_FALSE(controller_->IsNavigatingToNewDocument());
EXPECT_FALSE(controller_->HasNavigationError());

Expand Down
3 changes: 3 additions & 0 deletions components/autofill_assistant/browser/starter_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include "components/ukm/test_ukm_recorder.h"
#include "content/public/test/browser_task_environment.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/test_browser_context.h"
#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
Expand Down Expand Up @@ -2104,6 +2105,8 @@ class StarterPrerenderTest : public StarterTest {

TEST_F(StarterPrerenderTest, DoNotAffectRecordUkmDuringPrendering) {
SetupPlatformDelegateForFirstTimeUser();
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());

fake_platform_delegate_.feature_module_installed_ = true;
// Empty callback to keep the onboarding open indefinitely.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "components/ukm/test_ukm_recorder.h"
#include "components/version_info/version_info.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/test_browser_context.h"
#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
Expand Down Expand Up @@ -1649,6 +1650,9 @@ class TriggerScriptCoordinatorPrerenderTest
};

TEST_F(TriggerScriptCoordinatorPrerenderTest, DoNotRecordIfPrerenderingFailed) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());

GetTriggerScriptsResponseProto response;
response.add_trigger_scripts();
std::string serialized_response;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "content/public/browser/web_contents_observer.h"
#include "content/public/test/mock_navigation_handle.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
#include "net/cookies/canonical_cookie.h"
Expand Down Expand Up @@ -528,6 +529,9 @@ class PageSpecificContentSettingsWithPrerenderTest
~PageSpecificContentSettingsWithPrerenderTest() override = default;

content::RenderFrameHost* AddPrerender(const GURL& prerender_url) {
web_contents_delegate_ =
std::make_unique<content::test::ScopedPrerenderWebContentsDelegate>(
*web_contents());
content::RenderFrameHost* prerender_frame =
content::WebContentsTester::For(web_contents())
->AddPrerenderAndCommitNavigation(prerender_url);
Expand All @@ -540,6 +544,8 @@ class PageSpecificContentSettingsWithPrerenderTest

private:
base::test::ScopedFeatureList feature_list_;
std::unique_ptr<content::test::ScopedPrerenderWebContentsDelegate>
web_contents_delegate_;
};

TEST_F(PageSpecificContentSettingsWithPrerenderTest, SiteDataAccessed) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
Expand Down Expand Up @@ -1088,7 +1089,10 @@ class PageTextObserverWithPrerenderTest : public PageTextObserverTest {
};

TEST_F(PageTextObserverWithPrerenderTest,
PrerenderingShouldNotResetOutstatndingRequest) {
PrerenderingShouldNotResetOutstandingRequest) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());

TestConsumer consumer;
observer()->AddConsumer(&consumer);
EXPECT_FALSE(consumer.was_called());
Expand Down Expand Up @@ -1122,6 +1126,8 @@ TEST_F(PageTextObserverWithPrerenderTest,
}

TEST_F(PageTextObserverWithPrerenderTest, AMPRequestedOnOOPIFInPrerendering) {
content::test::ScopedPrerenderWebContentsDelegate web_contents_delegate(
*web_contents());
TestConsumer consumer;
observer()->AddConsumer(&consumer);

Expand Down
17 changes: 17 additions & 0 deletions components/page_load_metrics/browser/page_load_tracker_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "base/containers/flat_map.h"
#include "components/page_load_metrics/browser/observers/page_load_metrics_observer_content_test_harness.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
Expand All @@ -29,6 +30,8 @@ struct PageLoadMetricsObserverEvents final {
size_t sub_frame_navigation_count = 0;
};

using content::test::ScopedPrerenderWebContentsDelegate;

class TestPageLoadMetricsObserver final : public PageLoadMetricsObserver {
public:
TestPageLoadMetricsObserver(raw_ptr<PageLoadMetricsObserverEvents> events)
Expand Down Expand Up @@ -134,6 +137,8 @@ class PageLoadTrackerTest : public PageLoadMetricsObserverContentTestHarness {
};

TEST_F(PageLoadTrackerTest, PrimaryPageType) {
ScopedPrerenderWebContentsDelegate web_contents_delegate(*web_contents());

// Target URL to monitor the tracker via the test observer.
SetTargetUrl(kTestUrl);

Expand Down Expand Up @@ -162,6 +167,8 @@ TEST_F(PageLoadTrackerTest, PrimaryPageType) {
}

TEST_F(PageLoadTrackerTest, EventForwarding) {
ScopedPrerenderWebContentsDelegate web_contents_delegate(*web_contents());

// In the end, we'll construct frame trees as the following:
//
// A : primary main frame
Expand Down Expand Up @@ -282,6 +289,8 @@ TEST_F(PageLoadTrackerTest, EventForwarding) {
}

TEST_F(PageLoadTrackerTest, PrerenderPageType) {
ScopedPrerenderWebContentsDelegate web_contents_delegate(*web_contents());

// Target URL to monitor the tracker via the test observer.
const char kPrerenderingUrl[] = "https://a.test/prerender";
SetTargetUrl(kPrerenderingUrl);
Expand Down Expand Up @@ -313,6 +322,8 @@ TEST_F(PageLoadTrackerTest, PrerenderPageType) {
}

TEST_F(PageLoadTrackerTest, FencedFramesPageType) {
ScopedPrerenderWebContentsDelegate web_contents_delegate(*web_contents());

// Target URL to monitor the tracker via the test observer.
const char kFencedFramesUrl[] = "https://a.test/fenced_frames";
SetTargetUrl(kFencedFramesUrl);
Expand Down Expand Up @@ -364,6 +375,8 @@ TEST_F(PageLoadTrackerTest, FencedFramesPageType) {
}

TEST_F(PageLoadTrackerTest, StopObservingOnPrerender) {
ScopedPrerenderWebContentsDelegate web_contents_delegate(*web_contents());

// Target URL to monitor the tracker via the test observer.
const char kPrerenderingUrl[] = "https://a.test/prerender";
SetTargetUrl(kPrerenderingUrl);
Expand All @@ -384,6 +397,8 @@ TEST_F(PageLoadTrackerTest, StopObservingOnPrerender) {
}

TEST_F(PageLoadTrackerTest, StopObservingOnFencedFrames) {
ScopedPrerenderWebContentsDelegate web_contents_delegate(*web_contents());

// Target URL to monitor the tracker via the test observer.
const char kFencedFramesUrl[] = "https://a.test/fenced_frames";
SetTargetUrl(kFencedFramesUrl);
Expand All @@ -409,6 +424,8 @@ TEST_F(PageLoadTrackerTest, StopObservingOnFencedFrames) {
}

TEST_F(PageLoadTrackerTest, ResumeOnPrerenderActivation) {
ScopedPrerenderWebContentsDelegate web_contents_delegate(*web_contents());

// Target URL to monitor the tracker via the test observer.
const char kPrerenderingUrl[] = "https://a.test/prerender";
SetTargetUrl(kPrerenderingUrl);
Expand Down
Loading

0 comments on commit c94a0d2

Please sign in to comment.