// Copyright 2018 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.

#include "ios/web_view/internal/web_view_download_manager.h"

#include "ios/web/public/download/download_controller.h"
#import "ios/web/public/download/download_task.h"
#import "ios/web_view/internal/cwv_download_task_internal.h"
#import "ios/web_view/internal/cwv_web_view_internal.h"
#import "ios/web_view/public/cwv_navigation_delegate.h"

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif

namespace ios_web_view {

WebViewDownloadManager::WebViewDownloadManager(web::BrowserState* browser_state)
    : browser_state_(browser_state),
      download_controller_(
          web::DownloadController::FromBrowserState(browser_state_)) {
  download_controller_->SetDelegate(this);
}

WebViewDownloadManager::~WebViewDownloadManager() {
  if (download_controller_) {
    download_controller_->SetDelegate(nullptr);
  }
}

void WebViewDownloadManager::OnDownloadCreated(
    web::DownloadController*,
    web::WebState* web_state,
    std::unique_ptr<web::DownloadTask> task) {
  CWVWebView* web_view = [CWVWebView webViewForWebState:web_state];
  if ([web_view.navigationDelegate
          respondsToSelector:@selector(webView:didRequestDownloadWithTask:)]) {
    CWVDownloadTask* cwv_task =
        [[CWVDownloadTask alloc] initWithInternalTask:std::move(task)];
    [web_view.navigationDelegate webView:web_view
              didRequestDownloadWithTask:cwv_task];
  }
}

void WebViewDownloadManager::OnDownloadControllerDestroyed(
    web::DownloadController*) {
  download_controller_->SetDelegate(nullptr);
  download_controller_ = nullptr;
}

}  // namespace ios_web_view
