1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
// 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
|