| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef IOS_WEB_DOWNLOAD_DOWNLOAD_NATIVE_TASK_IMPL_H_ |
| #define IOS_WEB_DOWNLOAD_DOWNLOAD_NATIVE_TASK_IMPL_H_ |
| |
| #import <WebKit/WebKit.h> |
| |
| #include "base/task/sequenced_task_runner.h" |
| #include "ios/web/download/download_task_impl.h" |
| |
| @class DownloadNativeTaskBridge; |
| |
| namespace web { |
| |
| // Implementation of DownloadTaskImpl that uses WKDownload (wrapped in |
| // NativeTaskBridge) to perform the download |
| class DownloadNativeTaskImpl final : public DownloadTaskImpl { |
| public: |
| // Constructs a new `DownloadNativeTaskImpl` object. `web_state`, `identifier` |
| // and `download` must be valid. |
| DownloadNativeTaskImpl( |
| WebState* web_state, |
| const GURL& original_url, |
| NSString* originating_host, |
| NSString* http_method, |
| const std::string& content_disposition, |
| int64_t total_bytes, |
| const std::string& mime_type, |
| NSString* identifier, |
| const scoped_refptr<base::SequencedTaskRunner>& task_runner, |
| DownloadNativeTaskBridge* download); |
| |
| DownloadNativeTaskImpl(const DownloadNativeTaskImpl&) = delete; |
| DownloadNativeTaskImpl& operator=(const DownloadNativeTaskImpl&) = delete; |
| |
| ~DownloadNativeTaskImpl() final; |
| |
| // DownloadTaskImpl overrides: |
| void StartInternal(const base::FilePath& path) final; |
| void CancelInternal() final; |
| std::string GetSuggestedName() const final; |
| |
| private: |
| // Invoked when the WKDownload* tasks make progress. |
| void OnDownloadProgress(int64_t bytes_received, |
| int64_t total_bytes, |
| double fraction_complete); |
| |
| // Invoked when the NSURLResponse of WKDownload is received. |
| void OnResponseReceived(int http_error_code, NSString* mime_type); |
| |
| DownloadNativeTaskBridge* download_bridge_ = nil; |
| |
| base::WeakPtrFactory<DownloadNativeTaskImpl> weak_factory_{this}; |
| }; |
| |
| } // namespace web |
| |
| #endif // IOS_WEB_DOWNLOAD_DOWNLOAD_NATIVE_TASK_IMPL_H_ |