download_feedback_unittest.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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/command_line.h" 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/file_util.h" 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/files/scoped_temp_dir.h" 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/run_loop.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/single_thread_task_runner.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/safe_browsing/two_phase_uploader.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/safe_browsing/csd.pb.h" 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "net/url_request/url_request_test_util.h" 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace safe_browsing { 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace { 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class FakeUploader : public TwoPhaseUploader { 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FakeUploader(net::URLRequestContextGetter* url_request_context_getter, 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TaskRunner* file_task_runner, 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GURL& base_url, 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& metadata, 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::FilePath& file_path, 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const ProgressCallback& progress_callback, 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const FinishCallback& finish_callback); 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~FakeUploader() {} 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void Start() OVERRIDE { 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) start_called_ = true; 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<base::TaskRunner> file_task_runner_; 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GURL base_url_; 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string metadata_; 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::FilePath file_path_; 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ProgressCallback progress_callback_; 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FinishCallback finish_callback_; 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool start_called_; 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)FakeUploader::FakeUploader( 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::URLRequestContextGetter* url_request_context_getter, 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TaskRunner* file_task_runner, 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GURL& base_url, 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& metadata, 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::FilePath& file_path, 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const ProgressCallback& progress_callback, 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const FinishCallback& finish_callback) 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : url_request_context_getter_(url_request_context_getter), 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) file_task_runner_(file_task_runner), 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base_url_(base_url), 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) metadata_(metadata), 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) file_path_(file_path), 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) progress_callback_(progress_callback), 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) finish_callback_(finish_callback), 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) start_called_(false) { 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class FakeUploaderFactory : public TwoPhaseUploaderFactory { 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FakeUploaderFactory() : uploader_(NULL) {} 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~FakeUploaderFactory() {} 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual TwoPhaseUploader* CreateTwoPhaseUploader( 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::URLRequestContextGetter* url_request_context_getter, 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TaskRunner* file_task_runner, 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GURL& base_url, 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& metadata, 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::FilePath& file_path, 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const TwoPhaseUploader::ProgressCallback& progress_callback, 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const TwoPhaseUploader::FinishCallback& finish_callback) OVERRIDE; 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FakeUploader* uploader_; 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TwoPhaseUploader* FakeUploaderFactory::CreateTwoPhaseUploader( 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::URLRequestContextGetter* url_request_context_getter, 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TaskRunner* file_task_runner, 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GURL& base_url, 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& metadata, 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::FilePath& file_path, 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const TwoPhaseUploader::ProgressCallback& progress_callback, 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const TwoPhaseUploader::FinishCallback& finish_callback) { 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(uploader_); 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) uploader_ = new FakeUploader(url_request_context_getter, file_task_runner, 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base_url, metadata, file_path, progress_callback, 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) finish_callback); 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return uploader_; 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace 1037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class DownloadFeedbackTest : public testing::Test { 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DownloadFeedbackTest() 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : file_task_runner_(content::BrowserThread::GetMessageLoopProxyForThread( 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content::BrowserThread::FILE)), 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) io_task_runner_(content::BrowserThread::GetMessageLoopProxyForThread( 1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content::BrowserThread::IO)), 1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) url_request_context_getter_( 1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new net::TestURLRequestContextGetter(io_task_runner_)), 1137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback_finish_called_(false) { 1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_NE(io_task_runner_, file_task_runner_); 1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void SetUp() OVERRIDE { 1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) upload_file_path_ = temp_dir_.path().AppendASCII("test file"); 1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) upload_file_data_ = "data"; 1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(static_cast<int>(upload_file_data_.size()), 122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::WriteFile(upload_file_path_, upload_file_data_.data(), 123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) upload_file_data_.size())); 1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TwoPhaseUploader::RegisterFactory(&two_phase_uploader_factory_); 1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void TearDown() OVERRIDE { 1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TwoPhaseUploader::RegisterFactory(NULL); 1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FakeUploader* uploader() const { 1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return two_phase_uploader_factory_.uploader_; 1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void FinishCallback(DownloadFeedback* feedback) { 1367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(feedback_finish_called_); 1377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback_finish_called_ = true; 1387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) delete feedback; 1397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected: 1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::ScopedTempDir temp_dir_; 1437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::FilePath upload_file_path_; 1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string upload_file_data_; 1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 1467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; 1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FakeUploaderFactory two_phase_uploader_factory_; 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<net::TestURLRequestContextGetter> url_request_context_getter_; 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool feedback_finish_called_; 1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DownloadFeedbackTest, CompleteUpload) { 1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ClientDownloadReport expected_report_metadata; 1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->set_url("http://test"); 1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->set_length( 1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) upload_file_data_.size()); 1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->mutable_digests( 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) )->set_sha1("hi"); 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_response()->set_verdict( 1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ClientDownloadResponse::DANGEROUS_HOST); 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string ping_request( 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.download_request().SerializeAsString()); 1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string ping_response( 1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.download_response().SerializeAsString()); 1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const char kTestFeedbackURL[] = "https://example.com/test/upload"; 1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitchASCII( 1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) switches::kSbDownloadFeedbackURL, kTestFeedbackURL); 1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DownloadFeedback* feedback = 173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DownloadFeedback::Create(url_request_context_getter_.get(), 174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch file_task_runner_.get(), 175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch upload_file_path_, 176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ping_request, 177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ping_response); 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(uploader()); 1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback->Start(base::Bind(&DownloadFeedbackTest::FinishCallback, 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Unretained(this), 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback)); 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(uploader()); 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(feedback_finish_called_); 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(uploader()->start_called_); 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(url_request_context_getter_, 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) uploader()->url_request_context_getter_); 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(file_task_runner_, uploader()->file_task_runner_); 1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(upload_file_path_, uploader()->file_path_); 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(expected_report_metadata.SerializeAsString(), 1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) uploader()->metadata_); 1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(kTestFeedbackURL, uploader()->base_url_.spec()); 1947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(upload_file_path_)); 1967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(feedback_finish_called_); 1987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) uploader()->finish_callback_.Run( 1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TwoPhaseUploader::STATE_SUCCESS, net::OK, 0, ""); 2007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(feedback_finish_called_); 2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(base::PathExists(upload_file_path_)); 2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DownloadFeedbackTest, CancelUpload) { 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ClientDownloadReport expected_report_metadata; 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->set_url("http://test"); 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->set_length( 2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) upload_file_data_.size()); 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_request()->mutable_digests( 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) )->set_sha1("hi"); 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.mutable_download_response()->set_verdict( 2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ClientDownloadResponse::DANGEROUS_HOST); 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string ping_request( 2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.download_request().SerializeAsString()); 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string ping_response( 2177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_report_metadata.download_response().SerializeAsString()); 2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DownloadFeedback* feedback = 220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DownloadFeedback::Create(url_request_context_getter_.get(), 221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch file_task_runner_.get(), 222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch upload_file_path_, 223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ping_request, 224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ping_response); 2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(uploader()); 2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback->Start(base::Bind(&DownloadFeedbackTest::FinishCallback, 2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Unretained(this), 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback)); 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(uploader()); 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(feedback_finish_called_); 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(uploader()->start_called_); 2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(upload_file_path_)); 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) delete feedback; 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(feedback_finish_called_); 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(base::PathExists(upload_file_path_)); 2407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace safe_browsing 243