17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/safe_browsing/download_feedback.h" 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/file_util.h" 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/files/scoped_temp_dir.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/run_loop.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/single_thread_task_runner.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/safe_browsing/two_phase_uploader.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/safe_browsing/csd.pb.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "net/url_request/url_request_test_util.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace safe_browsing { 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace { 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class FakeUploader : public TwoPhaseUploader { 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FakeUploader(net::URLRequestContextGetter* url_request_context_getter, 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TaskRunner* file_task_runner, 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GURL& base_url, 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& metadata, 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::FilePath& file_path, 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const ProgressCallback& progress_callback, 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const FinishCallback& finish_callback); 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~FakeUploader() {} 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Start() OVERRIDE { 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) start_called_ = true; 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<base::TaskRunner> file_task_runner_; 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GURL base_url_; 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string metadata_; 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::FilePath file_path_; 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ProgressCallback progress_callback_; 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FinishCallback finish_callback_; 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool start_called_; 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)FakeUploader::FakeUploader( 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::URLRequestContextGetter* url_request_context_getter, 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TaskRunner* file_task_runner, 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GURL& base_url, 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& metadata, 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::FilePath& file_path, 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const ProgressCallback& progress_callback, 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const FinishCallback& finish_callback) 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : url_request_context_getter_(url_request_context_getter), 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) file_task_runner_(file_task_runner), 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base_url_(base_url), 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) metadata_(metadata), 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) file_path_(file_path), 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) progress_callback_(progress_callback), 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) finish_callback_(finish_callback), 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) start_called_(false) { 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class FakeUploaderFactory : public TwoPhaseUploaderFactory { 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FakeUploaderFactory() : uploader_(NULL) {} 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~FakeUploaderFactory() {} 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual TwoPhaseUploader* CreateTwoPhaseUploader( 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::URLRequestContextGetter* url_request_context_getter, 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TaskRunner* file_task_runner, 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GURL& base_url, 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& metadata, 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::FilePath& file_path, 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const TwoPhaseUploader::ProgressCallback& progress_callback, 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const TwoPhaseUploader::FinishCallback& finish_callback) OVERRIDE; 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FakeUploader* uploader_; 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TwoPhaseUploader* FakeUploaderFactory::CreateTwoPhaseUploader( 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::URLRequestContextGetter* url_request_context_getter, 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TaskRunner* file_task_runner, 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GURL& base_url, 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& metadata, 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::FilePath& file_path, 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const TwoPhaseUploader::ProgressCallback& progress_callback, 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const TwoPhaseUploader::FinishCallback& finish_callback) { 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(uploader_); 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) uploader_ = new FakeUploader(url_request_context_getter, file_task_runner, 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base_url, metadata, file_path, progress_callback, 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) finish_callback); 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return uploader_; 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class DownloadFeedbackTest : public testing::Test { 1037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DownloadFeedbackTest() 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : file_task_runner_(content::BrowserThread::GetMessageLoopProxyForThread( 1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content::BrowserThread::FILE)), 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) io_task_runner_(content::BrowserThread::GetMessageLoopProxyForThread( 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content::BrowserThread::IO)), 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) url_request_context_getter_( 1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new net::TestURLRequestContextGetter(io_task_runner_)), 1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback_finish_called_(false) { 1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_NE(io_task_runner_, file_task_runner_); 1137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void SetUp() OVERRIDE { 1167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) upload_file_path_ = temp_dir_.path().AppendASCII("test file"); 1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) upload_file_data_ = "data"; 1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(static_cast<int>(upload_file_data_.size()), 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::WriteFile(upload_file_path_, upload_file_data_.data(), 121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) upload_file_data_.size())); 1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TwoPhaseUploader::RegisterFactory(&two_phase_uploader_factory_); 1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void TearDown() OVERRIDE { 1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TwoPhaseUploader::RegisterFactory(NULL); 1277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FakeUploader* uploader() const { 1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return two_phase_uploader_factory_.uploader_; 1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void FinishCallback(DownloadFeedback* feedback) { 1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(feedback_finish_called_); 1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback_finish_called_ = true; 1367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) delete feedback; 1377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected: 1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::ScopedTempDir temp_dir_; 1417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::FilePath upload_file_path_; 1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string upload_file_data_; 1437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; 1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; 1467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FakeUploaderFactory two_phase_uploader_factory_; 1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<net::TestURLRequestContextGetter> url_request_context_getter_; 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool feedback_finish_called_; 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DownloadFeedbackTest, CompleteUpload) { 1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ClientDownloadReport expected_report_metadata; 1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->set_url("http://test"); 1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->set_length( 1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) upload_file_data_.size()); 1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->mutable_digests( 1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) )->set_sha1("hi"); 1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_response()->set_verdict( 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ClientDownloadResponse::DANGEROUS_HOST); 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string ping_request( 1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.download_request().SerializeAsString()); 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string ping_response( 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.download_response().SerializeAsString()); 1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DownloadFeedback* feedback = 167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DownloadFeedback::Create(url_request_context_getter_.get(), 168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch file_task_runner_.get(), 169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch upload_file_path_, 170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ping_request, 171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ping_response); 1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(uploader()); 1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback->Start(base::Bind(&DownloadFeedbackTest::FinishCallback, 1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Unretained(this), 1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback)); 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(uploader()); 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(feedback_finish_called_); 1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(uploader()->start_called_); 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(url_request_context_getter_, 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) uploader()->url_request_context_getter_); 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(file_task_runner_, uploader()->file_task_runner_); 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(upload_file_path_, uploader()->file_path_); 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(expected_report_metadata.SerializeAsString(), 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) uploader()->metadata_); 1870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(DownloadFeedback::kSbFeedbackURL, uploader()->base_url_.spec()); 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(upload_file_path_)); 1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(feedback_finish_called_); 1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) uploader()->finish_callback_.Run( 1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TwoPhaseUploader::STATE_SUCCESS, net::OK, 0, ""); 1947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(feedback_finish_called_); 1957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(base::PathExists(upload_file_path_)); 1977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DownloadFeedbackTest, CancelUpload) { 2007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ClientDownloadReport expected_report_metadata; 2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->set_url("http://test"); 2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->set_length( 2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) upload_file_data_.size()); 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->mutable_digests( 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) )->set_sha1("hi"); 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_response()->set_verdict( 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ClientDownloadResponse::DANGEROUS_HOST); 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string ping_request( 2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.download_request().SerializeAsString()); 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string ping_response( 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.download_response().SerializeAsString()); 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DownloadFeedback* feedback = 214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DownloadFeedback::Create(url_request_context_getter_.get(), 215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch file_task_runner_.get(), 216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch upload_file_path_, 217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ping_request, 218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ping_response); 2197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(uploader()); 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback->Start(base::Bind(&DownloadFeedbackTest::FinishCallback, 2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Unretained(this), 2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback)); 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(uploader()); 2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(feedback_finish_called_); 2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(uploader()->start_called_); 2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(upload_file_path_)); 2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) delete feedback; 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(feedback_finish_called_); 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(base::PathExists(upload_file_path_)); 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace safe_browsing 237