blob: 82aec8b760870ead798db9abb65896bb8f2fda5f [file] [log] [blame] [edit]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_UPDATER_EXTENSION_DOWNLOADER_TASK_H_
#define EXTENSIONS_BROWSER_UPDATER_EXTENSION_DOWNLOADER_TASK_H_
#include <string>
#include "base/memory/raw_ptr.h"
#include "base/version.h"
#include "extensions/browser/updater/extension_downloader_delegate.h"
#include "extensions/browser/updater/extension_downloader_types.h"
#include "extensions/common/extension_id.h"
#include "extensions/common/manifest.h"
#include "extensions/common/mojom/manifest.mojom-shared.h"
#include "url/gurl.h"
namespace extensions {
// A struct which wraps parameters for a single extension update request.
struct ExtensionDownloaderTask {
ExtensionDownloaderTask(const ExtensionDownloaderTask&) = delete;
ExtensionDownloaderTask& operator=(const ExtensionDownloaderTask&) = delete;
ExtensionDownloaderTask(ExtensionId id,
GURL update_url,
mojom::ManifestLocation install_location,
bool is_corrupt_reinstall,
int request_id,
DownloadFetchPriority fetch_priority,
base::Version version,
Manifest::Type type,
std::string update_url_data);
ExtensionDownloaderTask(ExtensionId id,
GURL update_url,
mojom::ManifestLocation install_location,
bool is_corrupt_reinstall,
int request_id,
DownloadFetchPriority fetch_priority);
ExtensionDownloaderTask(ExtensionDownloaderTask&&);
ExtensionDownloaderTask& operator=(ExtensionDownloaderTask&&);
~ExtensionDownloaderTask();
ExtensionId id;
GURL update_url;
mojom::ManifestLocation install_location;
// Indicates that we detected corruption in the local copy of the extension
// and we want to perform a reinstall of it.
bool is_corrupt_reinstall{false};
// Passed on as is to the various `delegate_` callbacks. This is used for
// example by clients (e.g. ExtensionUpdater) to keep track of when
// potentially concurrent update checks complete.
int request_id;
// Notifies the downloader the priority of this extension update (either
// foreground or background).
DownloadFetchPriority fetch_priority{DownloadFetchPriority::kBackground};
// Specifies the version of the already downloaded crx file, equals
// to 0.0.0.0 if there is no crx file or for a pending extension so it will
// always be updated, and thus installed (assuming all extensions have
// non-zero versions).
base::Version version{"0.0.0.0"};
// Used for metrics only and can be TYPE_UNKNOWN if e.g. the extension is
// not yet installed.
Manifest::Type type{Manifest::TYPE_UNKNOWN};
// May be used to pass some additional data to the update server.
std::string update_url_data;
// Link to the delegate, set by ExtensionDownloader.
raw_ptr<ExtensionDownloaderDelegate, DanglingUntriaged> delegate{nullptr};
// Notifies delegate about stage change.
void OnStageChanged(ExtensionDownloaderDelegate::Stage stage);
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_UPDATER_EXTENSION_DOWNLOADER_TASK_H_