| // Copyright 2019 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 "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_util.h" |
| |
| #include <string> |
| |
| #include "chrome/common/extensions/api/safe_browsing_private.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace safe_browsing_private = extensions::api::safe_browsing_private; |
| |
| namespace extensions { |
| |
| namespace { |
| |
| const char kMainFrameUrl[] = "https://www.example.com/info"; |
| const char kIpAddress[] = "localhost"; |
| const char kReferrerUrl[] = "https://www.example.com"; |
| const bool kIsRetargeting = false; |
| const double kNavTime = 12345; |
| const char kServerRedirectUrl[] = "https://example.com/redirect"; |
| const bool kMaybeLaunched = false; |
| |
| void InitializeFakeReferrerChainEntry( |
| std::string url, |
| safe_browsing::ReferrerChainEntry* referrer) { |
| referrer->set_url(url); |
| referrer->set_main_frame_url(kMainFrameUrl); |
| referrer->set_type(safe_browsing::ReferrerChainEntry_URLType_LANDING_PAGE); |
| referrer->add_ip_addresses(kIpAddress); |
| referrer->set_referrer_url(kReferrerUrl); |
| referrer->set_is_retargeting(kIsRetargeting); |
| referrer->set_navigation_time_msec(kNavTime); |
| safe_browsing::ReferrerChainEntry_ServerRedirect* server_redirect = |
| referrer->add_server_redirect_chain(); |
| server_redirect->set_url(kServerRedirectUrl); |
| referrer->set_navigation_initiation( |
| safe_browsing::ReferrerChainEntry_NavigationInitiation_BROWSER_INITIATED); |
| referrer->set_maybe_launched_by_external_application(kMaybeLaunched); |
| } |
| |
| void ValidateReferrerChain( |
| const safe_browsing_private::ReferrerChainEntry& referrer) { |
| ASSERT_FALSE(referrer.url.empty()); |
| EXPECT_EQ(*referrer.main_frame_url, kMainFrameUrl); |
| EXPECT_EQ(referrer.url_type, |
| safe_browsing_private::URLType::URL_TYPE_LANDING_PAGE); |
| EXPECT_EQ(referrer.ip_addresses->at(0), kIpAddress); |
| EXPECT_EQ(*referrer.referrer_url, kReferrerUrl); |
| EXPECT_EQ(*referrer.is_retargeting, kIsRetargeting); |
| EXPECT_EQ(*referrer.navigation_time_ms, kNavTime); |
| EXPECT_EQ(*referrer.server_redirect_chain->at(0).url, kServerRedirectUrl); |
| EXPECT_EQ(referrer.navigation_initiation, |
| safe_browsing_private::NAVIGATION_INITIATION_BROWSER_INITIATED); |
| EXPECT_EQ(*referrer.maybe_launched_by_external_app, kMaybeLaunched); |
| } |
| |
| } // namespace |
| |
| // Tests that we correctly convert referrer chain entries from proto to idl. |
| TEST(SafeBrowsingUtilUnitTest, ReferrerToReferrerChainEntry) { |
| safe_browsing::ReferrerChainEntry entry; |
| InitializeFakeReferrerChainEntry("https://foo.com", &entry); |
| safe_browsing_private::ReferrerChainEntry landing_referrer_result = |
| safe_browsing_util::ReferrerToReferrerChainEntry(entry); |
| ValidateReferrerChain(landing_referrer_result); |
| EXPECT_EQ(landing_referrer_result.url, "https://foo.com"); |
| } |
| |
| } // namespace extensions |