blob: 6df66323852f2453bd076b7ff53f245ab140a435 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// 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_CONTROLLER_IMPL_H_
#define IOS_WEB_DOWNLOAD_DOWNLOAD_CONTROLLER_IMPL_H_
#include <Foundation/Foundation.h>
#include <set>
#include "base/macros.h"
#include "base/sequence_checker.h"
#include "base/supports_user_data.h"
#import "ios/web/download/download_task_impl.h"
#import "ios/web/public/download/download_controller.h"
#include "ui/base/page_transition_types.h"
namespace web {
class DownloadControllerDelegate;
class WebState;
class DownloadControllerImpl : public DownloadController,
public base::SupportsUserData::Data,
public DownloadTaskImpl::Delegate {
public:
DownloadControllerImpl();
~DownloadControllerImpl() override;
// DownloadController overrides:
void CreateDownloadTask(WebState* web_state,
NSString* identifier,
const GURL& original_url,
NSString* http_method,
const std::string& content_disposition,
int64_t total_bytes,
const std::string& mime_type,
ui::PageTransition page_transition) override;
void SetDelegate(DownloadControllerDelegate* delegate) override;
DownloadControllerDelegate* GetDelegate() const override;
// DownloadTaskImpl::Delegate overrides:
void OnTaskDestroyed(DownloadTaskImpl* task) override;
NSURLSession* CreateSession(NSString* identifier,
NSArray<NSHTTPCookie*>* cookies,
id<NSURLSessionDataDelegate> delegate,
NSOperationQueue* delegate_queue) override;
private:
// Set of tasks which are currently alive.
std::set<DownloadTaskImpl*> alive_tasks_;
DownloadControllerDelegate* delegate_ = nullptr;
SEQUENCE_CHECKER(my_sequence_checker_);
DISALLOW_COPY_AND_ASSIGN(DownloadControllerImpl);
};
} // namespace web
#endif // IOS_WEB_DOWNLOAD_DOWNLOAD_CONTROLLER_IMPL_H_