| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <algorithm> | 5 #include <algorithm> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/pickle.h" | 8 #include "base/pickle.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 | 35 |
| 36 // Mixture of HTTP and HTTPS. No special treatment for HTTPS. | 36 // Mixture of HTTP and HTTPS. No special treatment for HTTPS. |
| 37 static const char* kOriginalLandingURL = | 37 static const char* kOriginalLandingURL = |
| 38 "http://www.originallandingpage.com/with/path"; | 38 "http://www.originallandingpage.com/with/path"; |
| 39 static const char* kDOMChildURL = "https://www.domparent.com/with/path"; | 39 static const char* kDOMChildURL = "https://www.domparent.com/with/path"; |
| 40 static const char* kDOMParentURL = "https://www.domchild.com/with/path"; | 40 static const char* kDOMParentURL = "https://www.domchild.com/with/path"; |
| 41 static const char* kFirstRedirectURL = "http://redirectone.com/with/path"; | 41 static const char* kFirstRedirectURL = "http://redirectone.com/with/path"; |
| 42 static const char* kSecondRedirectURL = "https://redirecttwo.com/with/path"; | 42 static const char* kSecondRedirectURL = "https://redirecttwo.com/with/path"; |
| 43 static const char* kReferrerURL = "http://www.referrer.com/with/path"; | 43 static const char* kReferrerURL = "http://www.referrer.com/with/path"; |
| 44 | 44 |
| 45 static const char* kMalwareURL = "http://www.malware.com/with/path"; | 45 static const char* kThreatURL = "http://www.threat.com/with/path"; |
| 46 static const char* kMalwareHeaders = | 46 static const char* kThreatHeaders = |
| 47 "HTTP/1.1 200 OK\n" | 47 "HTTP/1.1 200 OK\n" |
| 48 "Content-Type: image/jpeg\n"; | 48 "Content-Type: image/jpeg\n"; |
| 49 static const char* kMalwareData = "exploit();"; | 49 static const char* kThreatData = "exploit();"; |
| 50 | 50 |
| 51 static const char* kLandingURL = "http://www.landingpage.com/with/path"; | 51 static const char* kLandingURL = "http://www.landingpage.com/with/path"; |
| 52 static const char* kLandingHeaders = | 52 static const char* kLandingHeaders = |
| 53 "HTTP/1.1 200 OK\n" | 53 "HTTP/1.1 200 OK\n" |
| 54 "Content-Type: text/html\n" | 54 "Content-Type: text/html\n" |
| 55 "Content-Length: 1024\n" | 55 "Content-Length: 1024\n" |
| 56 "Set-Cookie: tastycookie\n"; // This header is stripped. | 56 "Set-Cookie: tastycookie\n"; // This header is stripped. |
| 57 static const char* kLandingData = | 57 static const char* kLandingData = |
| 58 "<iframe src='http://www.malware.com/with/path'>"; | 58 "<iframe src='http://www.threat.com/with/path'>"; |
| 59 | 59 |
| 60 using content::BrowserThread; | 60 using content::BrowserThread; |
| 61 using content::WebContents; | 61 using content::WebContents; |
| 62 using safe_browsing::ClientMalwareReportRequest; | 62 using safe_browsing::ClientSafeBrowsingReportRequest; |
| 63 | 63 |
| 64 namespace { | 64 namespace { |
| 65 | 65 |
| 66 void WriteHeaders(disk_cache::Entry* entry, const std::string& headers) { | 66 void WriteHeaders(disk_cache::Entry* entry, const std::string& headers) { |
| 67 net::HttpResponseInfo responseinfo; | 67 net::HttpResponseInfo responseinfo; |
| 68 std::string raw_headers = | 68 std::string raw_headers = |
| 69 net::HttpUtil::AssembleRawHeaders(headers.c_str(), headers.size()); | 69 net::HttpUtil::AssembleRawHeaders(headers.c_str(), headers.size()); |
| 70 responseinfo.socket_address = net::HostPortPair("1.2.3.4", 80); | 70 responseinfo.socket_address = net::HostPortPair("1.2.3.4", 80); |
| 71 responseinfo.headers = new net::HttpResponseHeaders(raw_headers); | 71 responseinfo.headers = new net::HttpResponseHeaders(raw_headers); |
| 72 | 72 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 | 115 |
| 116 void FillCache(net::URLRequestContextGetter* context_getter) { | 116 void FillCache(net::URLRequestContextGetter* context_getter) { |
| 117 net::TestCompletionCallback cb; | 117 net::TestCompletionCallback cb; |
| 118 disk_cache::Backend* cache; | 118 disk_cache::Backend* cache; |
| 119 int rv = context_getter->GetURLRequestContext() | 119 int rv = context_getter->GetURLRequestContext() |
| 120 ->http_transaction_factory() | 120 ->http_transaction_factory() |
| 121 ->GetCache() | 121 ->GetCache() |
| 122 ->GetBackend(&cache, cb.callback()); | 122 ->GetBackend(&cache, cb.callback()); |
| 123 ASSERT_EQ(net::OK, cb.GetResult(rv)); | 123 ASSERT_EQ(net::OK, cb.GetResult(rv)); |
| 124 | 124 |
| 125 WriteToEntry(cache, kMalwareURL, kMalwareHeaders, kMalwareData); | 125 WriteToEntry(cache, kThreatURL, kThreatHeaders, kThreatData); |
| 126 WriteToEntry(cache, kLandingURL, kLandingHeaders, kLandingData); | 126 WriteToEntry(cache, kLandingURL, kLandingHeaders, kLandingData); |
| 127 } | 127 } |
| 128 | 128 |
| 129 // Lets us provide a MockURLRequestContext with an HTTP Cache we pre-populate. | 129 // Lets us provide a MockURLRequestContext with an HTTP Cache we pre-populate. |
| 130 // Also exposes the constructor. | 130 // Also exposes the constructor. |
| 131 class ThreatDetailsWrap : public ThreatDetails { | 131 class ThreatDetailsWrap : public ThreatDetails { |
| 132 public: | 132 public: |
| 133 ThreatDetailsWrap( | 133 ThreatDetailsWrap( |
| 134 SafeBrowsingUIManager* ui_manager, | 134 SafeBrowsingUIManager* ui_manager, |
| 135 WebContents* web_contents, | 135 WebContents* web_contents, |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 ASSERT_TRUE(profile()->CreateHistoryService(true /* delete_file */, | 188 ASSERT_TRUE(profile()->CreateHistoryService(true /* delete_file */, |
| 189 false /* no_db */)); | 189 false /* no_db */)); |
| 190 } | 190 } |
| 191 | 191 |
| 192 void TearDown() override { | 192 void TearDown() override { |
| 193 profile()->DestroyHistoryService(); | 193 profile()->DestroyHistoryService(); |
| 194 ChromeRenderViewHostTestHarness::TearDown(); | 194 ChromeRenderViewHostTestHarness::TearDown(); |
| 195 } | 195 } |
| 196 | 196 |
| 197 static bool ResourceLessThan( | 197 static bool ResourceLessThan( |
| 198 const ClientMalwareReportRequest::Resource* lhs, | 198 const ClientSafeBrowsingReportRequest::Resource* lhs, |
| 199 const ClientMalwareReportRequest::Resource* rhs) { | 199 const ClientSafeBrowsingReportRequest::Resource* rhs) { |
| 200 return lhs->id() < rhs->id(); | 200 return lhs->id() < rhs->id(); |
| 201 } | 201 } |
| 202 | 202 |
| 203 std::string WaitForSerializedReport(ThreatDetails* report, | 203 std::string WaitForSerializedReport(ThreatDetails* report, |
| 204 bool did_proceed, | 204 bool did_proceed, |
| 205 int num_visit) { | 205 int num_visit) { |
| 206 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 206 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| 207 base::Bind(&ThreatDetails::FinishCollection, report, | 207 base::Bind(&ThreatDetails::FinishCollection, report, |
| 208 did_proceed, num_visit)); | 208 did_proceed, num_visit)); |
| 209 // Wait for the callback (SendSerializedThreatDetails). | 209 // Wait for the callback (SendSerializedThreatDetails). |
| 210 DVLOG(1) << "Waiting for SendSerializedThreatDetails"; | 210 DVLOG(1) << "Waiting for SendSerializedThreatDetails"; |
| 211 base::RunLoop run_loop; | 211 base::RunLoop run_loop; |
| 212 ui_manager_->SetRunLoopToQuit(&run_loop); | 212 ui_manager_->SetRunLoopToQuit(&run_loop); |
| 213 run_loop.Run(); | 213 run_loop.Run(); |
| 214 return ui_manager_->GetSerialized(); | 214 return ui_manager_->GetSerialized(); |
| 215 } | 215 } |
| 216 | 216 |
| 217 history::HistoryService* history_service() { | 217 history::HistoryService* history_service() { |
| 218 return HistoryServiceFactory::GetForProfile( | 218 return HistoryServiceFactory::GetForProfile( |
| 219 profile(), ServiceAccessType::EXPLICIT_ACCESS); | 219 profile(), ServiceAccessType::EXPLICIT_ACCESS); |
| 220 } | 220 } |
| 221 | 221 |
| 222 protected: | 222 protected: |
| 223 void InitResource(UnsafeResource* resource, | 223 void InitResource(UnsafeResource* resource, |
| 224 SBThreatType threat_type, |
| 224 bool is_subresource, | 225 bool is_subresource, |
| 225 const GURL& url) { | 226 const GURL& url) { |
| 226 resource->url = url; | 227 resource->url = url; |
| 227 resource->is_subresource = is_subresource; | 228 resource->is_subresource = is_subresource; |
| 228 resource->threat_type = SB_THREAT_TYPE_URL_MALWARE; | 229 resource->threat_type = threat_type; |
| 229 resource->render_process_host_id = | 230 resource->render_process_host_id = |
| 230 web_contents()->GetRenderProcessHost()->GetID(); | 231 web_contents()->GetRenderProcessHost()->GetID(); |
| 231 resource->render_view_id = | 232 resource->render_view_id = |
| 232 web_contents()->GetRenderViewHost()->GetRoutingID(); | 233 web_contents()->GetRenderViewHost()->GetRoutingID(); |
| 233 } | 234 } |
| 234 | 235 |
| 235 void VerifyResults(const ClientMalwareReportRequest& report_pb, | 236 void VerifyResults(const ClientSafeBrowsingReportRequest& report_pb, |
| 236 const ClientMalwareReportRequest& expected_pb) { | 237 const ClientSafeBrowsingReportRequest& expected_pb) { |
| 237 EXPECT_EQ(expected_pb.malware_url(), report_pb.malware_url()); | 238 EXPECT_EQ(expected_pb.type(), report_pb.type()); |
| 239 EXPECT_EQ(expected_pb.url(), report_pb.url()); |
| 238 EXPECT_EQ(expected_pb.page_url(), report_pb.page_url()); | 240 EXPECT_EQ(expected_pb.page_url(), report_pb.page_url()); |
| 239 EXPECT_EQ(expected_pb.referrer_url(), report_pb.referrer_url()); | 241 EXPECT_EQ(expected_pb.referrer_url(), report_pb.referrer_url()); |
| 240 EXPECT_EQ(expected_pb.did_proceed(), report_pb.did_proceed()); | 242 EXPECT_EQ(expected_pb.did_proceed(), report_pb.did_proceed()); |
| 241 EXPECT_EQ(expected_pb.has_repeat_visit(), report_pb.has_repeat_visit()); | 243 EXPECT_EQ(expected_pb.has_repeat_visit(), report_pb.has_repeat_visit()); |
| 242 if (expected_pb.has_repeat_visit() && report_pb.has_repeat_visit()) { | 244 if (expected_pb.has_repeat_visit() && report_pb.has_repeat_visit()) { |
| 243 EXPECT_EQ(expected_pb.repeat_visit(), report_pb.repeat_visit()); | 245 EXPECT_EQ(expected_pb.repeat_visit(), report_pb.repeat_visit()); |
| 244 } | 246 } |
| 245 | 247 |
| 246 ASSERT_EQ(expected_pb.resources_size(), report_pb.resources_size()); | 248 ASSERT_EQ(expected_pb.resources_size(), report_pb.resources_size()); |
| 247 // Sort the resources, to make the test deterministic | 249 // Sort the resources, to make the test deterministic |
| 248 std::vector<const ClientMalwareReportRequest::Resource*> resources; | 250 std::vector<const ClientSafeBrowsingReportRequest::Resource*> resources; |
| 249 for (int i = 0; i < report_pb.resources_size(); ++i) { | 251 for (int i = 0; i < report_pb.resources_size(); ++i) { |
| 250 const ClientMalwareReportRequest::Resource& resource = | 252 const ClientSafeBrowsingReportRequest::Resource& resource = |
| 251 report_pb.resources(i); | 253 report_pb.resources(i); |
| 252 resources.push_back(&resource); | 254 resources.push_back(&resource); |
| 253 } | 255 } |
| 254 std::sort(resources.begin(), resources.end(), | 256 std::sort(resources.begin(), resources.end(), |
| 255 &ThreatDetailsTest::ResourceLessThan); | 257 &ThreatDetailsTest::ResourceLessThan); |
| 256 | 258 |
| 257 std::vector<const ClientMalwareReportRequest::Resource*> expected; | 259 std::vector<const ClientSafeBrowsingReportRequest::Resource*> expected; |
| 258 for (int i = 0; i < report_pb.resources_size(); ++i) { | 260 for (int i = 0; i < report_pb.resources_size(); ++i) { |
| 259 const ClientMalwareReportRequest::Resource& resource = | 261 const ClientSafeBrowsingReportRequest::Resource& resource = |
| 260 expected_pb.resources(i); | 262 expected_pb.resources(i); |
| 261 expected.push_back(&resource); | 263 expected.push_back(&resource); |
| 262 } | 264 } |
| 263 std::sort(expected.begin(), expected.end(), | 265 std::sort(expected.begin(), expected.end(), |
| 264 &ThreatDetailsTest::ResourceLessThan); | 266 &ThreatDetailsTest::ResourceLessThan); |
| 265 | 267 |
| 266 for (uint32 i = 0; i < expected.size(); ++i) { | 268 for (uint32 i = 0; i < expected.size(); ++i) { |
| 267 VerifyResource(resources[i], expected[i]); | 269 VerifyResource(resources[i], expected[i]); |
| 268 } | 270 } |
| 269 | 271 |
| 270 EXPECT_EQ(expected_pb.complete(), report_pb.complete()); | 272 EXPECT_EQ(expected_pb.complete(), report_pb.complete()); |
| 271 } | 273 } |
| 272 | 274 |
| 273 void VerifyResource(const ClientMalwareReportRequest::Resource* resource, | 275 void VerifyResource( |
| 274 const ClientMalwareReportRequest::Resource* expected) { | 276 const ClientSafeBrowsingReportRequest::Resource* resource, |
| 277 const ClientSafeBrowsingReportRequest::Resource* expected) { |
| 275 EXPECT_EQ(expected->id(), resource->id()); | 278 EXPECT_EQ(expected->id(), resource->id()); |
| 276 EXPECT_EQ(expected->url(), resource->url()); | 279 EXPECT_EQ(expected->url(), resource->url()); |
| 277 EXPECT_EQ(expected->parent_id(), resource->parent_id()); | 280 EXPECT_EQ(expected->parent_id(), resource->parent_id()); |
| 278 ASSERT_EQ(expected->child_ids_size(), resource->child_ids_size()); | 281 ASSERT_EQ(expected->child_ids_size(), resource->child_ids_size()); |
| 279 for (int i = 0; i < expected->child_ids_size(); i++) { | 282 for (int i = 0; i < expected->child_ids_size(); i++) { |
| 280 EXPECT_EQ(expected->child_ids(i), resource->child_ids(i)); | 283 EXPECT_EQ(expected->child_ids(i), resource->child_ids(i)); |
| 281 } | 284 } |
| 282 | 285 |
| 283 // Verify HTTP Responses | 286 // Verify HTTP Responses |
| 284 if (expected->has_response()) { | 287 if (expected->has_response()) { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 315 redirects->push_back(url); | 318 redirects->push_back(url); |
| 316 history_service()->AddPage(url, base::Time::Now(), | 319 history_service()->AddPage(url, base::Time::Now(), |
| 317 reinterpret_cast<history::ContextID>(1), 0, | 320 reinterpret_cast<history::ContextID>(1), 0, |
| 318 GURL(), *redirects, ui::PAGE_TRANSITION_TYPED, | 321 GURL(), *redirects, ui::PAGE_TRANSITION_TYPED, |
| 319 history::SOURCE_BROWSED, false); | 322 history::SOURCE_BROWSED, false); |
| 320 } | 323 } |
| 321 | 324 |
| 322 scoped_refptr<MockSafeBrowsingUIManager> ui_manager_; | 325 scoped_refptr<MockSafeBrowsingUIManager> ui_manager_; |
| 323 }; | 326 }; |
| 324 | 327 |
| 325 // Tests creating a simple malware report. | 328 // Tests creating a simple threat report of a malware URL. |
| 326 TEST_F(ThreatDetailsTest, MalwareSubResource) { | 329 TEST_F(ThreatDetailsTest, ThreatSubResource) { |
| 327 // Start a load. | 330 // Start a load. |
| 328 controller().LoadURL( | 331 controller().LoadURL( |
| 329 GURL(kLandingURL), | 332 GURL(kLandingURL), |
| 330 content::Referrer(GURL(kReferrerURL), blink::WebReferrerPolicyDefault), | 333 content::Referrer(GURL(kReferrerURL), blink::WebReferrerPolicyDefault), |
| 331 ui::PAGE_TRANSITION_TYPED, std::string()); | 334 ui::PAGE_TRANSITION_TYPED, std::string()); |
| 332 | 335 |
| 333 UnsafeResource resource; | 336 UnsafeResource resource; |
| 334 InitResource(&resource, true, GURL(kMalwareURL)); | 337 InitResource(&resource, SB_THREAT_TYPE_URL_MALWARE, true, GURL(kThreatURL)); |
| 335 | 338 |
| 336 scoped_refptr<ThreatDetailsWrap> report = | 339 scoped_refptr<ThreatDetailsWrap> report = |
| 337 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, NULL); | 340 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, NULL); |
| 338 | 341 |
| 339 std::string serialized = WaitForSerializedReport( | 342 std::string serialized = WaitForSerializedReport( |
| 340 report.get(), true /* did_proceed*/, 1 /* num_visit */); | 343 report.get(), true /* did_proceed*/, 1 /* num_visit */); |
| 341 | 344 |
| 342 ClientMalwareReportRequest actual; | 345 ClientSafeBrowsingReportRequest actual; |
| 343 actual.ParseFromString(serialized); | 346 actual.ParseFromString(serialized); |
| 344 | 347 |
| 345 ClientMalwareReportRequest expected; | 348 ClientSafeBrowsingReportRequest expected; |
| 346 expected.set_malware_url(kMalwareURL); | 349 expected.set_type(ClientSafeBrowsingReportRequest::URL_MALWARE); |
| 350 expected.set_url(kThreatURL); |
| 347 expected.set_page_url(kLandingURL); | 351 expected.set_page_url(kLandingURL); |
| 348 // Note that the referrer policy is not actually enacted here, since that's | 352 // Note that the referrer policy is not actually enacted here, since that's |
| 349 // done in Blink. | 353 // done in Blink. |
| 350 expected.set_referrer_url(kReferrerURL); | 354 expected.set_referrer_url(kReferrerURL); |
| 351 expected.set_did_proceed(true); | 355 expected.set_did_proceed(true); |
| 352 expected.set_repeat_visit(true); | 356 expected.set_repeat_visit(true); |
| 353 | 357 |
| 354 ClientMalwareReportRequest::Resource* pb_resource = expected.add_resources(); | 358 ClientSafeBrowsingReportRequest::Resource* pb_resource = |
| 359 expected.add_resources(); |
| 355 pb_resource->set_id(0); | 360 pb_resource->set_id(0); |
| 356 pb_resource->set_url(kLandingURL); | 361 pb_resource->set_url(kLandingURL); |
| 357 pb_resource = expected.add_resources(); | 362 pb_resource = expected.add_resources(); |
| 358 pb_resource->set_id(1); | 363 pb_resource->set_id(1); |
| 359 pb_resource->set_url(kMalwareURL); | 364 pb_resource->set_url(kThreatURL); |
| 360 pb_resource = expected.add_resources(); | 365 pb_resource = expected.add_resources(); |
| 361 pb_resource->set_id(2); | 366 pb_resource->set_id(2); |
| 362 pb_resource->set_url(kReferrerURL); | 367 pb_resource->set_url(kReferrerURL); |
| 363 | 368 |
| 364 VerifyResults(actual, expected); | 369 VerifyResults(actual, expected); |
| 365 } | 370 } |
| 366 | 371 |
| 367 // Tests creating a simple malware report where the subresource has a | 372 // Tests creating a simple threat report of a phishing page where the |
| 368 // different original_url. | 373 // subresource has a different original_url. |
| 369 TEST_F(ThreatDetailsTest, MalwareSubResourceWithOriginalUrl) { | 374 TEST_F(ThreatDetailsTest, ThreatSubResourceWithOriginalUrl) { |
| 370 controller().LoadURL(GURL(kLandingURL), content::Referrer(), | 375 controller().LoadURL(GURL(kLandingURL), content::Referrer(), |
| 371 ui::PAGE_TRANSITION_TYPED, std::string()); | 376 ui::PAGE_TRANSITION_TYPED, std::string()); |
| 372 | 377 |
| 373 UnsafeResource resource; | 378 UnsafeResource resource; |
| 374 InitResource(&resource, true, GURL(kMalwareURL)); | 379 InitResource(&resource, SB_THREAT_TYPE_URL_PHISHING, true, GURL(kThreatURL)); |
| 375 resource.original_url = GURL(kOriginalLandingURL); | 380 resource.original_url = GURL(kOriginalLandingURL); |
| 376 | 381 |
| 377 scoped_refptr<ThreatDetailsWrap> report = | 382 scoped_refptr<ThreatDetailsWrap> report = |
| 378 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, NULL); | 383 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, NULL); |
| 379 | 384 |
| 380 std::string serialized = WaitForSerializedReport( | 385 std::string serialized = WaitForSerializedReport( |
| 381 report.get(), false /* did_proceed*/, 1 /* num_visit */); | 386 report.get(), false /* did_proceed*/, 1 /* num_visit */); |
| 382 | 387 |
| 383 ClientMalwareReportRequest actual; | 388 ClientSafeBrowsingReportRequest actual; |
| 384 actual.ParseFromString(serialized); | 389 actual.ParseFromString(serialized); |
| 385 | 390 |
| 386 ClientMalwareReportRequest expected; | 391 ClientSafeBrowsingReportRequest expected; |
| 387 expected.set_malware_url(kMalwareURL); | 392 expected.set_type(ClientSafeBrowsingReportRequest::URL_PHISHING); |
| 393 expected.set_url(kThreatURL); |
| 388 expected.set_page_url(kLandingURL); | 394 expected.set_page_url(kLandingURL); |
| 389 expected.set_referrer_url(""); | 395 expected.set_referrer_url(""); |
| 390 expected.set_did_proceed(false); | 396 expected.set_did_proceed(false); |
| 391 expected.set_repeat_visit(true); | 397 expected.set_repeat_visit(true); |
| 392 | 398 |
| 393 ClientMalwareReportRequest::Resource* pb_resource = expected.add_resources(); | 399 ClientSafeBrowsingReportRequest::Resource* pb_resource = |
| 400 expected.add_resources(); |
| 394 pb_resource->set_id(0); | 401 pb_resource->set_id(0); |
| 395 pb_resource->set_url(kLandingURL); | 402 pb_resource->set_url(kLandingURL); |
| 396 | 403 |
| 397 pb_resource = expected.add_resources(); | 404 pb_resource = expected.add_resources(); |
| 398 pb_resource->set_id(1); | 405 pb_resource->set_id(1); |
| 399 pb_resource->set_url(kOriginalLandingURL); | 406 pb_resource->set_url(kOriginalLandingURL); |
| 400 | 407 |
| 401 pb_resource = expected.add_resources(); | 408 pb_resource = expected.add_resources(); |
| 402 pb_resource->set_id(2); | 409 pb_resource->set_id(2); |
| 403 pb_resource->set_url(kMalwareURL); | 410 pb_resource->set_url(kThreatURL); |
| 404 // The Resource for kMalwareUrl should have the Resource for | 411 // The Resource for kThreatURL should have the Resource for |
| 405 // kOriginalLandingURL (with id 1) as parent. | 412 // kOriginalLandingURL (with id 1) as parent. |
| 406 pb_resource->set_parent_id(1); | 413 pb_resource->set_parent_id(1); |
| 407 | 414 |
| 408 VerifyResults(actual, expected); | 415 VerifyResults(actual, expected); |
| 409 } | 416 } |
| 410 | 417 |
| 411 // Tests creating a malware report with data from the renderer. | 418 // Tests creating a threat report of a UwS page with data from the renderer. |
| 412 TEST_F(ThreatDetailsTest, MalwareDOMDetails) { | 419 TEST_F(ThreatDetailsTest, ThreatDOMDetails) { |
| 413 controller().LoadURL(GURL(kLandingURL), content::Referrer(), | 420 controller().LoadURL(GURL(kLandingURL), content::Referrer(), |
| 414 ui::PAGE_TRANSITION_TYPED, std::string()); | 421 ui::PAGE_TRANSITION_TYPED, std::string()); |
| 415 | 422 |
| 416 UnsafeResource resource; | 423 UnsafeResource resource; |
| 417 InitResource(&resource, true, GURL(kMalwareURL)); | 424 InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED, true, GURL(kThreatURL)); |
| 418 | 425 |
| 419 scoped_refptr<ThreatDetailsWrap> report = | 426 scoped_refptr<ThreatDetailsWrap> report = |
| 420 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, NULL); | 427 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, NULL); |
| 421 | 428 |
| 422 // Send a message from the DOM, with 2 nodes, a parent and a child. | 429 // Send a message from the DOM, with 2 nodes, a parent and a child. |
| 423 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node> params; | 430 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> params; |
| 424 SafeBrowsingHostMsg_MalwareDOMDetails_Node child_node; | 431 SafeBrowsingHostMsg_ThreatDOMDetails_Node child_node; |
| 425 child_node.url = GURL(kDOMChildURL); | 432 child_node.url = GURL(kDOMChildURL); |
| 426 child_node.tag_name = "iframe"; | 433 child_node.tag_name = "iframe"; |
| 427 child_node.parent = GURL(kDOMParentURL); | 434 child_node.parent = GURL(kDOMParentURL); |
| 428 params.push_back(child_node); | 435 params.push_back(child_node); |
| 429 SafeBrowsingHostMsg_MalwareDOMDetails_Node parent_node; | 436 SafeBrowsingHostMsg_ThreatDOMDetails_Node parent_node; |
| 430 parent_node.url = GURL(kDOMParentURL); | 437 parent_node.url = GURL(kDOMParentURL); |
| 431 parent_node.children.push_back(GURL(kDOMChildURL)); | 438 parent_node.children.push_back(GURL(kDOMChildURL)); |
| 432 params.push_back(parent_node); | 439 params.push_back(parent_node); |
| 433 report->OnReceivedThreatDOMDetails(params); | 440 report->OnReceivedThreatDOMDetails(params); |
| 434 | 441 |
| 435 std::string serialized = WaitForSerializedReport( | 442 std::string serialized = WaitForSerializedReport( |
| 436 report.get(), false /* did_proceed*/, 0 /* num_visit */); | 443 report.get(), false /* did_proceed*/, 0 /* num_visit */); |
| 437 ClientMalwareReportRequest actual; | 444 ClientSafeBrowsingReportRequest actual; |
| 438 actual.ParseFromString(serialized); | 445 actual.ParseFromString(serialized); |
| 439 | 446 |
| 440 ClientMalwareReportRequest expected; | 447 ClientSafeBrowsingReportRequest expected; |
| 441 expected.set_malware_url(kMalwareURL); | 448 expected.set_type(ClientSafeBrowsingReportRequest::URL_UNWANTED); |
| 449 expected.set_url(kThreatURL); |
| 442 expected.set_page_url(kLandingURL); | 450 expected.set_page_url(kLandingURL); |
| 443 expected.set_referrer_url(""); | 451 expected.set_referrer_url(""); |
| 444 expected.set_did_proceed(false); | 452 expected.set_did_proceed(false); |
| 445 expected.set_repeat_visit(false); | 453 expected.set_repeat_visit(false); |
| 446 | 454 |
| 447 ClientMalwareReportRequest::Resource* pb_resource = expected.add_resources(); | 455 ClientSafeBrowsingReportRequest::Resource* pb_resource = |
| 456 expected.add_resources(); |
| 448 pb_resource->set_id(0); | 457 pb_resource->set_id(0); |
| 449 pb_resource->set_url(kLandingURL); | 458 pb_resource->set_url(kLandingURL); |
| 450 | 459 |
| 451 pb_resource = expected.add_resources(); | 460 pb_resource = expected.add_resources(); |
| 452 pb_resource->set_id(1); | 461 pb_resource->set_id(1); |
| 453 pb_resource->set_url(kMalwareURL); | 462 pb_resource->set_url(kThreatURL); |
| 454 | 463 |
| 455 pb_resource = expected.add_resources(); | 464 pb_resource = expected.add_resources(); |
| 456 pb_resource->set_id(2); | 465 pb_resource->set_id(2); |
| 457 pb_resource->set_url(kDOMChildURL); | 466 pb_resource->set_url(kDOMChildURL); |
| 458 pb_resource->set_parent_id(3); | 467 pb_resource->set_parent_id(3); |
| 459 | 468 |
| 460 pb_resource = expected.add_resources(); | 469 pb_resource = expected.add_resources(); |
| 461 pb_resource->set_id(3); | 470 pb_resource->set_id(3); |
| 462 pb_resource->set_url(kDOMParentURL); | 471 pb_resource->set_url(kDOMParentURL); |
| 463 pb_resource->add_child_ids(2); | 472 pb_resource->add_child_ids(2); |
| 464 expected.set_complete(false); // Since the cache was missing. | 473 expected.set_complete(false); // Since the cache was missing. |
| 465 | 474 |
| 466 VerifyResults(actual, expected); | 475 VerifyResults(actual, expected); |
| 467 } | 476 } |
| 468 | 477 |
| 469 // Tests creating a malware report where there are redirect urls to an unsafe | 478 // Tests creating a threat report of a malware page where there are redirect |
| 470 // resource url | 479 // urls to an unsafe resource url. |
| 471 TEST_F(ThreatDetailsTest, MalwareWithRedirectUrl) { | 480 TEST_F(ThreatDetailsTest, ThreatWithRedirectUrl) { |
| 472 controller().LoadURL(GURL(kLandingURL), content::Referrer(), | 481 controller().LoadURL(GURL(kLandingURL), content::Referrer(), |
| 473 ui::PAGE_TRANSITION_TYPED, std::string()); | 482 ui::PAGE_TRANSITION_TYPED, std::string()); |
| 474 | 483 |
| 475 UnsafeResource resource; | 484 UnsafeResource resource; |
| 476 InitResource(&resource, true, GURL(kMalwareURL)); | 485 InitResource(&resource, SB_THREAT_TYPE_URL_MALWARE, true, GURL(kThreatURL)); |
| 477 resource.original_url = GURL(kOriginalLandingURL); | 486 resource.original_url = GURL(kOriginalLandingURL); |
| 478 | 487 |
| 479 // add some redirect urls | 488 // add some redirect urls |
| 480 resource.redirect_urls.push_back(GURL(kFirstRedirectURL)); | 489 resource.redirect_urls.push_back(GURL(kFirstRedirectURL)); |
| 481 resource.redirect_urls.push_back(GURL(kSecondRedirectURL)); | 490 resource.redirect_urls.push_back(GURL(kSecondRedirectURL)); |
| 482 resource.redirect_urls.push_back(GURL(kMalwareURL)); | 491 resource.redirect_urls.push_back(GURL(kThreatURL)); |
| 483 | 492 |
| 484 scoped_refptr<ThreatDetailsWrap> report = | 493 scoped_refptr<ThreatDetailsWrap> report = |
| 485 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, NULL); | 494 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, NULL); |
| 486 | 495 |
| 487 std::string serialized = WaitForSerializedReport( | 496 std::string serialized = WaitForSerializedReport( |
| 488 report.get(), true /* did_proceed*/, 0 /* num_visit */); | 497 report.get(), true /* did_proceed*/, 0 /* num_visit */); |
| 489 ClientMalwareReportRequest actual; | 498 ClientSafeBrowsingReportRequest actual; |
| 490 actual.ParseFromString(serialized); | 499 actual.ParseFromString(serialized); |
| 491 | 500 |
| 492 ClientMalwareReportRequest expected; | 501 ClientSafeBrowsingReportRequest expected; |
| 493 expected.set_malware_url(kMalwareURL); | 502 expected.set_type(ClientSafeBrowsingReportRequest::URL_MALWARE); |
| 503 expected.set_url(kThreatURL); |
| 494 expected.set_page_url(kLandingURL); | 504 expected.set_page_url(kLandingURL); |
| 495 expected.set_referrer_url(""); | 505 expected.set_referrer_url(""); |
| 496 expected.set_did_proceed(true); | 506 expected.set_did_proceed(true); |
| 497 expected.set_repeat_visit(false); | 507 expected.set_repeat_visit(false); |
| 498 | 508 |
| 499 ClientMalwareReportRequest::Resource* pb_resource = expected.add_resources(); | 509 ClientSafeBrowsingReportRequest::Resource* pb_resource = |
| 510 expected.add_resources(); |
| 500 pb_resource->set_id(0); | 511 pb_resource->set_id(0); |
| 501 pb_resource->set_url(kLandingURL); | 512 pb_resource->set_url(kLandingURL); |
| 502 | 513 |
| 503 pb_resource = expected.add_resources(); | 514 pb_resource = expected.add_resources(); |
| 504 pb_resource->set_id(1); | 515 pb_resource->set_id(1); |
| 505 pb_resource->set_url(kOriginalLandingURL); | 516 pb_resource->set_url(kOriginalLandingURL); |
| 506 | 517 |
| 507 pb_resource = expected.add_resources(); | 518 pb_resource = expected.add_resources(); |
| 508 pb_resource->set_id(2); | 519 pb_resource->set_id(2); |
| 509 pb_resource->set_url(kMalwareURL); | 520 pb_resource->set_url(kThreatURL); |
| 510 pb_resource->set_parent_id(4); | 521 pb_resource->set_parent_id(4); |
| 511 | 522 |
| 512 pb_resource = expected.add_resources(); | 523 pb_resource = expected.add_resources(); |
| 513 pb_resource->set_id(3); | 524 pb_resource->set_id(3); |
| 514 pb_resource->set_url(kFirstRedirectURL); | 525 pb_resource->set_url(kFirstRedirectURL); |
| 515 pb_resource->set_parent_id(1); | 526 pb_resource->set_parent_id(1); |
| 516 | 527 |
| 517 pb_resource = expected.add_resources(); | 528 pb_resource = expected.add_resources(); |
| 518 pb_resource->set_id(4); | 529 pb_resource->set_id(4); |
| 519 pb_resource->set_url(kSecondRedirectURL); | 530 pb_resource->set_url(kSecondRedirectURL); |
| 520 pb_resource->set_parent_id(3); | 531 pb_resource->set_parent_id(3); |
| 521 | 532 |
| 522 VerifyResults(actual, expected); | 533 VerifyResults(actual, expected); |
| 523 } | 534 } |
| 524 | 535 |
| 525 // Tests the interaction with the HTTP cache. | 536 // Tests the interaction with the HTTP cache. |
| 526 TEST_F(ThreatDetailsTest, HTTPCache) { | 537 TEST_F(ThreatDetailsTest, HTTPCache) { |
| 527 controller().LoadURL(GURL(kLandingURL), content::Referrer(), | 538 controller().LoadURL(GURL(kLandingURL), content::Referrer(), |
| 528 ui::PAGE_TRANSITION_TYPED, std::string()); | 539 ui::PAGE_TRANSITION_TYPED, std::string()); |
| 529 | 540 |
| 530 UnsafeResource resource; | 541 UnsafeResource resource; |
| 531 InitResource(&resource, true, GURL(kMalwareURL)); | 542 InitResource(&resource, SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL, true, |
| 543 GURL(kThreatURL)); |
| 532 | 544 |
| 533 scoped_refptr<ThreatDetailsWrap> report = | 545 scoped_refptr<ThreatDetailsWrap> report = |
| 534 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, | 546 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, |
| 535 profile()->GetRequestContext()); | 547 profile()->GetRequestContext()); |
| 536 | 548 |
| 537 BrowserThread::PostTask( | 549 BrowserThread::PostTask( |
| 538 BrowserThread::IO, FROM_HERE, | 550 BrowserThread::IO, FROM_HERE, |
| 539 base::Bind(&FillCache, | 551 base::Bind(&FillCache, |
| 540 make_scoped_refptr(profile()->GetRequestContext()))); | 552 make_scoped_refptr(profile()->GetRequestContext()))); |
| 541 | 553 |
| 542 // The cache collection starts after the IPC from the DOM is fired. | 554 // The cache collection starts after the IPC from the DOM is fired. |
| 543 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node> params; | 555 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> params; |
| 544 report->OnReceivedThreatDOMDetails(params); | 556 report->OnReceivedThreatDOMDetails(params); |
| 545 | 557 |
| 546 // Let the cache callbacks complete. | 558 // Let the cache callbacks complete. |
| 547 base::RunLoop().RunUntilIdle(); | 559 base::RunLoop().RunUntilIdle(); |
| 548 | 560 |
| 549 DVLOG(1) << "Getting serialized report"; | 561 DVLOG(1) << "Getting serialized report"; |
| 550 std::string serialized = WaitForSerializedReport( | 562 std::string serialized = WaitForSerializedReport( |
| 551 report.get(), true /* did_proceed*/, -1 /* num_visit */); | 563 report.get(), true /* did_proceed*/, -1 /* num_visit */); |
| 552 ClientMalwareReportRequest actual; | 564 ClientSafeBrowsingReportRequest actual; |
| 553 actual.ParseFromString(serialized); | 565 actual.ParseFromString(serialized); |
| 554 | 566 |
| 555 ClientMalwareReportRequest expected; | 567 ClientSafeBrowsingReportRequest expected; |
| 556 expected.set_malware_url(kMalwareURL); | 568 expected.set_type(ClientSafeBrowsingReportRequest::CLIENT_SIDE_PHISHING_URL); |
| 569 expected.set_url(kThreatURL); |
| 557 expected.set_page_url(kLandingURL); | 570 expected.set_page_url(kLandingURL); |
| 558 expected.set_referrer_url(""); | 571 expected.set_referrer_url(""); |
| 559 expected.set_did_proceed(true); | 572 expected.set_did_proceed(true); |
| 560 | 573 |
| 561 ClientMalwareReportRequest::Resource* pb_resource = expected.add_resources(); | 574 ClientSafeBrowsingReportRequest::Resource* pb_resource = |
| 575 expected.add_resources(); |
| 562 pb_resource->set_id(0); | 576 pb_resource->set_id(0); |
| 563 pb_resource->set_url(kLandingURL); | 577 pb_resource->set_url(kLandingURL); |
| 564 safe_browsing::ClientMalwareReportRequest::HTTPResponse* pb_response = | 578 safe_browsing::ClientSafeBrowsingReportRequest::HTTPResponse* pb_response = |
| 565 pb_resource->mutable_response(); | 579 pb_resource->mutable_response(); |
| 566 pb_response->mutable_firstline()->set_code(200); | 580 pb_response->mutable_firstline()->set_code(200); |
| 567 safe_browsing::ClientMalwareReportRequest::HTTPHeader* pb_header = | 581 safe_browsing::ClientSafeBrowsingReportRequest::HTTPHeader* pb_header = |
| 568 pb_response->add_headers(); | 582 pb_response->add_headers(); |
| 569 pb_header->set_name("Content-Type"); | 583 pb_header->set_name("Content-Type"); |
| 570 pb_header->set_value("text/html"); | 584 pb_header->set_value("text/html"); |
| 571 pb_header = pb_response->add_headers(); | 585 pb_header = pb_response->add_headers(); |
| 572 pb_header->set_name("Content-Length"); | 586 pb_header->set_name("Content-Length"); |
| 573 pb_header->set_value("1024"); | 587 pb_header->set_value("1024"); |
| 574 pb_header = pb_response->add_headers(); | 588 pb_header = pb_response->add_headers(); |
| 575 pb_header->set_name("Set-Cookie"); | 589 pb_header->set_name("Set-Cookie"); |
| 576 pb_header->set_value(""); // The cookie is dropped. | 590 pb_header->set_value(""); // The cookie is dropped. |
| 577 pb_response->set_body(kLandingData); | 591 pb_response->set_body(kLandingData); |
| 578 pb_response->set_bodylength(47); | 592 std::string landing_data(kLandingData); |
| 579 pb_response->set_bodydigest("5abb4e63d806ec2c16a40b2699700554"); | 593 pb_response->set_bodylength(landing_data.size()); |
| 594 pb_response->set_bodydigest(base::MD5String(landing_data)); |
| 580 pb_response->set_remote_ip("1.2.3.4:80"); | 595 pb_response->set_remote_ip("1.2.3.4:80"); |
| 581 | 596 |
| 582 pb_resource = expected.add_resources(); | 597 pb_resource = expected.add_resources(); |
| 583 pb_resource->set_id(1); | 598 pb_resource->set_id(1); |
| 584 pb_resource->set_url(kMalwareURL); | 599 pb_resource->set_url(kThreatURL); |
| 585 pb_response = pb_resource->mutable_response(); | 600 pb_response = pb_resource->mutable_response(); |
| 586 pb_response->mutable_firstline()->set_code(200); | 601 pb_response->mutable_firstline()->set_code(200); |
| 587 pb_header = pb_response->add_headers(); | 602 pb_header = pb_response->add_headers(); |
| 588 pb_header->set_name("Content-Type"); | 603 pb_header->set_name("Content-Type"); |
| 589 pb_header->set_value("image/jpeg"); | 604 pb_header->set_value("image/jpeg"); |
| 590 pb_response->set_body(kMalwareData); | 605 pb_response->set_body(kThreatData); |
| 591 pb_response->set_bodylength(10); | 606 std::string threat_data(kThreatData); |
| 592 pb_response->set_bodydigest("581373551c43d4cf33bfb3b26838ff95"); | 607 pb_response->set_bodylength(threat_data.size()); |
| 608 pb_response->set_bodydigest(base::MD5String(threat_data)); |
| 593 pb_response->set_remote_ip("1.2.3.4:80"); | 609 pb_response->set_remote_ip("1.2.3.4:80"); |
| 594 expected.set_complete(true); | 610 expected.set_complete(true); |
| 595 | 611 |
| 596 VerifyResults(actual, expected); | 612 VerifyResults(actual, expected); |
| 597 } | 613 } |
| 598 | 614 |
| 599 // Tests the interaction with the HTTP cache (where the cache is empty). | 615 // Tests the interaction with the HTTP cache (where the cache is empty). |
| 600 TEST_F(ThreatDetailsTest, HTTPCacheNoEntries) { | 616 TEST_F(ThreatDetailsTest, HTTPCacheNoEntries) { |
| 601 controller().LoadURL(GURL(kLandingURL), content::Referrer(), | 617 controller().LoadURL(GURL(kLandingURL), content::Referrer(), |
| 602 ui::PAGE_TRANSITION_TYPED, std::string()); | 618 ui::PAGE_TRANSITION_TYPED, std::string()); |
| 603 | 619 |
| 604 UnsafeResource resource; | 620 UnsafeResource resource; |
| 605 InitResource(&resource, true, GURL(kMalwareURL)); | 621 InitResource(&resource, SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL, true, |
| 622 GURL(kThreatURL)); |
| 606 | 623 |
| 607 scoped_refptr<ThreatDetailsWrap> report = | 624 scoped_refptr<ThreatDetailsWrap> report = |
| 608 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, | 625 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, |
| 609 profile()->GetRequestContext()); | 626 profile()->GetRequestContext()); |
| 610 | 627 |
| 611 // No call to FillCache | 628 // No call to FillCache |
| 612 | 629 |
| 613 // The cache collection starts after the IPC from the DOM is fired. | 630 // The cache collection starts after the IPC from the DOM is fired. |
| 614 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node> params; | 631 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> params; |
| 615 report->OnReceivedThreatDOMDetails(params); | 632 report->OnReceivedThreatDOMDetails(params); |
| 616 | 633 |
| 617 // Let the cache callbacks complete. | 634 // Let the cache callbacks complete. |
| 618 base::RunLoop().RunUntilIdle(); | 635 base::RunLoop().RunUntilIdle(); |
| 619 | 636 |
| 620 DVLOG(1) << "Getting serialized report"; | 637 DVLOG(1) << "Getting serialized report"; |
| 621 std::string serialized = WaitForSerializedReport( | 638 std::string serialized = WaitForSerializedReport( |
| 622 report.get(), false /* did_proceed*/, -1 /* num_visit */); | 639 report.get(), false /* did_proceed*/, -1 /* num_visit */); |
| 623 ClientMalwareReportRequest actual; | 640 ClientSafeBrowsingReportRequest actual; |
| 624 actual.ParseFromString(serialized); | 641 actual.ParseFromString(serialized); |
| 625 | 642 |
| 626 ClientMalwareReportRequest expected; | 643 ClientSafeBrowsingReportRequest expected; |
| 627 expected.set_malware_url(kMalwareURL); | 644 expected.set_type(ClientSafeBrowsingReportRequest::CLIENT_SIDE_MALWARE_URL); |
| 645 expected.set_url(kThreatURL); |
| 628 expected.set_page_url(kLandingURL); | 646 expected.set_page_url(kLandingURL); |
| 629 expected.set_referrer_url(""); | 647 expected.set_referrer_url(""); |
| 630 expected.set_did_proceed(false); | 648 expected.set_did_proceed(false); |
| 631 | 649 |
| 632 ClientMalwareReportRequest::Resource* pb_resource = expected.add_resources(); | 650 ClientSafeBrowsingReportRequest::Resource* pb_resource = |
| 651 expected.add_resources(); |
| 633 pb_resource->set_id(0); | 652 pb_resource->set_id(0); |
| 634 pb_resource->set_url(kLandingURL); | 653 pb_resource->set_url(kLandingURL); |
| 635 pb_resource = expected.add_resources(); | 654 pb_resource = expected.add_resources(); |
| 636 pb_resource->set_id(1); | 655 pb_resource->set_id(1); |
| 637 pb_resource->set_url(kMalwareURL); | 656 pb_resource->set_url(kThreatURL); |
| 638 expected.set_complete(true); | 657 expected.set_complete(true); |
| 639 | 658 |
| 640 VerifyResults(actual, expected); | 659 VerifyResults(actual, expected); |
| 641 } | 660 } |
| 642 | 661 |
| 643 // Test getting redirects from history service. | 662 // Test getting redirects from history service. |
| 644 TEST_F(ThreatDetailsTest, HistoryServiceUrls) { | 663 TEST_F(ThreatDetailsTest, HistoryServiceUrls) { |
| 645 // Add content to history service. | 664 // Add content to history service. |
| 646 // There are two redirect urls before reacing malware url: | 665 // There are two redirect urls before reacing malware url: |
| 647 // kFirstRedirectURL -> kSecondRedirectURL -> kMalwareURL | 666 // kFirstRedirectURL -> kSecondRedirectURL -> kThreatURL |
| 648 GURL baseurl(kMalwareURL); | 667 GURL baseurl(kThreatURL); |
| 649 history::RedirectList redirects; | 668 history::RedirectList redirects; |
| 650 redirects.push_back(GURL(kFirstRedirectURL)); | 669 redirects.push_back(GURL(kFirstRedirectURL)); |
| 651 redirects.push_back(GURL(kSecondRedirectURL)); | 670 redirects.push_back(GURL(kSecondRedirectURL)); |
| 652 AddPageToHistory(baseurl, &redirects); | 671 AddPageToHistory(baseurl, &redirects); |
| 653 // Wait for history service operation finished. | 672 // Wait for history service operation finished. |
| 654 profile()->BlockUntilHistoryProcessesPendingRequests(); | 673 profile()->BlockUntilHistoryProcessesPendingRequests(); |
| 655 | 674 |
| 656 controller().LoadURL(GURL(kLandingURL), content::Referrer(), | 675 controller().LoadURL(GURL(kLandingURL), content::Referrer(), |
| 657 ui::PAGE_TRANSITION_TYPED, std::string()); | 676 ui::PAGE_TRANSITION_TYPED, std::string()); |
| 658 | 677 |
| 659 UnsafeResource resource; | 678 UnsafeResource resource; |
| 660 InitResource(&resource, true, GURL(kMalwareURL)); | 679 InitResource(&resource, SB_THREAT_TYPE_URL_MALWARE, true, GURL(kThreatURL)); |
| 661 scoped_refptr<ThreatDetailsWrap> report = | 680 scoped_refptr<ThreatDetailsWrap> report = |
| 662 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, NULL); | 681 new ThreatDetailsWrap(ui_manager_.get(), web_contents(), resource, NULL); |
| 663 | 682 |
| 664 // The redirects collection starts after the IPC from the DOM is fired. | 683 // The redirects collection starts after the IPC from the DOM is fired. |
| 665 std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node> params; | 684 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> params; |
| 666 report->OnReceivedThreatDOMDetails(params); | 685 report->OnReceivedThreatDOMDetails(params); |
| 667 | 686 |
| 668 // Let the redirects callbacks complete. | 687 // Let the redirects callbacks complete. |
| 669 base::RunLoop().RunUntilIdle(); | 688 base::RunLoop().RunUntilIdle(); |
| 670 | 689 |
| 671 std::string serialized = WaitForSerializedReport( | 690 std::string serialized = WaitForSerializedReport( |
| 672 report.get(), true /* did_proceed*/, 1 /* num_visit */); | 691 report.get(), true /* did_proceed*/, 1 /* num_visit */); |
| 673 ClientMalwareReportRequest actual; | 692 ClientSafeBrowsingReportRequest actual; |
| 674 actual.ParseFromString(serialized); | 693 actual.ParseFromString(serialized); |
| 675 | 694 |
| 676 ClientMalwareReportRequest expected; | 695 ClientSafeBrowsingReportRequest expected; |
| 677 expected.set_malware_url(kMalwareURL); | 696 expected.set_type(ClientSafeBrowsingReportRequest::URL_MALWARE); |
| 697 expected.set_url(kThreatURL); |
| 678 expected.set_page_url(kLandingURL); | 698 expected.set_page_url(kLandingURL); |
| 679 expected.set_referrer_url(""); | 699 expected.set_referrer_url(""); |
| 680 expected.set_did_proceed(true); | 700 expected.set_did_proceed(true); |
| 681 expected.set_repeat_visit(true); | 701 expected.set_repeat_visit(true); |
| 682 | 702 |
| 683 ClientMalwareReportRequest::Resource* pb_resource = expected.add_resources(); | 703 ClientSafeBrowsingReportRequest::Resource* pb_resource = |
| 704 expected.add_resources(); |
| 684 pb_resource->set_id(0); | 705 pb_resource->set_id(0); |
| 685 pb_resource->set_url(kLandingURL); | 706 pb_resource->set_url(kLandingURL); |
| 686 pb_resource = expected.add_resources(); | 707 pb_resource = expected.add_resources(); |
| 687 pb_resource->set_id(1); | 708 pb_resource->set_id(1); |
| 688 pb_resource->set_parent_id(2); | 709 pb_resource->set_parent_id(2); |
| 689 pb_resource->set_url(kMalwareURL); | 710 pb_resource->set_url(kThreatURL); |
| 690 pb_resource = expected.add_resources(); | 711 pb_resource = expected.add_resources(); |
| 691 pb_resource->set_id(2); | 712 pb_resource->set_id(2); |
| 692 pb_resource->set_parent_id(3); | 713 pb_resource->set_parent_id(3); |
| 693 pb_resource->set_url(kSecondRedirectURL); | 714 pb_resource->set_url(kSecondRedirectURL); |
| 694 pb_resource = expected.add_resources(); | 715 pb_resource = expected.add_resources(); |
| 695 pb_resource->set_id(3); | 716 pb_resource->set_id(3); |
| 696 pb_resource->set_url(kFirstRedirectURL); | 717 pb_resource->set_url(kFirstRedirectURL); |
| 697 | 718 |
| 698 VerifyResults(actual, expected); | 719 VerifyResults(actual, expected); |
| 699 } | 720 } |
| OLD | NEW |