Populate RenderingEnvironment URL param for Lens on Chrome.
This change starts the migration process of having UI divergences controlled by RenderingEnvironment instead of Surface/EntryPoint. The changes will come in 2 steps:
1. Start sending RenderingEnvironment to Lens Web with Surface and Entrypoints the same.
2. Once Lens Web is backwards compatible with using Surface and/or RenderingEnvironment, change Surface to be CHROMIUM for all Chrome Desktop requests.
I also refactored the code a slight bit to move the generation of query params out of the EntryPoint file and into to a seperate utils file since this change introduces logic that is separate from EntryPoint.
go/loc-rendering-environment
Tested: Along with unit tests, I manually tested each Lens user flow for all EntryPoints. Here is the list with the corresponding RenderingEnvironment being sent:
* Region Search with Side Panel enabled - Desktop Chrome Side Panel
* Region Search with Side Panel disabled - Desktop Fullscreen
* Image Search with Side Panel enabled - Desktop Chrome Side Panel
* Image Search with Side Panel disabled - Desktop Fullscreen
* Region Search with Side Panel V2 enabled - Desktop Chrome Side Panel
* Image Search with Side Panel V2 enabled - Desktop Chrome Side Panel
* Side panel v1 new tab entrypoint - Desktop Fullscreen
* Side panel v2 new tab entrypoint - Desktop Fullscreen
* Fullscreen search entrypoint with side panel enabled - AVS
* Fullscreen search entrypoint with side panel disabled - AVS
* Screenshot entrypoint with Side Panel enabled - Desktop Chrome Side Panel
* Screenshot entrypoint with Side panel disabled - Desktop Fullscreen
Bug: b:241484087
Change-Id: If2a9bcd2c460735834b1b2145e359dba1877fa0a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3833478
Commit-Queue: Duncan Mercer <[email protected]>
Reviewed-by: Juan Mojica <[email protected]>
Reviewed-by: Travis Skare <[email protected]>
Reviewed-by: Avi Drissman <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1037185}
diff --git a/components/lens/lens_url_utils_unittest.cc b/components/lens/lens_url_utils_unittest.cc
new file mode 100644
index 0000000..b289440a
--- /dev/null
+++ b/components/lens/lens_url_utils_unittest.cc
@@ -0,0 +1,208 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/lens/lens_url_utils.h"
+
+#include "base/strings/string_number_conversions.h"
+#include "base/time/time.h"
+#include "components/lens/lens_entrypoints.h"
+#include "components/lens/lens_rendering_environment.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+using ::testing::MatchesRegex;
+
+namespace lens {
+
+TEST(LensUrlUtilsTest, GetRegionSearchNewTabQueryParameterTest) {
+ lens::EntryPoint lens_region_search_ep =
+ lens::EntryPoint::CHROME_REGION_SEARCH_MENU_ITEM;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_FULLSCREEN;
+ std::string query_param = lens::GetQueryParametersForLensRequest(
+ lens_region_search_ep, re, /*is_side_panel_request=*/false);
+ EXPECT_THAT(query_param, MatchesRegex("ep=crs&re=df&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, GetImageSearchNewTabQueryParameterTest) {
+ lens::EntryPoint lens_image_search_ep =
+ lens::EntryPoint::CHROME_SEARCH_WITH_GOOGLE_LENS_CONTEXT_MENU_ITEM;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_FULLSCREEN;
+ std::string query_param = lens::GetQueryParametersForLensRequest(
+ lens_image_search_ep, re, /*is_side_panel_request=*/false);
+ EXPECT_THAT(query_param, MatchesRegex("ep=ccm&re=df&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, GetRegionSearchSidePanelQueryParameterTest) {
+ lens::EntryPoint lens_region_search_ep =
+ lens::EntryPoint::CHROME_REGION_SEARCH_MENU_ITEM;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_CHROME_SIDE_PANEL;
+ std::string query_param = lens::GetQueryParametersForLensRequest(
+ lens_region_search_ep, re, /*is_side_panel_request=*/true);
+ EXPECT_THAT(query_param, MatchesRegex("ep=crs&re=dcsp&s=csp&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, GetImageSearchSidePanelQueryParameterTest) {
+ lens::EntryPoint lens_image_search_ep =
+ lens::EntryPoint::CHROME_SEARCH_WITH_GOOGLE_LENS_CONTEXT_MENU_ITEM;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_CHROME_SIDE_PANEL;
+ std::string query_param = lens::GetQueryParametersForLensRequest(
+ lens_image_search_ep, re, /*is_side_panel_request=*/true);
+ EXPECT_THAT(query_param, MatchesRegex("ep=ccm&re=dcsp&s=csp&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, GetOpenNewTabSidePanelParameterTest) {
+ lens::EntryPoint lens_open_new_tab_side_panel_ep =
+ lens::EntryPoint::CHROME_OPEN_NEW_TAB_SIDE_PANEL;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_FULLSCREEN;
+ std::string query_param = lens::GetQueryParametersForLensRequest(
+ lens_open_new_tab_side_panel_ep, re, /*is_side_panel_request=*/false);
+ EXPECT_THAT(query_param, MatchesRegex("ep=cnts&re=df&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, GetFullscreenSearchQueryParameterTest) {
+ lens::EntryPoint lens_ep =
+ lens::EntryPoint::CHROME_FULLSCREEN_SEARCH_MENU_ITEM;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_AMBIENT_VISUAL_SEARCH_WEB_FULLSCREEN;
+ std::string query_param = lens::GetQueryParametersForLensRequest(
+ lens_ep, re, /*is_side_panel_request=*/false);
+ EXPECT_THAT(query_param, MatchesRegex("ep=cfs&re=avsf&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, GetScreenshotSearchQueryParameterTest) {
+ lens::EntryPoint lens_ep = lens::EntryPoint::CHROME_SCREENSHOT_SEARCH;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_FULLSCREEN;
+ std::string query_param = lens::GetQueryParametersForLensRequest(
+ lens_ep, re, /*is_side_panel_request=*/false);
+ EXPECT_THAT(query_param, MatchesRegex("ep=css&re=df&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, GetUnknownEntryPointTest) {
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_FULLSCREEN;
+ std::string query_param = lens::GetQueryParametersForLensRequest(
+ lens::EntryPoint::UNKNOWN, re, /*is_side_panel_request=*/false);
+ EXPECT_THAT(query_param, MatchesRegex("re=df&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, GetUnknownEntryPointSidePanelTest) {
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_CHROME_SIDE_PANEL;
+ std::string query_param = lens::GetQueryParametersForLensRequest(
+ lens::EntryPoint::UNKNOWN, re, /*is_side_panel_request=*/true);
+ EXPECT_THAT(query_param, MatchesRegex("re=dcsp&s=csp&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, GetUnknownRenderingEnvironmentTest) {
+ lens::EntryPoint ep = lens::EntryPoint::CHROME_REGION_SEARCH_MENU_ITEM;
+ std::string query_param = lens::GetQueryParametersForLensRequest(
+ ep, lens::RenderingEnvironment::RENDERING_ENV_UNKNOWN,
+ /*is_side_panel_request=*/false);
+ EXPECT_THAT(query_param, MatchesRegex("ep=crs&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, AppendRegionSearchNewTabQueryParameterTest) {
+ lens::EntryPoint lens_region_search_ep =
+ lens::EntryPoint::CHROME_REGION_SEARCH_MENU_ITEM;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_FULLSCREEN;
+ GURL original_url = GURL("https://lens.google.com/");
+ GURL url = lens::AppendOrReplaceQueryParametersForLensRequest(
+ original_url, lens_region_search_ep, re, /*is_side_panel_request=*/false);
+ EXPECT_THAT(url.query(), MatchesRegex("ep=crs&re=df&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, AppendImageSearchNewTabQueryParameterTest) {
+ lens::EntryPoint lens_image_search_ep =
+ lens::EntryPoint::CHROME_SEARCH_WITH_GOOGLE_LENS_CONTEXT_MENU_ITEM;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_FULLSCREEN;
+ GURL original_url = GURL("https://lens.google.com/");
+ GURL url = lens::AppendOrReplaceQueryParametersForLensRequest(
+ original_url, lens_image_search_ep, re, /*is_side_panel_request=*/false);
+ EXPECT_THAT(url.query(), MatchesRegex("ep=ccm&re=df&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, AppendRegionSearchSidePanelQueryParameterTest) {
+ lens::EntryPoint lens_region_search_ep =
+ lens::EntryPoint::CHROME_REGION_SEARCH_MENU_ITEM;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_CHROME_SIDE_PANEL;
+ GURL original_url = GURL("https://lens.google.com/");
+ GURL url = lens::AppendOrReplaceQueryParametersForLensRequest(
+ original_url, lens_region_search_ep, re, /*is_side_panel_request=*/true);
+ EXPECT_THAT(url.query(), MatchesRegex("ep=crs&re=dcsp&s=csp&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, AppendImageSearchSidePanelQueryParameterTest) {
+ lens::EntryPoint lens_image_search_ep =
+ lens::EntryPoint::CHROME_SEARCH_WITH_GOOGLE_LENS_CONTEXT_MENU_ITEM;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_CHROME_SIDE_PANEL;
+ GURL original_url = GURL("https://lens.google.com/");
+ GURL url = lens::AppendOrReplaceQueryParametersForLensRequest(
+ original_url, lens_image_search_ep, re, /*is_side_panel_request=*/true);
+ EXPECT_THAT(url.query(), MatchesRegex("ep=ccm&re=dcsp&s=csp&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, AppendOpenNewTabSidePanelParameterTest) {
+ lens::EntryPoint lens_open_new_tab_side_panel_ep =
+ lens::EntryPoint::CHROME_OPEN_NEW_TAB_SIDE_PANEL;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_FULLSCREEN;
+ GURL original_url = GURL("https://lens.google.com/");
+ GURL url = lens::AppendOrReplaceQueryParametersForLensRequest(
+ original_url, lens_open_new_tab_side_panel_ep, re,
+ /*is_side_panel_request=*/false);
+ EXPECT_THAT(url.query(), MatchesRegex("ep=cnts&re=df&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, AppendFullscreenSearchQueryParameterTest) {
+ lens::EntryPoint lens_ep =
+ lens::EntryPoint::CHROME_FULLSCREEN_SEARCH_MENU_ITEM;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_AMBIENT_VISUAL_SEARCH_WEB_FULLSCREEN;
+ GURL original_url = GURL("https://lens.google.com/");
+ GURL url = lens::AppendOrReplaceQueryParametersForLensRequest(
+ original_url, lens_ep, re, /*is_side_panel_request=*/false);
+ EXPECT_THAT(url.query(), MatchesRegex("ep=cfs&re=avsf&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, AppendScreenshotSearchQueryParameterTest) {
+ lens::EntryPoint lens_ep = lens::EntryPoint::CHROME_SCREENSHOT_SEARCH;
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_FULLSCREEN;
+ GURL original_url = GURL("https://lens.google.com/");
+ GURL url = lens::AppendOrReplaceQueryParametersForLensRequest(
+ original_url, lens_ep, re, /*is_side_panel_request=*/false);
+ EXPECT_THAT(url.query(), MatchesRegex("ep=css&re=df&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, AppendUnknownEntryPointTest) {
+ lens::RenderingEnvironment re =
+ lens::RenderingEnvironment::ONELENS_DESKTOP_WEB_FULLSCREEN;
+ GURL original_url = GURL("https://lens.google.com/");
+ GURL url = lens::AppendOrReplaceQueryParametersForLensRequest(
+ original_url, lens::EntryPoint::UNKNOWN, re,
+ /*is_side_panel_request=*/false);
+ EXPECT_THAT(url.query(), MatchesRegex("re=df&s=&st=\\d+"));
+}
+
+TEST(LensUrlUtilsTest, AppendUnknownRenderingEnvironmentTest) {
+ lens::EntryPoint ep = lens::EntryPoint::CHROME_REGION_SEARCH_MENU_ITEM;
+ GURL original_url = GURL("https://lens.google.com/");
+ GURL url = lens::AppendOrReplaceQueryParametersForLensRequest(
+ original_url, ep, lens::RenderingEnvironment::RENDERING_ENV_UNKNOWN,
+ /*is_side_panel_request=*/false);
+ EXPECT_THAT(url.query(), MatchesRegex("ep=crs&s=&st=\\d+"));
+}
+
+} // namespace lens