blob: cdccfba48dcfcc3f884d7ea9852288d96fc6f428 [file] [log] [blame]
Avi Drissman4a8573c2022-09-09 19:35:541// Copyright 2021 The Chromium Authors
Gyuyoung Kime8779742021-06-01 14:55:072// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/ui/browser.h"
6#include "chrome/browser/ui/tab_ui_helper.h"
7#include "chrome/test/base/in_process_browser_test.h"
8#include "chrome/test/base/ui_test_utils.h"
9#include "content/public/browser/web_contents.h"
10#include "content/public/test/browser_test.h"
11#include "content/public/test/prerender_test_util.h"
12#include "net/dns/mock_host_resolver.h"
13#include "net/test/embedded_test_server/embedded_test_server.h"
14#include "third_party/blink/public/common/features.h"
15
16class TabUIHelperWithPrerenderingTest : public InProcessBrowserTest {
17 public:
18 TabUIHelperWithPrerenderingTest()
19 : prerender_test_helper_(base::BindRepeating(
20 &TabUIHelperWithPrerenderingTest::GetWebContents,
21 base::Unretained(this))) {}
22 ~TabUIHelperWithPrerenderingTest() override = default;
23 TabUIHelperWithPrerenderingTest(const TabUIHelperWithPrerenderingTest&) =
24 delete;
25 TabUIHelperWithPrerenderingTest& operator=(
26 const TabUIHelperWithPrerenderingTest&) = delete;
27
28 void SetUp() override {
Robert Lineb2a99c2023-08-24 02:42:2629 prerender_test_helper_.RegisterServerRequestMonitor(embedded_test_server());
Gyuyoung Kime8779742021-06-01 14:55:0730 InProcessBrowserTest::SetUp();
31 }
32
33 void SetUpOnMainThread() override {
Gyuyoung Kime8779742021-06-01 14:55:0734 host_resolver()->AddRule("*", "127.0.0.1");
35 ASSERT_TRUE(embedded_test_server()->Start());
36 }
37
38 content::test::PrerenderTestHelper& prerender_test_helper() {
39 return prerender_test_helper_;
40 }
41
42 content::WebContents* GetWebContents() {
43 return browser()->tab_strip_model()->GetActiveWebContents();
44 }
45
46 private:
47 content::test::PrerenderTestHelper prerender_test_helper_;
Gyuyoung Kime8779742021-06-01 14:55:0748};
49
50IN_PROC_BROWSER_TEST_F(TabUIHelperWithPrerenderingTest,
51 ShouldNotAffectTabUIHelperOnPrerendering) {
52 GURL initial_url = embedded_test_server()->GetURL("/empty.html");
53 GURL prerender_url =
54 embedded_test_server()->GetURL("/favicon/title2_with_favicon.html");
55 ASSERT_NE(ui_test_utils::NavigateToURL(browser(), initial_url), nullptr);
56
57 TabUIHelper* tab_ui_helper = TabUIHelper::FromWebContents(GetWebContents());
58 std::u16string primary_title = tab_ui_helper->GetTitle();
Thomas Lukaszewicz58e83f12023-05-11 05:00:1259 ui::ImageModel primary_favicon = tab_ui_helper->GetFavicon();
Gyuyoung Kime8779742021-06-01 14:55:0760 bool primary_should_hide_throbber = tab_ui_helper->ShouldHideThrobber();
61
62 // Set |create_by_session_restore_| to true to check if the value is changed
63 // after prerendering. It should not be changed because DidStopLoading is not
64 // called during the prerendering.
65 tab_ui_helper->set_created_by_session_restore(true);
66
67 // Prerender to another site.
68 prerender_test_helper().AddPrerender(prerender_url);
69
70 // Check if the prerendering doesn't affect the returned values of
71 // TabUIHelper.
72 EXPECT_EQ(primary_title, tab_ui_helper->GetTitle());
73 EXPECT_EQ(primary_favicon, tab_ui_helper->GetFavicon());
74 EXPECT_EQ(primary_should_hide_throbber, tab_ui_helper->ShouldHideThrobber());
75 // is_created_by_session_restore_for_testing should return true because
76 // DidStopLoading is not called.
77 EXPECT_TRUE(tab_ui_helper->is_created_by_session_restore_for_testing());
78
79 // Activate the prerendered page.
80 prerender_test_helper().NavigatePrimaryPage(prerender_url);
81
82 // Check if new values are different from the previous primary values after
83 // activating the prerendered page.
84 EXPECT_NE(primary_title, tab_ui_helper->GetTitle());
85 EXPECT_FALSE(primary_favicon == tab_ui_helper->GetFavicon());
86 EXPECT_FALSE(tab_ui_helper->ShouldHideThrobber());
87}