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)#ifndef CONTENT_PUBLIC_BROWSER_DOWNLOAD_MOCK_DOWNLOAD_MANAGER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PUBLIC_BROWSER_DOWNLOAD_MOCK_DOWNLOAD_MANAGER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector>
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_manager.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_save_info.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_url_parameters.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DownloadRequestHandle;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// To avoid leaking download_request_handle.h to embedders.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrintTo(const DownloadRequestHandle& params, std::ostream* os);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockDownloadManager : public DownloadManager {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Structure to make it possible to match more than 10 arguments on
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // CreateDownloadItem.
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  struct CreateDownloadItemAdapter {
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    uint32 id;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath current_path;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath target_path;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::vector<GURL> url_chain;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    GURL referrer_url;
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string mime_type;
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string original_mime_type;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::Time start_time;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::Time end_time;
39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    std::string etag;
40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    std::string last_modified;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int64 received_bytes;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int64 total_bytes;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DownloadItem::DownloadState state;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DownloadDangerType danger_type;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DownloadInterruptReason interrupt_reason;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool opened;
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    CreateDownloadItemAdapter(
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      uint32 id,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& current_path,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& target_path,
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<GURL>& url_chain,
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const GURL& referrer_url,
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const std::string& mime_type,
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const std::string& original_mime_type,
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::Time& start_time,
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::Time& end_time,
58ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const std::string& etag,
59ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const std::string& last_modified,
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int64 received_bytes,
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int64 total_bytes,
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadItem::DownloadState state,
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadDangerType danger_type,
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadInterruptReason interrupt_reason,
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool opened);
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Required by clang compiler.
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    CreateDownloadItemAdapter(const CreateDownloadItemAdapter& rhs);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ~CreateDownloadItemAdapter();
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool operator==(const CreateDownloadItemAdapter& rhs);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockDownloadManager();
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual ~MockDownloadManager();
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // DownloadManager:
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(SetDelegate, void(DownloadManagerDelegate* delegate));
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_CONST_METHOD0(GetDelegate, DownloadManagerDelegate*());
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(Shutdown, void());
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(GetAllDownloads, void(DownloadVector* downloads));
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(Init, bool(BrowserContext* browser_context));
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gasket for handling scoped_ptr arguments.
847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void StartDownload(
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      scoped_ptr<DownloadCreateInfo> info,
867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      scoped_ptr<ByteStreamReader> stream,
877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const DownloadUrlParameters::OnStartedCallback& callback) OVERRIDE;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD2(MockStartDownload,
907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch               void(DownloadCreateInfo*, ByteStreamReader*));
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD2(RemoveDownloadsBetween, int(base::Time remove_begin,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           base::Time remove_end));
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(RemoveDownloads, int(base::Time remove_begin));
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(RemoveAllDownloads, int());
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(DownloadUrlMock, void(DownloadUrlParameters*));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadUrl(scoped_ptr<DownloadUrlParameters> params) OVERRIDE {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DownloadUrlMock(params.get());
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(AddObserver, void(Observer* observer));
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(RemoveObserver, void(Observer* observer));
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Redirects to mock method to get around gmock 10 argument limit.
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual DownloadItem* CreateDownloadItem(
1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      uint32 id,
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& current_path,
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& target_path,
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<GURL>& url_chain,
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const GURL& referrer_url,
109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const std::string& mime_type,
110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const std::string& original_mime_type,
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::Time& start_time,
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::Time& end_time,
113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const std::string& etag,
114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const std::string& last_modified,
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int64 received_bytes,
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int64 total_bytes,
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadItem::DownloadState state,
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadDangerType danger_type,
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadInterruptReason interrupt_reason,
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool opened) OVERRIDE;
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MOCK_METHOD1(MockCreateDownloadItem,
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)               DownloadItem*(CreateDownloadItemAdapter adapter));
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_CONST_METHOD0(InProgressCount, int());
1268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  MOCK_CONST_METHOD0(NonMaliciousInProgressCount, int());
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_CONST_METHOD0(GetBrowserContext, BrowserContext*());
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(CheckForHistoryFilesRemoval, void());
1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  MOCK_METHOD1(GetDownload, DownloadItem*(uint32 id));
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_PUBLIC_BROWSER_DOWNLOAD_MOCK_DOWNLOAD_MANAGER_H_
135