blob: 6f266f85b7236c14a7c55aa49b6bfeb247d9cc8a [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
Gyuyoung Kime8779742021-06-01 14:55:075#include "chrome/browser/ui/tab_ui_helper.h"
Peter Kastinga4863242024-12-23 00:19:436
7#include "chrome/browser/ui/browser.h"
Steven Luongc7fd59a32025-05-23 00:25:258#include "chrome/browser/ui/tabs/public/tab_features.h"
Gyuyoung Kime8779742021-06-01 14:55:079#include "chrome/test/base/in_process_browser_test.h"
10#include "chrome/test/base/ui_test_utils.h"
Steven Luongc7fd59a32025-05-23 00:25:2511#include "components/tabs/public/tab_interface.h"
Gyuyoung Kime8779742021-06-01 14:55:0712#include "content/public/browser/web_contents.h"
13#include "content/public/test/browser_test.h"
14#include "content/public/test/prerender_test_util.h"
15#include "net/dns/mock_host_resolver.h"
16#include "net/test/embedded_test_server/embedded_test_server.h"
17#include "third_party/blink/public/common/features.h"
18
19class TabUIHelperWithPrerenderingTest : public InProcessBrowserTest {
20 public:
21 TabUIHelperWithPrerenderingTest()
22 : prerender_test_helper_(base::BindRepeating(
23 &TabUIHelperWithPrerenderingTest::GetWebContents,
24 base::Unretained(this))) {}
25 ~TabUIHelperWithPrerenderingTest() override = default;
26 TabUIHelperWithPrerenderingTest(const TabUIHelperWithPrerenderingTest&) =
27 delete;
28 TabUIHelperWithPrerenderingTest& operator=(
29 const TabUIHelperWithPrerenderingTest&) = delete;
30
31 void SetUp() override {
Robert Lineb2a99c2023-08-24 02:42:2632 prerender_test_helper_.RegisterServerRequestMonitor(embedded_test_server());
Gyuyoung Kime8779742021-06-01 14:55:0733 InProcessBrowserTest::SetUp();
34 }
35
36 void SetUpOnMainThread() override {
Gyuyoung Kime8779742021-06-01 14:55:0737 host_resolver()->AddRule("*", "127.0.0.1");
38 ASSERT_TRUE(embedded_test_server()->Start());
39 }
40
41 content::test::PrerenderTestHelper& prerender_test_helper() {
42 return prerender_test_helper_;
43 }
44
45 content::WebContents* GetWebContents() {
46 return browser()->tab_strip_model()->GetActiveWebContents();
47 }
48
49 private:
50 content::test::PrerenderTestHelper prerender_test_helper_;
Gyuyoung Kime8779742021-06-01 14:55:0751};
52
53IN_PROC_BROWSER_TEST_F(TabUIHelperWithPrerenderingTest,
54 ShouldNotAffectTabUIHelperOnPrerendering) {
Steven Luongc7fd59a32025-05-23 00:25:2555 const GURL initial_url = embedded_test_server()->GetURL("/empty.html");
56 const GURL prerender_url =
Gyuyoung Kime8779742021-06-01 14:55:0757 embedded_test_server()->GetURL("/favicon/title2_with_favicon.html");
58 ASSERT_NE(ui_test_utils::NavigateToURL(browser(), initial_url), nullptr);
59
Steven Luongc7fd59a32025-05-23 00:25:2560 TabUIHelper* const tab_ui_helper = browser()
61 ->tab_strip_model()
62 ->GetActiveTab()
63 ->GetTabFeatures()
64 ->tab_ui_helper();
65 const std::u16string primary_title = tab_ui_helper->GetTitle();
66 const ui::ImageModel primary_favicon = tab_ui_helper->GetFavicon();
67 const bool primary_should_hide_throbber = tab_ui_helper->ShouldHideThrobber();
Gyuyoung Kime8779742021-06-01 14:55:0768
69 // Set |create_by_session_restore_| to true to check if the value is changed
70 // after prerendering. It should not be changed because DidStopLoading is not
71 // called during the prerendering.
72 tab_ui_helper->set_created_by_session_restore(true);
73
74 // Prerender to another site.
75 prerender_test_helper().AddPrerender(prerender_url);
76
77 // Check if the prerendering doesn't affect the returned values of
78 // TabUIHelper.
79 EXPECT_EQ(primary_title, tab_ui_helper->GetTitle());
80 EXPECT_EQ(primary_favicon, tab_ui_helper->GetFavicon());
81 EXPECT_EQ(primary_should_hide_throbber, tab_ui_helper->ShouldHideThrobber());
82 // is_created_by_session_restore_for_testing should return true because
83 // DidStopLoading is not called.
84 EXPECT_TRUE(tab_ui_helper->is_created_by_session_restore_for_testing());
85
86 // Activate the prerendered page.
87 prerender_test_helper().NavigatePrimaryPage(prerender_url);
88
89 // Check if new values are different from the previous primary values after
90 // activating the prerendered page.
91 EXPECT_NE(primary_title, tab_ui_helper->GetTitle());
92 EXPECT_FALSE(primary_favicon == tab_ui_helper->GetFavicon());
93 EXPECT_FALSE(tab_ui_helper->ShouldHideThrobber());
94}