15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/safe_browsing/ping_manager.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/google_api_keys.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/escape.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Time;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::TimeDelta;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kUrlPrefix[] = "https://prefix.com/foo";
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kClient[] = "unittest";
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kAppVer[] = "1.0";
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SafeBrowsingPingManagerTest : public testing::Test {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string key_param_;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string key = google_apis::GetAPIKey();
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!key.empty()) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      key_param_ = base::StringPrintf(
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "&key=%s",
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          net::EscapeQueryParamValue(key, true).c_str());
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SafeBrowsingPingManagerTest, TestSafeBrowsingHitUrl) {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SafeBrowsingProtocolConfig config;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  config.client_name = kClient;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  config.url_prefix = kUrlPrefix;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SafeBrowsingPingManager pm(NULL, config);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pm.version_ = kAppVer;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL malicious_url("http://malicious.url.com");
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL page_url("http://page.url.com");
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL referrer_url("http://referrer.url.com");
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&"
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            "pver=3.0" + key_param_ +
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&evts=malblhit&evtd=http%3A%2F%2Fmalicious.url.com%2F&"
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer."
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "url.com%2F&evtb=1",
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            pm.SafeBrowsingHitUrl(
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                malicious_url, page_url, referrer_url,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                true, SB_THREAT_TYPE_URL_MALWARE).spec());
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&"
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            "pver=3.0" + key_param_ + "&evts=phishblhit&"
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "evtd=http%3A%2F%2Fmalicious.url.com%2F&"
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer."
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "url.com%2F&evtb=0",
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            pm.SafeBrowsingHitUrl(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                malicious_url, page_url, referrer_url,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                false, SB_THREAT_TYPE_URL_PHISHING).spec());
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&"
65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            "pver=3.0" + key_param_ + "&evts=binurlhit&"
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "evtd=http%3A%2F%2Fmalicious.url.com%2F&"
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer."
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "url.com%2F&evtb=0",
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            pm.SafeBrowsingHitUrl(
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                malicious_url, page_url, referrer_url,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                false, SB_THREAT_TYPE_BINARY_MALWARE_URL).spec());
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&"
74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            "pver=3.0" + key_param_ + "&evts=phishcsdhit&"
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "evtd=http%3A%2F%2Fmalicious.url.com%2F&"
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer."
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "url.com%2F&evtb=0",
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            pm.SafeBrowsingHitUrl(
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                malicious_url, page_url, referrer_url,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                false, SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL).spec());
81424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
82424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&"
83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            "pver=3.0" + key_param_ + "&evts=malcsdhit&"
84424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)            "evtd=http%3A%2F%2Fmalicious.url.com%2F&"
85424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)            "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer."
86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)            "url.com%2F&evtb=1",
87424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)            pm.SafeBrowsingHitUrl(
88424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                malicious_url, page_url, referrer_url,
89424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                true, SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL).spec());
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SafeBrowsingPingManagerTest, TestMalwareDetailsUrl) {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SafeBrowsingProtocolConfig config;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  config.client_name = kClient;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  config.url_prefix = kUrlPrefix;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SafeBrowsingPingManager pm(NULL, config);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pm.version_ = kAppVer;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://prefix.com/foo/clientreport/malware?"
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "client=unittest&appver=1.0&pver=1.0" + key_param_,
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            pm.MalwareDetailsUrl().spec());
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
103