Introduce SimpleDownloadManager to support reduced mode
Bug: 942770
Change-Id: I780f7a863c519cd9a2fc885c29df8fc20786b917
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1526686
Commit-Queue: Min Qin <qinmin@chromium.org>
Reviewed-by: Shakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#642077}
diff --git a/components/download/internal/common/BUILD.gn b/components/download/internal/common/BUILD.gn
index 6ca95c9..acd3b175 100644
--- a/components/download/internal/common/BUILD.gn
+++ b/components/download/internal/common/BUILD.gn
@@ -53,6 +53,7 @@
"resource_downloader.h",
"save_package_download_job.cc",
"save_package_download_job.h",
+ "simple_download_manager_coordinator.cc",
"stream_handle_input_stream.cc",
"url_download_handler_factory.cc",
"url_download_request_handle.cc",
diff --git a/components/download/internal/common/simple_download_manager_coordinator.cc b/components/download/internal/common/simple_download_manager_coordinator.cc
new file mode 100644
index 0000000..826ac49
--- /dev/null
+++ b/components/download/internal/common/simple_download_manager_coordinator.cc
@@ -0,0 +1,46 @@
+// Copyright 2019 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 "components/download/public/common/simple_download_manager_coordinator.h"
+
+#include <utility>
+
+#include "components/download/public/common/download_item.h"
+#include "components/download/public/common/simple_download_manager.h"
+
+namespace download {
+
+SimpleDownloadManagerCoordinator::SimpleDownloadManagerCoordinator() = default;
+
+SimpleDownloadManagerCoordinator::~SimpleDownloadManagerCoordinator() = default;
+
+void SimpleDownloadManagerCoordinator::SetSimpleDownloadManager(
+ SimpleDownloadManager* simple_download_manager) {
+ simple_download_manager_ = simple_download_manager;
+}
+
+void SimpleDownloadManagerCoordinator::DownloadUrl(
+ std::unique_ptr<download::DownloadUrlParameters> parameters) {
+ if (simple_download_manager_)
+ simple_download_manager_->DownloadUrl(std::move(parameters));
+}
+
+DownloadItem* SimpleDownloadManagerCoordinator::GetDownloadByGuid(
+ const std::string& guid) {
+ if (simple_download_manager_)
+ return simple_download_manager_->GetDownloadByGuid(guid);
+ return nullptr;
+}
+
+bool SimpleDownloadManagerCoordinator::AreDownloadsInitialized(
+ bool active_downloads_only) {
+ return simple_download_manager_->AreDownloadsInitialized(
+ active_downloads_only);
+}
+
+std::vector<DownloadItem*> SimpleDownloadManagerCoordinator::GetAllDownloads() {
+ return simple_download_manager_->GetAllDownloads();
+}
+
+} // namespace download
diff --git a/components/download/public/common/BUILD.gn b/components/download/public/common/BUILD.gn
index 26a6dd0..30d3d52 100644
--- a/components/download/public/common/BUILD.gn
+++ b/components/download/public/common/BUILD.gn
@@ -59,6 +59,8 @@
"parallel_download_configs.h",
"rate_estimator.h",
"resume_mode.h",
+ "simple_download_manager.h",
+ "simple_download_manager_coordinator.h",
"stream_handle_input_stream.h",
"url_download_handler_factory.h",
"url_download_request_handle.h",
diff --git a/components/download/public/common/simple_download_manager.h b/components/download/public/common/simple_download_manager.h
new file mode 100644
index 0000000..85e8acf
--- /dev/null
+++ b/components/download/public/common/simple_download_manager.h
@@ -0,0 +1,58 @@
+// Copyright 2019 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 COMPONENTS_DOWNLOAD_PUBLIC_COMMON_SIMPLE_DOWNLOAD_MANAGER_H_
+#define COMPONENTS_DOWNLOAD_PUBLIC_COMMON_SIMPLE_DOWNLOAD_MANAGER_H_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "components/download/public/common/download_export.h"
+#include "components/download/public/common/download_url_parameters.h"
+
+namespace download {
+
+class DownloadItem;
+
+// Download manager that provides simple functionalities for callers to carry
+// out a download task.
+class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManager {
+ public:
+ class Observer {
+ public:
+ Observer() = default;
+ virtual ~Observer() = default;
+
+ virtual void OnDownloadsInitialized(bool active_downloads_only) {}
+ virtual void OnManagerGoingDown() {}
+ virtual void OnDownloadCreated(DownloadItem* item) {}
+ virtual void OnDownloadUpdated(DownloadItem* item) {}
+ virtual void OnDownloadOpened(DownloadItem* item) {}
+ virtual void OnDownloadRemoved(DownloadItem* item) {}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Observer);
+ };
+
+ // See DownloadUrlParameters for details about controlling the download.
+ virtual void DownloadUrl(
+ std::unique_ptr<download::DownloadUrlParameters> parameters) = 0;
+
+ // Whether downloads are initialized. If |active_downloads_only| is true, this
+ // call only checks for all the active downloads. Otherwise, it will check all
+ // downloads.
+ virtual bool AreDownloadsInitialized(bool active_downloads_only) = 0;
+
+ // Gets all downloads.
+ virtual std::vector<DownloadItem*> GetAllDownloads() = 0;
+
+ // Get the download item for |guid|.
+ virtual download::DownloadItem* GetDownloadByGuid(
+ const std::string& guid) = 0;
+};
+
+} // namespace download
+
+#endif // COMPONENTS_DOWNLOAD_PUBLIC_COMMON_SIMPLE_DOWNLOAD_MANAGER_H_
diff --git a/components/download/public/common/simple_download_manager_coordinator.h b/components/download/public/common/simple_download_manager_coordinator.h
new file mode 100644
index 0000000..85756fe4
--- /dev/null
+++ b/components/download/public/common/simple_download_manager_coordinator.h
@@ -0,0 +1,54 @@
+// Copyright 2019 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 COMPONENTS_DOWNLOAD_PUBLIC_COMMON_SIMPLE_DOWNLOAD_MANAGER_COORDINATOR_H_
+#define COMPONENTS_DOWNLOAD_PUBLIC_COMMON_SIMPLE_DOWNLOAD_MANAGER_COORDINATOR_H_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "components/download/public/common/download_export.h"
+#include "components/download/public/common/download_url_parameters.h"
+
+namespace download {
+
+class DownloadItem;
+class SimpleDownloadManager;
+
+// This object allows swapping between different SimppleDownloadManager
+// instances so that callers don't need to know about the swap.
+class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManagerCoordinator {
+ public:
+ SimpleDownloadManagerCoordinator();
+ ~SimpleDownloadManagerCoordinator();
+
+ void SetSimpleDownloadManager(SimpleDownloadManager* simple_download_manager);
+
+ // See download::DownloadUrlParameters for details about controlling the
+ // download.
+ void DownloadUrl(std::unique_ptr<DownloadUrlParameters> parameters);
+
+ // Whether downloads are initialized. If |active_downloads_only| is true, this
+ // call only checks for all the active downloads. Otherwise, it will check all
+ // downloads.
+ bool AreDownloadsInitialized(bool active_downloads_only);
+
+ // Gets all the downloads. Caller needs to call AreDownloadsInitialized() to
+ // check if all downloads are initialized. If only active downloads are
+ // initialized, this method will only return all active downloads.
+ std::vector<DownloadItem*> GetAllDownloads();
+
+ // Get the download item for |guid|.
+ download::DownloadItem* GetDownloadByGuid(const std::string& guid);
+
+ private:
+ SimpleDownloadManager* simple_download_manager_;
+
+ DISALLOW_COPY_AND_ASSIGN(SimpleDownloadManagerCoordinator);
+};
+
+} // namespace download
+
+#endif // COMPONENTS_DOWNLOAD_PUBLIC_COMMON_SIMPLE_DOWNLOAD_MANAGER_COORDINATOR_H_