1 // Copyright 2019 The Chromium Authors. All rights reserved.
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/extensions/api/safe_browsing_private/safe_browsing_util.h"
6
7 #include <string>
8
9 #include "chrome/common/extensions/api/safe_browsing_private.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace safe_browsing_private = extensions::api::safe_browsing_private;
13
14 namespace extensions {
15
16 namespace {
17
18 const char kMainFrameUrl[] = "https://www.example.com/info";
19 const char kIpAddress[] = "localhost";
20 const char kReferrerUrl[] = "https://www.example.com";
21 const bool kIsRetargeting = false;
22 const double kNavTime = 12345;
23 const char kServerRedirectUrl[] = "https://example.com/redirect";
24 const bool kMaybeLaunched = false;
25
InitializeFakeReferrerChainEntry(std::string url,safe_browsing::ReferrerChainEntry * referrer)26 void InitializeFakeReferrerChainEntry(
27 std::string url,
28 safe_browsing::ReferrerChainEntry* referrer) {
29 referrer->set_url(url);
30 referrer->set_main_frame_url(kMainFrameUrl);
31 referrer->set_type(safe_browsing::ReferrerChainEntry_URLType_LANDING_PAGE);
32 referrer->add_ip_addresses(kIpAddress);
33 referrer->set_referrer_url(kReferrerUrl);
34 referrer->set_is_retargeting(kIsRetargeting);
35 referrer->set_navigation_time_msec(kNavTime);
36 safe_browsing::ReferrerChainEntry_ServerRedirect* server_redirect =
37 referrer->add_server_redirect_chain();
38 server_redirect->set_url(kServerRedirectUrl);
39 referrer->set_navigation_initiation(
40 safe_browsing::ReferrerChainEntry_NavigationInitiation_BROWSER_INITIATED);
41 referrer->set_maybe_launched_by_external_application(kMaybeLaunched);
42 }
43
ValidateReferrerChain(const safe_browsing_private::ReferrerChainEntry & referrer)44 void ValidateReferrerChain(
45 const safe_browsing_private::ReferrerChainEntry& referrer) {
46 ASSERT_FALSE(referrer.url.empty());
47 EXPECT_EQ(*referrer.main_frame_url, kMainFrameUrl);
48 EXPECT_EQ(referrer.url_type,
49 safe_browsing_private::URLType::URL_TYPE_LANDING_PAGE);
50 EXPECT_EQ(referrer.ip_addresses->at(0), kIpAddress);
51 EXPECT_EQ(*referrer.referrer_url, kReferrerUrl);
52 EXPECT_EQ(*referrer.is_retargeting, kIsRetargeting);
53 EXPECT_EQ(*referrer.navigation_time_ms, kNavTime);
54 EXPECT_EQ(*referrer.server_redirect_chain->at(0).url, kServerRedirectUrl);
55 EXPECT_EQ(referrer.navigation_initiation,
56 safe_browsing_private::NAVIGATION_INITIATION_BROWSER_INITIATED);
57 EXPECT_EQ(*referrer.maybe_launched_by_external_app, kMaybeLaunched);
58 }
59
60 } // namespace
61
62 // Tests that we correctly convert referrer chain entries from proto to idl.
TEST(SafeBrowsingUtilUnitTest,ReferrerToReferrerChainEntry)63 TEST(SafeBrowsingUtilUnitTest, ReferrerToReferrerChainEntry) {
64 safe_browsing::ReferrerChainEntry entry;
65 InitializeFakeReferrerChainEntry("https://foo.com", &entry);
66 safe_browsing_private::ReferrerChainEntry landing_referrer_result =
67 safe_browsing_util::ReferrerToReferrerChainEntry(entry);
68 ValidateReferrerChain(landing_referrer_result);
69 EXPECT_EQ(landing_referrer_result.url, "https://foo.com");
70 }
71
72 } // namespace extensions
73