blob: 5ee5f16d5f18e89cda81aafd9ce00dd38c8102d7 [file] [log] [blame]
// Copyright 2017 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/safe_browsing/client_side_detection_host.h"
#include "base/run_loop.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "components/prefs/pref_service.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
using content::WebContents;
namespace safe_browsing {
namespace {
class TestClientSideDetectionHost : public ClientSideDetectionHost {
public:
explicit TestClientSideDetectionHost(WebContents* tab)
: ClientSideDetectionHost(tab) {}
private:
void OnMalwarePreClassificationDone(bool should_classify_not_used) override {
ClientSideDetectionHost::OnMalwarePreClassificationDone(true);
}
void DidStopLoading() override {}
};
bool FindExpectedIPUrlInfo(const IPUrlInfo& expected_info,
const std::vector<IPUrlInfo>& ip_url_vector) {
auto result = std::find_if(
ip_url_vector.begin(), ip_url_vector.end(),
[expected_info](const IPUrlInfo& ip_url_info) {
return expected_info.url == ip_url_info.url &&
expected_info.method == ip_url_info.method &&
expected_info.referrer == ip_url_info.referrer &&
expected_info.resource_type == ip_url_info.resource_type;
});
return result != ip_url_vector.end();
}
} // namespace
using ClientSideDetectionHostBrowserTest = InProcessBrowserTest;
IN_PROC_BROWSER_TEST_F(ClientSideDetectionHostBrowserTest,
VerifyIPAddressCollection) {
browser()->profile()->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled,
false);
ASSERT_TRUE(embedded_test_server()->Start());
std::unique_ptr<TestClientSideDetectionHost> csd_host =
std::make_unique<TestClientSideDetectionHost>(
browser()->tab_strip_model()->GetActiveWebContents());
GURL page_url(embedded_test_server()->GetURL("/safe_browsing/malware.html"));
ui_test_utils::NavigateToURL(browser(), page_url);
BrowseInfo* browse_info = csd_host->GetBrowseInfo();
EXPECT_EQ(1u, browse_info->ips.size());
const std::vector<IPUrlInfo>& ip_urls =
browse_info->ips[embedded_test_server()->base_url().host()];
IPUrlInfo expected_result_1(
embedded_test_server()->GetURL("/safe_browsing/malware_image.png").spec(),
"GET", page_url.spec(), content::RESOURCE_TYPE_IMAGE);
IPUrlInfo expected_result_2(embedded_test_server()
->GetURL("/safe_browsing/malware_iframe.html")
.spec(),
"GET", page_url.spec(),
content::RESOURCE_TYPE_SUB_FRAME);
EXPECT_TRUE(FindExpectedIPUrlInfo(expected_result_1, ip_urls));
EXPECT_TRUE(FindExpectedIPUrlInfo(expected_result_2, ip_urls));
}
} // namespace safe_browsing