download_manager_impl_unittest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/scoped_temp_dir.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string16.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string_util.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/utf_string_conversions.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/download/byte_stream.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/download/download_create_info.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/download/download_file_factory.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/download/download_item_factory.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/download/download_item_impl.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/download/download_item_impl_delegate.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/download/download_manager_impl.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/download/download_request_handle.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/download/mock_download_file.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_context.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_interrupt_reasons.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_item.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_manager_delegate.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/mock_download_item.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_context.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_log.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock_mutant.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::AllOf; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::DoAll; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Eq; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Ref; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::ReturnRef; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArgPointee; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::StrictMock; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ByteStreamReader; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Matches a DownloadCreateInfo* that points to the same object as |info| and 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// has a |default_download_directory| that matches |download_directory|. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER_P2(DownloadCreateInfoWithDefaultPath, info, download_directory, "") { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arg == info && 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg->default_download_directory == download_directory; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockDownloadItemImpl : public DownloadItemImpl { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use history constructor for minimal base object. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl(DownloadItemImplDelegate* delegate) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : DownloadItemImpl(delegate, DownloadId(), 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadPersistentStoreInfo(), 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::BoundNetLog()) {} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockDownloadItemImpl() {} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD4(OnDownloadTargetDetermined, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(const FilePath&, TargetDisposition, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadDangerType, const FilePath&)); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(AddObserver, void(DownloadItem::Observer*)); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(RemoveObserver, void(DownloadItem::Observer*)); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(UpdateObservers, void()); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(CanShowInFolder, bool()); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(CanOpenDownload, bool()); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(ShouldOpenFileBasedOnExtension, bool()); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(OpenDownload, void()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(ShowDownloadInShell, void()); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(DangerousDownloadValidated, void()); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD3(UpdateProgress, void(int64, int64, const std::string&)); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(Cancel, void(bool)); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(MarkAsComplete, void()); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(OnAllDataSaved, void(const std::string&)); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(OnDownloadedFileRemoved, void()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(MaybeCompleteDownload, void()); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Start( 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DownloadFile> download_file) OVERRIDE { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStart(download_file.get()); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(MockStart, void(DownloadFile*)); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(Delete, void(DeleteReason)); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(Remove, void()); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD1(TimeRemaining, bool(base::TimeDelta*)); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(CurrentSpeed, int64()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(PercentComplete, int()); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(AllDataSaved, bool()); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(TogglePause, void()); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD1(MatchesQuery, bool(const string16& query)); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(IsPartialDownload, bool()); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(IsInProgress, bool()); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(IsCancelled, bool()); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(IsInterrupted, bool()); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(IsComplete, bool()); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetFullPath, const FilePath&()); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetTargetFilePath, const FilePath&()); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetTargetDisposition, TargetDisposition()); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(OnContentCheckCompleted, void(DownloadDangerType)); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetState, DownloadState()); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetUrlChain, const std::vector<GURL>&()); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(SetTotalBytes, void(int64)); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetURL, const GURL&()); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetOriginalUrl, const GURL&()); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetReferrerUrl, const GURL&()); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetSuggestedFilename, std::string()); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetContentDisposition, std::string()); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetMimeType, std::string()); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetOriginalMimeType, std::string()); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetReferrerCharset, std::string()); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetRemoteAddress, std::string()); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetTotalBytes, int64()); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetReceivedBytes, int64()); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetHashState, const std::string&()); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetHash, const std::string&()); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetId, int32()); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetGlobalId, DownloadId()); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetStartTime, base::Time()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetEndTime, base::Time()); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(SetIsPersisted, void()); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(IsPersisted, bool()); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(SetDbHandle, void(int64)); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetDbHandle, int64()); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetDownloadManager, DownloadManager*()); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(IsPaused, bool()); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetOpenWhenComplete, bool()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(SetOpenWhenComplete, void(bool)); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetFileExternallyRemoved, bool()); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetSafetyState, SafetyState()); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetDangerType, DownloadDangerType()); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(IsDangerous, bool()); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetAutoOpened, bool()); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetForcedFilePath, const FilePath&()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(HasUserGesture, bool()); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetTransitionType, PageTransition()); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(IsTemporary, bool()); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(SetIsTemporary, void(bool)); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(SetOpened, void(bool)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetOpened, bool()); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetLastModifiedTime, const std::string&()); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetETag, const std::string&()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetLastReason, DownloadInterruptReason()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetPersistentStoreInfo, DownloadPersistentStoreInfo()); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetBrowserContext, BrowserContext*()); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetWebContents, WebContents*()); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetFileNameToReportUser, FilePath()); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(SetDisplayName, void(const FilePath&)); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetUserVerifiedFilePath, FilePath()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(MockDownloadOpenForTesting, void()); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // May be called when vlog is on. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string DebugString(bool verbose) const OVERRIDE { return ""; } 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockDownloadManagerDelegate : public DownloadManagerDelegate { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadManagerDelegate(); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockDownloadManagerDelegate(); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(Shutdown, void()); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetNextId, DownloadId()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(DetermineDownloadTarget, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool(DownloadItem* item, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DownloadTargetCallback&)); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetAlternativeWebContentsToNotifyForDownload, WebContents*()); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(ShouldOpenFileBasedOnExtension, bool(const FilePath&)); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(ShouldCompleteDownload, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool(DownloadItem*, const base::Closure&)); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(ShouldOpenDownload, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool(DownloadItem*, const DownloadOpenDelayedCallback&)); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GenerateFileHash, bool()); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(AddItemToPersistentStore, void(DownloadItem*)); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(UpdateItemInPersistentStore, void(DownloadItem*)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(UpdatePathForItemInPersistentStore, 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(DownloadItem*, const FilePath&)); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(RemoveItemFromPersistentStore, void(DownloadItem*)); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(RemoveItemsFromPersistentStoreBetween, void( 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time remove_begin, base::Time remove_end)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD4(GetSaveDir, void(BrowserContext*, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath*, FilePath*, bool*)); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD5(ChooseSavePath, void( 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents*, const FilePath&, const FilePath::StringType&, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool, const SavePackagePathPickedCallback&)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockDownloadManagerDelegate::MockDownloadManagerDelegate() {} 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockDownloadManagerDelegate::~MockDownloadManagerDelegate() {} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockDownloadItemFactory 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public DownloadItemFactory, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public base::SupportsWeakPtr<MockDownloadItemFactory> { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemFactory(); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockDownloadItemFactory(); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Access to map of created items. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(rdsmith): Could add type (save page, persisted, etc.) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // functionality if it's ever needed by consumers. 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns NULL if no item of that id is present. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl* GetItem(int id); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove and return an item made by the factory. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Generally used during teardown. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl* PopItem(); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should be called when the item of this id is removed so that 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we don't keep dangling pointers. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveItem(int id); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden methods from DownloadItemFactory. 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual DownloadItemImpl* CreatePersistedItem( 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemImplDelegate* delegate, 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadId download_id, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DownloadPersistentStoreInfo& info, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::BoundNetLog& bound_net_log) OVERRIDE; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual DownloadItemImpl* CreateActiveItem( 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemImplDelegate* delegate, 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DownloadCreateInfo& info, 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DownloadRequestHandleInterface> request_handle, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::BoundNetLog& bound_net_log) OVERRIDE; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual DownloadItemImpl* CreateSavePageItem( 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemImplDelegate* delegate, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& path, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadId download_id, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& mime_type, 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::BoundNetLog& bound_net_log) OVERRIDE; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<int32, MockDownloadItemImpl*> items_; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemImplDelegate item_delegate_; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockDownloadItemFactory); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockDownloadItemFactory::MockDownloadItemFactory() {} 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockDownloadItemFactory::~MockDownloadItemFactory() {} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockDownloadItemImpl* MockDownloadItemFactory::GetItem(int id) { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (items_.find(id) == items_.end()) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return items_[id]; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockDownloadItemImpl* MockDownloadItemFactory::PopItem() { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (items_.empty()) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<int32, MockDownloadItemImpl*>::iterator first_item 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) = items_.begin(); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl* result = first_item->second; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items_.erase(first_item); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockDownloadItemFactory::RemoveItem(int id) { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(items_.find(id) != items_.end()); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items_.erase(id); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadItemImpl* MockDownloadItemFactory::CreatePersistedItem( 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemImplDelegate* delegate, 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadId download_id, 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DownloadPersistentStoreInfo& info, 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::BoundNetLog& bound_net_log) { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int local_id = download_id.local(); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(items_.find(local_id) == items_.end()); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl* result = 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new StrictMock<MockDownloadItemImpl>(&item_delegate_); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*result, GetId()) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(local_id)); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items_[local_id] = result; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadItemImpl* MockDownloadItemFactory::CreateActiveItem( 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemImplDelegate* delegate, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DownloadCreateInfo& info, 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DownloadRequestHandleInterface> request_handle, 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::BoundNetLog& bound_net_log) { 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int local_id = info.download_id.local(); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(items_.find(local_id) == items_.end()); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl* result = 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new StrictMock<MockDownloadItemImpl>(&item_delegate_); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*result, GetId()) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(local_id)); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*result, GetGlobalId()) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(DownloadId(delegate, local_id))); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items_[local_id] = result; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Active items are created and then immediately are called to start 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the download. 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*result, MockStart(_)); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadItemImpl* MockDownloadItemFactory::CreateSavePageItem( 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItemImplDelegate* delegate, 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& path, 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadId download_id, 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& mime_type, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::BoundNetLog& bound_net_log) { 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int local_id = download_id.local(); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(items_.find(local_id) == items_.end()); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl* result = 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new StrictMock<MockDownloadItemImpl>(&item_delegate_); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*result, GetId()) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(local_id)); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items_[local_id] = result; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockDownloadFileFactory 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public DownloadFileFactory, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public base::SupportsWeakPtr<MockDownloadFileFactory> { 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadFileFactory() {} 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockDownloadFileFactory() {} 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden method from DownloadFileFactory 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD8(MockCreateFile, DownloadFile*( 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DownloadSaveInfo&, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath&, 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL&, const GURL&, bool, 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ByteStreamReader*, 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::BoundNetLog&, 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtr<DownloadDestinationObserver>)); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual DownloadFile* CreateFile( 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DownloadSaveInfo> save_info, 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& default_download_directory, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& referrer_url, 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool calculate_hash, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ByteStreamReader> stream, 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::BoundNetLog& bound_net_log, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtr<DownloadDestinationObserver> observer) { 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return MockCreateFile(*save_info.get(), default_download_directory, url, 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrer_url, calculate_hash, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stream.get(), bound_net_log, observer); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockBrowserContext : public BrowserContext { 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockBrowserContext() {} 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~MockBrowserContext() {} 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetPath, FilePath()); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(IsOffTheRecord, bool()); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetRequestContext, net::URLRequestContextGetter*()); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(GetRequestContextForRenderProcess, 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequestContextGetter*(int renderer_child_id)); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(GetRequestContextForStoragePartition, 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequestContextGetter*( 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& partition_path, bool in_memory)); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetMediaRequestContext, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequestContextGetter*()); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(GetMediaRequestContextForRenderProcess, 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequestContextGetter*(int renderer_child_id)); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(GetMediaRequestContextForStoragePartition, 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequestContextGetter*( 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& partition_path, bool in_memory)); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetResourceContext, ResourceContext*()); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetDownloadManagerDelegate, DownloadManagerDelegate*()); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetGeolocationPermissionContext, 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GeolocationPermissionContext* ()); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetSpeechRecognitionPreferences, 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SpeechRecognitionPreferences* ()); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetSpecialStoragePolicy, quota::SpecialStoragePolicy*()); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockDownloadManagerObserver : public DownloadManager::Observer { 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadManagerObserver() {} 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~MockDownloadManagerObserver() {} 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(OnDownloadCreated, void( 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager*, DownloadItem*)); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(ManagerGoingDown, void(DownloadManager*)); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(SelectFileDialogDisplayed, void( 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManager*, int32)); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DownloadManagerTest : public testing::Test { 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* kTestData; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const size_t kTestDataLen; 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadManagerTest() 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_thread_(BrowserThread::UI, &message_loop_), 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_thread_(BrowserThread::FILE, &message_loop_), 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) next_download_id_(0) { 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We tear down everything in TearDown(). 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~DownloadManagerTest() {} 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a MockDownloadItemFactory and MockDownloadManagerDelegate, 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then create a DownloadManager that points 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // at all of those. 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!download_manager_.get()); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_download_item_factory_ = (new MockDownloadItemFactory())->AsWeakPtr(); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_download_file_factory_ = (new MockDownloadFileFactory())->AsWeakPtr(); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_download_manager_delegate_.reset( 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new StrictMock<MockDownloadManagerDelegate>); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_download_manager_delegate_.get(), Shutdown()) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return()); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_browser_context_.reset(new StrictMock<MockBrowserContext>); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_browser_context_.get(), IsOffTheRecord()) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(false)); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_ = new DownloadManagerImpl(NULL); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_->SetDownloadItemFactoryForTesting( 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DownloadItemFactory>( 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_download_item_factory_.get()).Pass()); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_->SetDownloadFileFactoryForTesting( 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DownloadFileFactory>( 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_download_file_factory_.get()).Pass()); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer_.reset(new MockDownloadManagerObserver()); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_->AddObserver(observer_.get()); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_->SetDelegate(mock_download_manager_delegate_.get()); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_->Init(mock_browser_context_.get()); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (MockDownloadItemImpl* 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item = mock_download_item_factory_->PopItem()) { 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*item, GetSafetyState()) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(DownloadItem::SAFE)); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*item, IsPartialDownload()) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(false)); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(GetMockObserver(), ManagerGoingDown(download_manager_.get())) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return()); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_->Shutdown(); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_ = NULL; 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.RunUntilIdle(); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(NULL, mock_download_item_factory_.get()); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(NULL, mock_download_file_factory_.get()); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.RunUntilIdle(); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_download_manager_delegate_.reset(); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_browser_context_.reset(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns download id. 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl& AddItemToManager() { 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadCreateInfo info; 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* kDownloadIdDomain = "Test download id domain"; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Args are ignored except for download id, so everything else can be 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // null. 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = next_download_id_; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++next_download_id_; 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.download_id = DownloadId(kDownloadIdDomain, id); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.request_handle = DownloadRequestHandle(); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_->CreateDownloadItem(&info, net::BoundNetLog()); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(mock_download_item_factory_->GetItem(id)); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl& item(*mock_download_item_factory_->GetItem(id)); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Satisfy expectation. If the item is created in StartDownload(), 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we call Start on it immediately, so we need to set that expectation 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in the factory. 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item.Start(scoped_ptr<DownloadFile>()); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return item; 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl& GetMockDownloadItem(int id) { 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl* itemp = mock_download_item_factory_->GetItem(id); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(itemp); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *itemp; 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveMockDownloadItem(int id) { 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Owned by DownloadManager; should be deleted there. 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_download_item_factory_->RemoveItem(id); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadManagerDelegate& GetMockDownloadManagerDelegate() { 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *mock_download_manager_delegate_; 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadManagerObserver& GetMockObserver() { 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *observer_; 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Probe at private internals. 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DownloadStopped(DownloadItemImpl* item) { 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_->DownloadStopped(item); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DownloadTargetDeterminedCallback( 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& target_path, 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::TargetDisposition disposition, 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadDangerType danger_type, 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath& intermediate_path) { 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_called_ = true; 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_path_ = target_path; 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_disposition_ = disposition; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) danger_type_ = danger_type; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) intermediate_path_ = intermediate_path; 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DetermineDownloadTarget(DownloadItemImpl* item) { 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_->DetermineDownloadTarget( 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item, base::Bind( 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &DownloadManagerTest::DownloadTargetDeterminedCallback, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddItemToHistory(MockDownloadItemImpl& item, int64 db_handle) { 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For DCHECK in AddDownloadItemToHistory. Don't want to use 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WillRepeatedly as it may have to return true after this. 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (DCHECK_IS_ON()) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, IsPersisted()) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(false)); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, SetDbHandle(db_handle)); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, SetIsPersisted()); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, GetDbHandle()) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(db_handle)); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Null out ShowDownloadInBrowser 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, GetWebContents()) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(static_cast<WebContents*>(NULL))); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(GetMockDownloadManagerDelegate(), 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAlternativeWebContentsToNotifyForDownload()) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(static_cast<WebContents*>(NULL))); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, IsInProgress()) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(true)); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // History addition should result in a call into MaybeCompleteDownload(). 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, MaybeCompleteDownload()) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return()); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_->OnItemAddedToPersistentStore(item.GetId(), db_handle); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Key test variable; we'll keep it available to sub-classes. 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<DownloadManagerImpl> download_manager_; 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtr<MockDownloadFileFactory> mock_download_file_factory_; 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Target detetermined callback. 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool callback_called_; 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath target_path_; 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadItem::TargetDisposition target_disposition_; 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadDangerType danger_type_; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath intermediate_path_; 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoopForUI message_loop_; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBrowserThread ui_thread_; 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBrowserThread file_thread_; 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtr<MockDownloadItemFactory> mock_download_item_factory_; 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MockDownloadManagerDelegate> mock_download_manager_delegate_; 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MockBrowserContext> mock_browser_context_; 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MockDownloadManagerObserver> observer_; 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int next_download_id_; 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DownloadManagerTest); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Confirm the appropriate invocations occur when you start a download. 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DownloadManagerTest, StartDownload) { 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ByteStreamReader> stream; 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 local_id(5); // Random value 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath download_path(FILE_PATH_LITERAL("download/path")); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(download_manager_->GetDownload(local_id)); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(GetMockObserver(), OnDownloadCreated(download_manager_.get(), _)) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return()); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(GetMockDownloadManagerDelegate(), GetNextId()) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(DownloadId(this, local_id))); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Doing nothing will set the default download directory to null. 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(GetMockDownloadManagerDelegate(), GetSaveDir(_, _, _, _)); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(GetMockDownloadManagerDelegate(), GenerateFileHash()) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(true)); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_download_file_factory_.get(), 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockCreateFile(Ref(*info->save_info.get()), _, _, _, true, 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stream.get(), _, _)); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_manager_->StartDownload(info.Pass(), stream.Pass()); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(download_manager_->GetDownload(local_id)); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Confirm that calling DetermineDownloadTarget behaves properly if the delegate 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// blocks starting. 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DownloadManagerTest, DetermineDownloadTarget_True) { 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Put a mock we have a handle to on the download manager. 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl& item(AddItemToManager()); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(GetMockDownloadManagerDelegate(), 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DetermineDownloadTarget(&item, _)) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(true)); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DetermineDownloadTarget(&item); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Confirm that calling DetermineDownloadTarget behaves properly if the delegate 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// allows starting. This also tests OnDownloadTargetDetermined. 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DownloadManagerTest, DetermineDownloadTarget_False) { 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Put a mock we have a handle to on the download manager. 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl& item(AddItemToManager()); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath path(FILE_PATH_LITERAL("random_filepath.txt")); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(GetMockDownloadManagerDelegate(), 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DetermineDownloadTarget(&item, _)) 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(false)); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, GetForcedFilePath()) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(ReturnRef(path)); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Confirm that the callback was called with the right values in this case. 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_called_ = false; 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DetermineDownloadTarget(&item); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback_called_); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(path, target_path_); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(DownloadItem::TARGET_DISPOSITION_OVERWRITE, target_disposition_); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, danger_type_); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(path, intermediate_path_); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Does DownloadStopped remove Download from appropriate queues? 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test tests non-persisted downloads. 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DownloadManagerTest, OnDownloadStopped_NonPersisted) { 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Put a mock we have a handle to on the download manager. 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl& item(AddItemToManager()); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, IsPersisted()) 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(false)); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, GetState()) 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(DownloadItem::CANCELLED)); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, GetDbHandle()) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(DownloadItem::kUninitializedHandle)); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadStopped(&item); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Does DownloadStopped remove Download from appropriate queues? 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test tests persisted downloads. 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DownloadManagerTest, OnDownloadStopped_Persisted) { 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Put a mock we have a handle to on the download manager. 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDownloadItemImpl& item(AddItemToManager()); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 db_handle = 0x7; 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddItemToHistory(item, db_handle); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, IsPersisted()) 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(true)); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(GetMockDownloadManagerDelegate(), 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateItemInPersistentStore(&item)); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, GetState()) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(DownloadItem::CANCELLED)); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(item, GetDbHandle()) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(db_handle)); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadStopped(&item); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 694