|  | // Copyright 2025 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "components/data_sharing/public/data_sharing_utils.h" | 
|  |  | 
|  | #include "components/data_sharing/public/features.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace data_sharing { | 
|  |  | 
|  | namespace { | 
|  | const char kGroupId[] = "/?-group_id"; | 
|  | const char kTokenBlob[] = "/?-_token"; | 
|  |  | 
|  | TEST(DataSharingUtilsTest, ParseAndInterceptDataSharingURL) { | 
|  | GURL url = GURL(data_sharing::features::kDataSharingURL.Get() + | 
|  | "?g=" + kGroupId + "&t=" + kTokenBlob); | 
|  |  | 
|  | ParseUrlResult result = DataSharingUtils::ParseDataSharingUrl(url); | 
|  |  | 
|  | // Verify valid path. | 
|  | ASSERT_TRUE(result.has_value()); | 
|  | EXPECT_EQ(kGroupId, result.value().group_id.value()); | 
|  | EXPECT_EQ(kTokenBlob, result.value().access_token); | 
|  | EXPECT_TRUE(DataSharingUtils::ShouldInterceptNavigationForShareURL(url)); | 
|  |  | 
|  | // Verify host/path error. | 
|  | std::string invalid = "https://www.test.com/"; | 
|  | url = GURL(invalid + "?g=" + kGroupId + "&t=" + kTokenBlob); | 
|  | result = DataSharingUtils::ParseDataSharingUrl(url); | 
|  | ASSERT_FALSE(result.has_value()); | 
|  | EXPECT_EQ(result.error(), ParseUrlStatus::kHostOrPathMismatchFailure); | 
|  | EXPECT_FALSE(DataSharingUtils::ShouldInterceptNavigationForShareURL(url)); | 
|  |  | 
|  | // Verify query missing error. | 
|  | url = GURL(data_sharing::features::kDataSharingURL.Get() + | 
|  | "?access_token=" + kGroupId); | 
|  | result = DataSharingUtils::ParseDataSharingUrl(url); | 
|  | ASSERT_FALSE(result.has_value()); | 
|  | EXPECT_EQ(result.error(), ParseUrlStatus::kQueryMissingFailure); | 
|  | EXPECT_TRUE(DataSharingUtils::ShouldInterceptNavigationForShareURL(url)); | 
|  |  | 
|  | // Verify access token missing is ok. | 
|  | url = GURL(data_sharing::features::kDataSharingURL.Get() + "?g=" + kGroupId); | 
|  | result = DataSharingUtils::ParseDataSharingUrl(url); | 
|  | ASSERT_TRUE(result.has_value()); | 
|  | EXPECT_EQ(kGroupId, result.value().group_id.value()); | 
|  | EXPECT_EQ("", result.value().access_token); | 
|  | EXPECT_TRUE(DataSharingUtils::ShouldInterceptNavigationForShareURL(url)); | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  | }  // namespace data_sharing |