blob: 9257533b422449df3d53a9763f7ce091de5625ad [file] [log] [blame]
Justin DeWitteda1c0c2023-11-14 20:01:001// Copyright 2023 The Chromium Authors
2// 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/compose/compose_session.h"
6
7#include "base/test/scoped_feature_list.h"
8#include "chrome/app/chrome_command_ids.h"
9#include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
10#include "chrome/browser/ui/browser.h"
11#include "chrome/browser/ui/tabs/tab_enums.h"
12#include "chrome/browser/ui/tabs/tab_strip_model.h"
Trevor Perrier230b7f22023-12-02 01:33:4713#include "chrome/browser/ui/webui/feedback/feedback_dialog.h"
Anthony Cuiaa990bb92023-11-29 21:05:3314#include "chrome/common/pref_names.h"
Justin DeWitteda1c0c2023-11-14 20:01:0015#include "chrome/test/base/in_process_browser_test.h"
16#include "chrome/test/base/ui_test_utils.h"
Trevor Perrier230b7f22023-12-02 01:33:4717#include "chrome/test/interaction/interactive_browser_test.h"
Justin DeWitteda1c0c2023-11-14 20:01:0018#include "components/compose/core/browser/compose_features.h"
19#include "components/optimization_guide/core/optimization_guide_features.h"
Anthony Cuiaa990bb92023-11-29 21:05:3320#include "components/prefs/pref_service.h"
21#include "components/unified_consent/pref_names.h"
Justin DeWitteda1c0c2023-11-14 20:01:0022#include "content/public/browser/web_contents.h"
23#include "content/public/test/browser_test.h"
24#include "content/public/test/browser_test_utils.h"
25#include "ui/gfx/geometry/point_conversions.h"
Trevor Perrier230b7f22023-12-02 01:33:4726#include "ui/views/interaction/interaction_test_util_views.h"
Justin DeWitteda1c0c2023-11-14 20:01:0027
Anthony Cuiaa990bb92023-11-29 21:05:3328using ComposeClientPrefsBrowserTest = InProcessBrowserTest;
Justin DeWitteda1c0c2023-11-14 20:01:0029
Anthony Cuiaa990bb92023-11-29 21:05:3330namespace compose {
Rakina Zata Amni833b4312023-11-29 06:13:5231
Trevor Perrier230b7f22023-12-02 01:33:4732class ComposeSessionBrowserTest : public InteractiveBrowserTest {
Justin DeWitteda1c0c2023-11-14 20:01:0033 public:
34 void SetUp() override {
35 feature_list()->InitWithFeatures(
36 {compose::features::kEnableCompose,
37 optimization_guide::features::kOptimizationGuideModelExecution},
38 {});
Justin DeWittcf1b2c82023-12-22 02:01:1339 InteractiveBrowserTest::SetUp();
Justin DeWitteda1c0c2023-11-14 20:01:0040 }
41
42 base::test::ScopedFeatureList* feature_list() { return &feature_list_; }
43
44 protected:
45 base::test::ScopedFeatureList feature_list_;
46};
47
Justin DeWittcf1b2c82023-12-22 02:01:1348IN_PROC_BROWSER_TEST_F(ComposeSessionBrowserTest, LifetimeOfBubbleWrapper) {
Justin DeWitteda1c0c2023-11-14 20:01:0049 ASSERT_TRUE(embedded_test_server()->Start());
50 auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
51 ASSERT_TRUE(ui_test_utils::NavigateToURL(
52 browser(), embedded_test_server()->GetURL("/compose/test2.html")));
53 ASSERT_NE(nullptr, ChromeComposeClient::FromWebContents(web_contents));
54 auto* client = ChromeComposeClient::FromWebContents(web_contents);
Pete Williamsonf6e5ff22023-12-19 00:40:5255 client->GetComposeEnabling().SetEnabledForTesting(true);
Justin DeWitteda1c0c2023-11-14 20:01:0056
57 // get point of element
58 gfx::PointF textarea_center =
59 content::GetCenterCoordinatesOfElementWithId(web_contents, "elem1");
60 autofill::FormFieldData field_data;
61 field_data.bounds = gfx::RectF((textarea_center), gfx::SizeF(1, 1));
62
63 client->ShowComposeDialog(
64 autofill::AutofillComposeDelegate::UiEntryPoint::kAutofillPopup,
65 field_data, std::nullopt, base::NullCallback());
66
67 // close window right away
68 browser()->tab_strip_model()->CloseWebContentsAt(0,
69 TabCloseTypes::CLOSE_NONE);
70}
71
Trevor Perrier230b7f22023-12-02 01:33:4772IN_PROC_BROWSER_TEST_F(ComposeSessionBrowserTest, OpenFeedbackPage) {
73 ASSERT_TRUE(embedded_test_server()->Start());
74 auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
75 ASSERT_TRUE(ui_test_utils::NavigateToURL(
76 browser(), embedded_test_server()->GetURL("/compose/test2.html")));
77 ASSERT_NE(nullptr, ChromeComposeClient::FromWebContents(web_contents));
78 auto* client = ChromeComposeClient::FromWebContents(web_contents);
Pete Williamsonf6e5ff22023-12-19 00:40:5279 client->GetComposeEnabling().SetEnabledForTesting(true);
Trevor Perrier230b7f22023-12-02 01:33:4780
81 // get point of element
82 gfx::PointF textarea_center =
83 content::GetCenterCoordinatesOfElementWithId(web_contents, "elem1");
84 autofill::FormFieldData field_data;
85 field_data.bounds = gfx::RectF((textarea_center), gfx::SizeF(1, 1));
86
87 client->ShowComposeDialog(
88 autofill::AutofillComposeDelegate::UiEntryPoint::kAutofillPopup,
89 field_data, std::nullopt, base::NullCallback());
90
91 client->OpenFeedbackPageForTest("test_id");
92
93 RunTestSequence(
94 InAnyContext(WaitForShow(FeedbackDialog::kFeedbackDialogForTesting)));
95}
Trevor Perrier230b7f22023-12-02 01:33:4796
97// Start ClientPrefsBrowserTest methods.
Anthony Cuiaa990bb92023-11-29 21:05:3398IN_PROC_BROWSER_TEST_F(ComposeClientPrefsBrowserTest,
99 GetConsentStateFromPrefs) {
100 auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
101 ASSERT_NE(nullptr, ChromeComposeClient::FromWebContents(web_contents));
102 auto* client = ChromeComposeClient::FromWebContents(web_contents);
103 PrefService* prefs = browser()->profile()->GetPrefs();
104
105 // By default both kPageContentCollectionEnabled and
106 // kPrefHasAcceptedComposeConsent should be false
107 EXPECT_EQ(client->GetConsentStateFromPrefs(),
108 compose::mojom::ConsentState::kUnset);
109
110 // Consent enabled but not acknowledged from compose
111 prefs->SetBoolean(unified_consent::prefs::kPageContentCollectionEnabled,
112 true);
113 EXPECT_EQ(client->GetConsentStateFromPrefs(),
114 compose::mojom::ConsentState::kExternalConsented);
115
116#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
117 // Consent enabled and acknowledged from compose
118 prefs->SetBoolean(prefs::kPrefHasAcceptedComposeConsent, true);
119 EXPECT_EQ(client->GetConsentStateFromPrefs(),
120 compose::mojom::ConsentState::kConsented);
121
122 // Consent disabled since being acknowledged from compose
123 prefs->SetBoolean(unified_consent::prefs::kPageContentCollectionEnabled,
124 false);
125 EXPECT_EQ(client->GetConsentStateFromPrefs(),
126 compose::mojom::ConsentState::kUnset);
127#endif
128}
129
130IN_PROC_BROWSER_TEST_F(ComposeClientPrefsBrowserTest, ApproveConsent) {
131 auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
132 ASSERT_NE(nullptr, ChromeComposeClient::FromWebContents(web_contents));
133 auto* client = ChromeComposeClient::FromWebContents(web_contents);
134 PrefService* prefs = browser()->profile()->GetPrefs();
135
136 // By default both kPageContentCollectionEnabled and
137 // kPrefHasAcceptedComposeConsent should be false
138 EXPECT_EQ(client->GetConsentStateFromPrefs(),
139 compose::mojom::ConsentState::kUnset);
140
141 client->ApproveConsent();
142 ASSERT_TRUE(
143 prefs->GetBoolean(unified_consent::prefs::kPageContentCollectionEnabled));
144#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
145 ASSERT_TRUE(prefs->GetBoolean(prefs::kPrefHasAcceptedComposeConsent));
146#endif
147}
148
149IN_PROC_BROWSER_TEST_F(ComposeClientPrefsBrowserTest,
150 AcknowledgeConsentDisclaimer) {
151 auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
152 ASSERT_NE(nullptr, ChromeComposeClient::FromWebContents(web_contents));
153 auto* client = ChromeComposeClient::FromWebContents(web_contents);
154 PrefService* prefs = browser()->profile()->GetPrefs();
155
156 // By default both kPageContentCollectionEnabled and
157 // kPrefHasAcceptedComposeConsent should be false
158 EXPECT_EQ(client->GetConsentStateFromPrefs(),
159 compose::mojom::ConsentState::kUnset);
160
161 client->AcknowledgeConsentDisclaimer();
162 ASSERT_FALSE(
163 prefs->GetBoolean(unified_consent::prefs::kPageContentCollectionEnabled));
164#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
165 ASSERT_TRUE(prefs->GetBoolean(prefs::kPrefHasAcceptedComposeConsent));
166#endif
167}
168
Justin DeWitteda1c0c2023-11-14 20:01:00169} // namespace compose