[go: nahoru, domu]

blob: 2b8240261c446ac8868622e92457ff4b417e3d53 [file] [log] [blame]
// 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.
#include "chrome/browser/web_applications/web_app_origin_association_manager.h"
#include <utility>
#include "base/functional/bind.h"
#include "chrome/browser/web_applications/web_app_origin_association_task.h"
#include "components/webapps/services/web_app_origin_association/web_app_origin_association_fetcher.h"
#include "components/webapps/services/web_app_origin_association/web_app_origin_association_parser_service.h"
namespace web_app {
WebAppOriginAssociationManager::WebAppOriginAssociationManager()
: fetcher_(std::make_unique<webapps::WebAppOriginAssociationFetcher>()) {}
WebAppOriginAssociationManager::~WebAppOriginAssociationManager() = default;
void WebAppOriginAssociationManager::GetWebAppOriginAssociations(
const GURL& web_app_identity,
ScopeExtensions scope_extensions,
OnDidGetWebAppOriginAssociations callback) {
if (scope_extensions.empty()) {
std::move(callback).Run(ScopeExtensions());
return;
}
auto task =
std::make_unique<Task>(web_app_identity, std::move(scope_extensions),
*this, std::move(callback));
pending_tasks_.push_back(std::move(task));
MaybeStartNextTask();
}
void WebAppOriginAssociationManager::MaybeStartNextTask() {
if (task_in_progress_ || pending_tasks_.empty())
return;
task_in_progress_ = true;
pending_tasks_.front().get()->Start();
}
void WebAppOriginAssociationManager::OnTaskCompleted() {
DCHECK(!pending_tasks_.empty());
task_in_progress_ = false;
pending_tasks_.pop_front();
MaybeStartNextTask();
}
void WebAppOriginAssociationManager::SetFetcherForTest(
std::unique_ptr<webapps::WebAppOriginAssociationFetcher> fetcher) {
fetcher_ = std::move(fetcher);
}
webapps::WebAppOriginAssociationFetcher&
WebAppOriginAssociationManager::GetFetcherForTest() {
DCHECK(fetcher_);
return *fetcher_;
}
const mojo::Remote<webapps::mojom::WebAppOriginAssociationParser>&
WebAppOriginAssociationManager::GetParser() {
if (!parser_ || !parser_.is_bound()) {
parser_ = webapps::LaunchWebAppOriginAssociationParser();
parser_.reset_on_disconnect();
}
return parser_;
}
webapps::WebAppOriginAssociationFetcher&
WebAppOriginAssociationManager::GetFetcher() {
return *fetcher_;
}
} // namespace web_app