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
|
// Copyright 2020 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/component_updater/first_party_sets_component_installer.h"
#include "components/component_updater/installer_policies/first_party_sets_component_installer_policy.h"
#include "base/feature_list.h"
#include "base/logging.h"
#include "base/task/thread_pool.h"
#include "content/public/browser/first_party_sets_handler.h"
#include "content/public/common/content_features.h"
#include "net/base/features.h"
namespace {
base::TaskPriority GetTaskPriority() {
// We may use USER_BLOCKING here since First-Party Set initialization can
// block network requests at startup.
return content::FirstPartySetsHandler::GetInstance()->IsEnabled() &&
base::FeatureList::IsEnabled(
net::features::kWaitForFirstPartySetsInit)
? base::TaskPriority::USER_BLOCKING
: base::TaskPriority::BEST_EFFORT;
}
} // namespace
namespace component_updater {
void RegisterFirstPartySetsComponent(ComponentUpdateService* cus) {
if (!content::FirstPartySetsHandler::GetInstance()->IsEnabled()) {
return;
}
VLOG(1) << "Registering Related Website Sets component.";
auto policy = std::make_unique<FirstPartySetsComponentInstallerPolicy>(
/*on_sets_ready=*/base::BindOnce([](base::Version version,
base::File sets_file) {
VLOG(1) << "Received Related Website Sets";
content::FirstPartySetsHandler::GetInstance()->SetPublicFirstPartySets(
version, std::move(sets_file));
}),
GetTaskPriority());
FirstPartySetsComponentInstallerPolicy* raw_policy = policy.get();
// Dereferencing `raw_policy` this way is safe because the closure is invoked
// by the ComponentInstaller instance, which owns `policy` (so they have the
// same lifetime). Therefore if/when the closure is invoked, `policy` is still
// alive.
base::MakeRefCounted<ComponentInstaller>(
std::move(policy), /*action_handler=*/nullptr, GetTaskPriority())
->Register(cus, base::BindOnce(
[](FirstPartySetsComponentInstallerPolicy* policy) {
policy->OnRegistrationComplete();
},
raw_policy));
}
} // namespace component_updater
|