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)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_manager.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_save_info.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_url_parameters.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DownloadRequestHandle;
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// To avoid leaking download_request_handle.h to embedders.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrintTo(const DownloadRequestHandle& params, std::ostream* os);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockDownloadManager : public DownloadManager {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Structure to make it possible to match more than 10 arguments on
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // CreateDownloadItem.
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  struct CreateDownloadItemAdapter {
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    uint32 id;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath current_path;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath target_path;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::vector<GURL> url_chain;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    GURL referrer_url;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::Time start_time;
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::Time end_time;
36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    std::string etag;
37ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    std::string last_modified;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int64 received_bytes;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int64 total_bytes;
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DownloadItem::DownloadState state;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DownloadDangerType danger_type;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DownloadInterruptReason interrupt_reason;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool opened;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    CreateDownloadItemAdapter(
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      uint32 id,
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& current_path,
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& target_path,
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<GURL>& url_chain,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const GURL& referrer_url,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::Time& start_time,
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::Time& end_time,
53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const std::string& etag,
54ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const std::string& last_modified,
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int64 received_bytes,
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int64 total_bytes,
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadItem::DownloadState state,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadDangerType danger_type,
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadInterruptReason interrupt_reason,
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool opened);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Required by clang compiler.
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    CreateDownloadItemAdapter(const CreateDownloadItemAdapter& rhs);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ~CreateDownloadItemAdapter();
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool operator==(const CreateDownloadItemAdapter& rhs);
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockDownloadManager();
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual ~MockDownloadManager();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // DownloadManager:
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(SetDelegate, void(DownloadManagerDelegate* delegate));
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_CONST_METHOD0(GetDelegate, DownloadManagerDelegate*());
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(Shutdown, void());
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(GetAllDownloads, void(DownloadVector* downloads));
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(Init, bool(BrowserContext* browser_context));
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gasket for handling scoped_ptr arguments.
797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void StartDownload(
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      scoped_ptr<DownloadCreateInfo> info,
817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      scoped_ptr<ByteStreamReader> stream,
827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const DownloadUrlParameters::OnStartedCallback& callback) OVERRIDE;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD2(MockStartDownload,
857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch               void(DownloadCreateInfo*, ByteStreamReader*));
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD2(RemoveDownloadsBetween, int(base::Time remove_begin,
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           base::Time remove_end));
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(RemoveDownloads, int(base::Time remove_begin));
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(RemoveAllDownloads, int());
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(DownloadUrlMock, void(DownloadUrlParameters*));
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadUrl(scoped_ptr<DownloadUrlParameters> params) OVERRIDE {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DownloadUrlMock(params.get());
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(AddObserver, void(Observer* observer));
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD1(RemoveObserver, void(Observer* observer));
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Redirects to mock method to get around gmock 10 argument limit.
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual DownloadItem* CreateDownloadItem(
997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      uint32 id,
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& current_path,
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& target_path,
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<GURL>& url_chain,
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const GURL& referrer_url,
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::Time& start_time,
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::Time& end_time,
106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const std::string& etag,
107ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const std::string& last_modified,
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int64 received_bytes,
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int64 total_bytes,
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadItem::DownloadState state,
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadDangerType danger_type,
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DownloadInterruptReason interrupt_reason,
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool opened) OVERRIDE;
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MOCK_METHOD1(MockCreateDownloadItem,
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)               DownloadItem*(CreateDownloadItemAdapter adapter));
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_CONST_METHOD0(InProgressCount, int());
1198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  MOCK_CONST_METHOD0(NonMaliciousInProgressCount, int());
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_CONST_METHOD0(GetBrowserContext, BrowserContext*());
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_METHOD0(CheckForHistoryFilesRemoval, void());
1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  MOCK_METHOD1(GetDownload, DownloadItem*(uint32 id));
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_PUBLIC_BROWSER_DOWNLOAD_MOCK_DOWNLOAD_MANAGER_H_
128