[lensoverlay] Send correct source param from contextual searchbox
Bug: 366215851
Change-Id: I5328d5c8c14e392d59c99283bffa435d75b017c4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5871127
Reviewed-by: Moe Ahmadi <mahmadi@chromium.org>
Commit-Queue: Duncan Mercer <mercerd@google.com>
Cr-Commit-Position: refs/heads/main@{#1357398}
diff --git a/chrome/browser/ui/lens/lens_overlay_controller_browsertest.cc b/chrome/browser/ui/lens/lens_overlay_controller_browsertest.cc
index 0e86d3c..254ec587 100644
--- a/chrome/browser/ui/lens/lens_overlay_controller_browsertest.cc
+++ b/chrome/browser/ui/lens/lens_overlay_controller_browsertest.cc
@@ -4417,6 +4417,14 @@
lens::features::kLensOverlayContextualSearchbox},
/*disabled_features=*/{});
}
+
+ void VerifyContextualSearchQueryParameters(const GURL& url_to_process) {
+ EXPECT_THAT(
+ url_to_process.spec(),
+ testing::MatchesRegex(
+ std::string(kResultsSearchBaseUrl) +
+ ".*source=chrome.cr.menu.*&q=.*&gsc=2&hl=.*&biw=\\d+&bih=\\d+"));
+ }
};
IN_PROC_BROWSER_TEST_F(LensOverlayControllerOverlaySearchbox,
@@ -4452,4 +4460,42 @@
EXPECT_EQ(controller->GetPageClassificationForTesting(),
metrics::OmniboxEventProto::CONTEXTUAL_SEARCHBOX);
}
+
+IN_PROC_BROWSER_TEST_F(LensOverlayControllerOverlaySearchbox,
+ OverlaySearchboxCorrectResultsUrl) {
+ WaitForPaint();
+
+ // State should start in off.
+ auto* controller = browser()
+ ->tab_strip_model()
+ ->GetActiveTab()
+ ->tab_features()
+ ->lens_overlay_controller();
+ ASSERT_EQ(controller->state(), State::kOff);
+
+ // Showing UI should change the state to screenshot and eventually to overlay.
+ controller->ShowUI(LensOverlayInvocationSource::kAppMenu);
+ ASSERT_EQ(controller->state(), State::kScreenshot);
+ ASSERT_TRUE(base::test::RunUntil(
+ [&]() { return controller->state() == State::kOverlay; }));
+
+ // Verify searchbox is in contextual mode.
+ EXPECT_EQ(controller->GetPageClassificationForTesting(),
+ metrics::OmniboxEventProto::CONTEXTUAL_SEARCHBOX);
+
+ controller->IssueSearchBoxRequestForTesting(
+ "hello", AutocompleteMatchType::Type::SEARCH_WHAT_YOU_TYPED,
+ /*is_zero_prefix_suggestion=*/false,
+ std::map<std::string, std::string>());
+
+ // Wait for URL to load in side panel.
+ EXPECT_TRUE(content::WaitForLoadStop(
+ controller->GetSidePanelWebContentsForTesting()));
+
+ // Verify the query and params are set.
+ auto loaded_search_query = controller->get_loaded_search_query_for_testing();
+ EXPECT_TRUE(loaded_search_query);
+ EXPECT_EQ(loaded_search_query->search_query_text_, "hello");
+ VerifyContextualSearchQueryParameters(loaded_search_query->search_query_url_);
+}
} // namespace
diff --git a/chrome/browser/ui/lens/lens_overlay_query_controller_unittest.cc b/chrome/browser/ui/lens/lens_overlay_query_controller_unittest.cc
index dd7db21..612f1d36 100644
--- a/chrome/browser/ui/lens/lens_overlay_query_controller_unittest.cc
+++ b/chrome/browser/ui/lens/lens_overlay_query_controller_unittest.cc
@@ -66,6 +66,9 @@
// Query parameter for the visual input type.
inline constexpr char kVisualInputTypeParameterKey[] = "vit";
+// Query parameter for the invocation source.
+inline constexpr char kInvocationSourceParameterKey[] = "source";
+
// The encoded video context for the test page.
constexpr char kTestEncodedVideoContext[] =
"ChkKF2h0dHBzOi8vd3d3Lmdvb2dsZS5jb20v";
@@ -723,11 +726,17 @@
bool has_visual_input_type = net::GetValueForKeyInQuery(
GURL(url_response_future.Get().url()), kVisualInputTypeParameterKey,
&visual_input_type);
+ std::string invocation_source;
+ bool has_invocation_source = net::GetValueForKeyInQuery(
+ GURL(url_response_future.Get().url()), kInvocationSourceParameterKey,
+ &invocation_source);
ASSERT_EQ(GetSelectionTypeFromUrl(url_response_future.Get().url()),
lens::UNKNOWN_SELECTION_TYPE);
ASSERT_TRUE(has_start_time);
ASSERT_TRUE(has_visual_input_type);
ASSERT_EQ(visual_input_type, "video");
+ ASSERT_TRUE(has_invocation_source);
+ ASSERT_EQ(invocation_source, "chrome.cr.menu");
ASSERT_EQ(query_controller.num_gen204_pings_sent_, 1);
ASSERT_TRUE(url_response_future.Get().has_url());
}
diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc
index f6e54d0..e2b9dd0 100644
--- a/components/search_engines/template_url.cc
+++ b/components/search_engines/template_url.cc
@@ -1362,15 +1362,16 @@
case GOOGLE_SEARCH_SOURCE_ID: {
DCHECK(!replacement.is_post_param);
switch (search_terms_args.request_source) {
- case RequestSource::CONTEXTUAL_SEARCHBOX:
case RequestSource::SEARCH_SIDE_PANEL_SEARCHBOX:
- HandleReplacement("source", "chrome.gsc", replacement, &url);
- break;
+ case RequestSource::CONTEXTUAL_SEARCHBOX:
case RequestSource::LENS_SIDE_PANEL_SEARCHBOX:
- // Lens side panel searchbox source is set via the Lens Overlay
- // url builder as it contains entry point information.
- // Therefore we shouldn't replace anything here.
+ // Searchboxes used by the Lens Overlay have their source set via
+ // the Lens Overlay url builder as it contains entry point
+ // information. Therefore we shouldn't replace anything here.
break;
+ case RequestSource::NTP_MODULE:
+ case RequestSource::SEARCHBOX:
+ case RequestSource::CROS_APP_LIST:
default:
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS)
HandleReplacement("sourceid", "chrome-mobile", replacement, &url);
diff --git a/components/search_engines/template_url_unittest.cc b/components/search_engines/template_url_unittest.cc
index 0d947d2..b29d973 100644
--- a/components/search_engines/template_url_unittest.cc
+++ b/components/search_engines/template_url_unittest.cc
@@ -1504,13 +1504,14 @@
result = GURL(
url.url_ref().ReplaceSearchTerms(search_terms_args, search_terms_data_));
ASSERT_TRUE(result.is_valid());
- EXPECT_EQ("http://google.com/?source=chrome.gsc&", result.spec());
+ // The Lens Overlay url builder will handle setting the correct source.
+ EXPECT_EQ("http://google.com/?", result.spec());
search_terms_args.request_source = RequestSource::SEARCH_SIDE_PANEL_SEARCHBOX;
result = GURL(
url.url_ref().ReplaceSearchTerms(search_terms_args, search_terms_data_));
ASSERT_TRUE(result.is_valid());
- EXPECT_EQ("http://google.com/?source=chrome.gsc&", result.spec());
+ EXPECT_EQ("http://google.com/?", result.spec());
search_terms_args.request_source = RequestSource::LENS_SIDE_PANEL_SEARCHBOX;
result = GURL(