1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_REQUEST_HANDLE_H_ 6 #define CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_REQUEST_HANDLE_H_ 7 8 #include <string> 9 10 #include "base/compiler_specific.h" 11 #include "base/memory/weak_ptr.h" 12 #include "content/browser/download/download_resource_handler.h" 13 #include "content/common/content_export.h" 14 15 namespace content { 16 class DownloadManager; 17 class WebContents; 18 19 // A handle used by the download system for operations on the URLRequest 20 // or objects conditional on it (e.g. WebContentsImpl). 21 // This class needs to be copyable, so we can pass it across threads and not 22 // worry about lifetime or const-ness. 23 // 24 // DownloadRequestHandleInterface is defined for mocking purposes. 25 class CONTENT_EXPORT DownloadRequestHandleInterface { 26 public: 27 virtual ~DownloadRequestHandleInterface() {} 28 29 // These functions must be called on the UI thread. 30 virtual WebContents* GetWebContents() const = 0; 31 virtual DownloadManager* GetDownloadManager() const = 0; 32 33 // Pauses or resumes the matching URL request. 34 virtual void PauseRequest() const = 0; 35 virtual void ResumeRequest() const = 0; 36 37 // Cancels the request. 38 virtual void CancelRequest() const = 0; 39 40 // Describes the object. 41 virtual std::string DebugString() const = 0; 42 }; 43 44 45 class CONTENT_EXPORT DownloadRequestHandle 46 : public DownloadRequestHandleInterface { 47 public: 48 virtual ~DownloadRequestHandle(); 49 50 // Create a null DownloadRequestHandle: getters will return null, and 51 // all actions are no-ops. 52 // TODO(rdsmith): Ideally, actions would be forbidden rather than 53 // no-ops, to confirm that no non-testing code actually uses 54 // a null DownloadRequestHandle. But for now, we need the no-op 55 // behavior for unit tests. Long-term, this should be fixed by 56 // allowing mocking of ResourceDispatcherHost in unit tests. 57 DownloadRequestHandle(); 58 59 // Note that |rdh| is required to be non-null. 60 DownloadRequestHandle(const base::WeakPtr<DownloadResourceHandler>& handler, 61 int child_id, 62 int render_view_id, 63 int request_id); 64 65 // Implement DownloadRequestHandleInterface interface. 66 virtual WebContents* GetWebContents() const OVERRIDE; 67 virtual DownloadManager* GetDownloadManager() const OVERRIDE; 68 virtual void PauseRequest() const OVERRIDE; 69 virtual void ResumeRequest() const OVERRIDE; 70 virtual void CancelRequest() const OVERRIDE; 71 virtual std::string DebugString() const OVERRIDE; 72 73 private: 74 base::WeakPtr<DownloadResourceHandler> handler_; 75 76 // The ID of the child process that started the download. 77 int child_id_; 78 79 // The ID of the render view that started the download. 80 int render_view_id_; 81 82 // The ID associated with the request used for the download. 83 int request_id_; 84 }; 85 86 } // namespace content 87 88 #endif // CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_REQUEST_HANDLE_H_ 89