Commit f6ab80ab authored by Sebastien Marchand's avatar Sebastien Marchand Committed by Commit Bot

TabManager - Remove the Intervention Policy Database

This database isn't needed anymore now that sites can opt out from
freezing via an Origin Trial.

Change-Id: I91608ecc2e1bc77ddf3da762ff332674f403f1b9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1862723Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Reviewed-by: default avatarSorin Jianu <sorin@chromium.org>
Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Commit-Queue: Sébastien Marchand <sebmarchand@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706502}
parent 0bcc13ef
...@@ -2978,8 +2978,6 @@ jumbo_split_static_library("browser") { ...@@ -2978,8 +2978,6 @@ jumbo_split_static_library("browser") {
"chrome_browser_field_trials_desktop.h", "chrome_browser_field_trials_desktop.h",
"chrome_process_singleton.cc", "chrome_process_singleton.cc",
"chrome_process_singleton.h", "chrome_process_singleton.h",
"component_updater/intervention_policy_database_component_installer.cc",
"component_updater/intervention_policy_database_component_installer.h",
"component_updater/tls_deprecation_config_component_installer.cc", "component_updater/tls_deprecation_config_component_installer.cc",
"component_updater/tls_deprecation_config_component_installer.h", "component_updater/tls_deprecation_config_component_installer.h",
"custom_handlers/register_protocol_handler_permission_request.cc", "custom_handlers/register_protocol_handler_permission_request.cc",
...@@ -3263,8 +3261,6 @@ jumbo_split_static_library("browser") { ...@@ -3263,8 +3261,6 @@ jumbo_split_static_library("browser") {
"resource_coordinator/decision_details.h", "resource_coordinator/decision_details.h",
"resource_coordinator/discard_metrics_lifecycle_unit_observer.cc", "resource_coordinator/discard_metrics_lifecycle_unit_observer.cc",
"resource_coordinator/discard_metrics_lifecycle_unit_observer.h", "resource_coordinator/discard_metrics_lifecycle_unit_observer.h",
"resource_coordinator/intervention_policy_database.cc",
"resource_coordinator/intervention_policy_database.h",
"resource_coordinator/leveldb_site_characteristics_database.cc", "resource_coordinator/leveldb_site_characteristics_database.cc",
"resource_coordinator/leveldb_site_characteristics_database.h", "resource_coordinator/leveldb_site_characteristics_database.h",
"resource_coordinator/lifecycle_unit.cc", "resource_coordinator/lifecycle_unit.cc",
...@@ -3544,7 +3540,6 @@ jumbo_split_static_library("browser") { ...@@ -3544,7 +3540,6 @@ jumbo_split_static_library("browser") {
"//chrome/app/vector_icons", "//chrome/app/vector_icons",
"//chrome/browser/policy:path_parser", "//chrome/browser/policy:path_parser",
"//chrome/browser/profile_resetter:profile_reset_report_proto", "//chrome/browser/profile_resetter:profile_reset_report_proto",
"//chrome/browser/resource_coordinator:intervention_policy_database_proto",
"//chrome/browser/resource_coordinator:tab_metrics_event_proto", "//chrome/browser/resource_coordinator:tab_metrics_event_proto",
"//chrome/browser/resource_coordinator/tab_ranker", "//chrome/browser/resource_coordinator/tab_ranker",
"//chrome/browser/resources:component_extension_resources", "//chrome/browser/resources:component_extension_resources",
......
...@@ -328,7 +328,6 @@ ...@@ -328,7 +328,6 @@
#endif #endif
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
#include "chrome/browser/component_updater/intervention_policy_database_component_installer.h"
#include "chrome/browser/component_updater/tls_deprecation_config_component_installer.h" #include "chrome/browser/component_updater/tls_deprecation_config_component_installer.h"
#include "chrome/browser/resource_coordinator/tab_manager.h" #include "chrome/browser/resource_coordinator/tab_manager.h"
#endif #endif
...@@ -535,8 +534,6 @@ void RegisterComponentsForUpdate(PrefService* profile_prefs) { ...@@ -535,8 +534,6 @@ void RegisterComponentsForUpdate(PrefService* profile_prefs) {
#endif // defined(OS_WIN) #endif // defined(OS_WIN)
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
RegisterInterventionPolicyDatabaseComponent(
cus, g_browser_process->GetTabManager()->intervention_policy_database());
RegisterTLSDeprecationConfigComponent(cus, path); RegisterTLSDeprecationConfigComponent(cus, path);
#endif #endif
......
// Copyright 2018 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 "chrome/browser/component_updater/intervention_policy_database_component_installer.h"
#include "base/bind.h"
#include "base/callback.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/logging.h"
#include "base/stl_util.h"
#include "chrome/browser/resource_coordinator/intervention_policy_database.h"
#include "components/component_updater/component_updater_paths.h"
#include "components/component_updater/component_updater_service.h"
#include "components/crx_file/id_util.h"
using component_updater::ComponentUpdateService;
namespace {
// The SHA256 of the SubjectPublicKeyInfo used to sign the component.
// The component id is: copjbmjbojbakpaedmpkhmiplmmehfck
const uint8_t kInterventionPolicyDatabasePublicKeySHA256[32] = {
0x2e, 0xf9, 0x1c, 0x91, 0xe9, 0x10, 0xaf, 0x04, 0x3c, 0xfa, 0x7c,
0x8f, 0xbc, 0xc4, 0x75, 0x2a, 0x48, 0x9a, 0x64, 0x74, 0xc6, 0xda,
0xb7, 0xb9, 0xdf, 0x5f, 0x51, 0x3e, 0x50, 0x39, 0x04, 0xab};
// The name of the component, used in the chrome://components page.
const char kInterventionPolicyDatabaseComponentName[] =
"Intervention Policy Database";
// The name of the database file inside of an installation of this component.
const base::FilePath::CharType kInterventionPolicyDatabaseBinaryPbFileName[] =
FILE_PATH_LITERAL("intervention_policy_database.pb");
} // namespace
namespace component_updater {
InterventionPolicyDatabaseComponentInstallerPolicy::
InterventionPolicyDatabaseComponentInstallerPolicy(
resource_coordinator::InterventionPolicyDatabase* database)
: database_(database) {
DCHECK(database_);
}
bool InterventionPolicyDatabaseComponentInstallerPolicy::
SupportsGroupPolicyEnabledComponentUpdates() const {
return false;
}
bool InterventionPolicyDatabaseComponentInstallerPolicy::
RequiresNetworkEncryption() const {
// Public data is delivered via this component, no need for encryption.
return false;
}
update_client::CrxInstaller::Result
InterventionPolicyDatabaseComponentInstallerPolicy::OnCustomInstall(
const base::DictionaryValue& manifest,
const base::FilePath& install_dir) {
return update_client::CrxInstaller::Result(0);
}
void InterventionPolicyDatabaseComponentInstallerPolicy::OnCustomUninstall() {}
// Called during startup and installation before ComponentReady().
bool InterventionPolicyDatabaseComponentInstallerPolicy::VerifyInstallation(
const base::DictionaryValue& manifest,
const base::FilePath& install_dir) const {
return base::PathExists(
install_dir.Append(kInterventionPolicyDatabaseBinaryPbFileName));
}
// NOTE: This is always called on the main UI thread. It is called once every
// startup to notify of an already installed component, and may be called
// repeatedly after that every time a new component is ready.
void InterventionPolicyDatabaseComponentInstallerPolicy::ComponentReady(
const base::Version& version,
const base::FilePath& install_dir,
std::unique_ptr<base::DictionaryValue> manifest) {
DCHECK(database_);
database_->InitializeDatabaseWithProtoFile(
install_dir.Append(kInterventionPolicyDatabaseBinaryPbFileName), version,
std::move(manifest));
}
base::FilePath
InterventionPolicyDatabaseComponentInstallerPolicy::GetRelativeInstallDir()
const {
return base::FilePath(FILE_PATH_LITERAL("InterventionPolicyDatabase"));
}
void InterventionPolicyDatabaseComponentInstallerPolicy::GetHash(
std::vector<uint8_t>* hash) const {
hash->assign(kInterventionPolicyDatabasePublicKeySHA256,
kInterventionPolicyDatabasePublicKeySHA256 +
base::size(kInterventionPolicyDatabasePublicKeySHA256));
}
std::string InterventionPolicyDatabaseComponentInstallerPolicy::GetName()
const {
return kInterventionPolicyDatabaseComponentName;
}
update_client::InstallerAttributes
InterventionPolicyDatabaseComponentInstallerPolicy::GetInstallerAttributes()
const {
return update_client::InstallerAttributes();
}
std::vector<std::string>
InterventionPolicyDatabaseComponentInstallerPolicy::GetMimeTypes() const {
return std::vector<std::string>();
}
void RegisterInterventionPolicyDatabaseComponent(
ComponentUpdateService* cus,
resource_coordinator::InterventionPolicyDatabase* database) {
std::unique_ptr<ComponentInstallerPolicy> policy(
new InterventionPolicyDatabaseComponentInstallerPolicy(database));
auto installer = base::MakeRefCounted<ComponentInstaller>(std::move(policy));
installer->Register(cus, base::OnceClosure());
}
} // namespace component_updater
// Copyright 2018 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 CHROME_BROWSER_COMPONENT_UPDATER_INTERVENTION_POLICY_DATABASE_COMPONENT_INSTALLER_H_
#define CHROME_BROWSER_COMPONENT_UPDATER_INTERVENTION_POLICY_DATABASE_COMPONENT_INSTALLER_H_
#include "components/component_updater/component_installer.h"
namespace resource_coordinator {
class InterventionPolicyDatabase;
}
namespace component_updater {
class ComponentUpdateService;
// Component for receiving the intervention policy database. The database
// consists in a proto, defined in
// chrome/browser/resource_coordinator/intervention_policy_database.proto.
class InterventionPolicyDatabaseComponentInstallerPolicy
: public ComponentInstallerPolicy {
public:
InterventionPolicyDatabaseComponentInstallerPolicy(
resource_coordinator::InterventionPolicyDatabase* database);
~InterventionPolicyDatabaseComponentInstallerPolicy() override = default;
private:
// ComponentInstallerPolicy:
bool SupportsGroupPolicyEnabledComponentUpdates() const override;
bool RequiresNetworkEncryption() const override;
update_client::CrxInstaller::Result OnCustomInstall(
const base::DictionaryValue& manifest,
const base::FilePath& install_dir) override;
void OnCustomUninstall() override;
bool VerifyInstallation(const base::DictionaryValue& manifest,
const base::FilePath& install_dir) const override;
void ComponentReady(const base::Version& version,
const base::FilePath& install_dir,
std::unique_ptr<base::DictionaryValue> manifest) override;
base::FilePath GetRelativeInstallDir() const override;
void GetHash(std::vector<uint8_t>* hash) const override;
std::string GetName() const override;
update_client::InstallerAttributes GetInstallerAttributes() const override;
std::vector<std::string> GetMimeTypes() const override;
resource_coordinator::InterventionPolicyDatabase* database_;
DISALLOW_COPY_AND_ASSIGN(InterventionPolicyDatabaseComponentInstallerPolicy);
};
// Call once to make the component update service aware of the Intervention
// Policy Database component.
void RegisterInterventionPolicyDatabaseComponent(
ComponentUpdateService* cus,
resource_coordinator::InterventionPolicyDatabase* database);
} // namespace component_updater
#endif // CHROME_BROWSER_COMPONENT_UPDATER_INTERVENTION_POLICY_DATABASE_COMPONENT_INSTALLER_H_
...@@ -18,12 +18,6 @@ mojom("mojo_bindings") { ...@@ -18,12 +18,6 @@ mojom("mojo_bindings") {
] ]
} }
proto_library("intervention_policy_database_proto") {
sources = [
"intervention_policy_database.proto",
]
}
source_set("tab_manager_features") { source_set("tab_manager_features") {
public = [ public = [
"tab_manager_features.h", "tab_manager_features.h",
......
// Copyright 2018 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 "chrome/browser/resource_coordinator/intervention_policy_database.h"
#include "base/bind.h"
#include "base/files/file_util.h"
#include "base/task/post_task.h"
#include "base/task_runner_util.h"
#include "base/values.h"
#include "chrome/browser/resource_coordinator/utils.h"
namespace resource_coordinator {
InterventionPolicyDatabase::OriginInterventionPolicies::
OriginInterventionPolicies(InterventionPolicy discarding_policy,
InterventionPolicy freezing_policy)
: discarding_policy(discarding_policy), freezing_policy(freezing_policy) {}
InterventionPolicyDatabase::InterventionPolicyDatabase() {}
InterventionPolicyDatabase::~InterventionPolicyDatabase() = default;
InterventionPolicyDatabase::InterventionPolicy
InterventionPolicyDatabase::GetDiscardingPolicy(
const url::Origin& origin) const {
const auto iter = database_.find(SerializeOriginIntoDatabaseKey(origin));
if (iter == database_.end())
return OriginInterventions::DEFAULT;
return iter->second.discarding_policy;
}
InterventionPolicyDatabase::InterventionPolicy
InterventionPolicyDatabase::GetFreezingPolicy(const url::Origin& origin) const {
const auto iter = database_.find(SerializeOriginIntoDatabaseKey(origin));
if (iter == database_.end())
return OriginInterventions::DEFAULT;
return iter->second.freezing_policy;
}
void InterventionPolicyDatabase::InitializeDatabaseWithProtoFile(
const base::FilePath& proto_location,
const base::Version& version,
std::unique_ptr<base::DictionaryValue> manifest) {
// TODO(sebmarchand): Validate the version and the manifest?
base::PostTaskAndReplyWithResult(
FROM_HERE,
{base::ThreadPool(), base::TaskPriority::BEST_EFFORT,
base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN, base::MayBlock()},
base::BindOnce(
&InterventionPolicyDatabase::ReadDatabaseFromProtoFileOnSequence,
proto_location),
base::BindOnce(&InterventionPolicyDatabase::OnReadDatabaseProtoFromFile,
weak_factory_.GetWeakPtr()));
}
void InterventionPolicyDatabase::AddOriginPoliciesForTesting(
const url::Origin& origin,
OriginInterventionPolicies policies) {
database_.emplace(SerializeOriginIntoDatabaseKey(origin),
std::move(policies));
}
// static
InterventionPolicyDatabase::InterventionsMap
InterventionPolicyDatabase::ReadDatabaseFromProtoFileOnSequence(
const base::FilePath& proto_location) {
DCHECK(base::PathExists(proto_location));
InterventionsMap database;
std::string proto_str;
if (!base::ReadFileToString(proto_location, &proto_str)) {
DLOG(ERROR) << "Failed to read the interventon policy database.";
return database;
}
OriginInterventionsDatabase proto;
if (!proto.ParseFromString(proto_str)) {
DLOG(ERROR) << "Unable to parse the intervention policy database proto.";
return database;
}
database.reserve(proto.origin_interventions_size());
for (int i = 0; i < proto.origin_interventions_size(); ++i) {
const OriginInterventions& origin_interventions_proto =
proto.origin_interventions(i);
OriginInterventionPolicies origin_intervention_policies(
origin_interventions_proto.discarding_policy(),
origin_interventions_proto.freezing_policy());
database.emplace(origin_interventions_proto.host_hash(),
std::move(origin_intervention_policies));
}
return database;
}
void InterventionPolicyDatabase::OnReadDatabaseProtoFromFile(
InterventionsMap database) {
database_ = std::move(database);
}
} // namespace resource_coordinator
// Copyright 2018 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 CHROME_BROWSER_RESOURCE_COORDINATOR_INTERVENTION_POLICY_DATABASE_H_
#define CHROME_BROWSER_RESOURCE_COORDINATOR_INTERVENTION_POLICY_DATABASE_H_
#include "base/containers/flat_map.h"
#include "base/files/file_path.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/version.h"
#include "chrome/browser/resource_coordinator/intervention_policy_database.pb.h"
#include "url/origin.h"
namespace base {
class DictionaryValue;
}
namespace resource_coordinator {
// Intervention policy database, this should receive data from the
// InterventionPolicyDatabaseComponentInstallerPolicy component once it's ready.
//
// It is meant to be used to assist intervention decisions made for the
// LifecycleUnits.
class InterventionPolicyDatabase {
public:
using InterventionPolicy = OriginInterventions::InterventionPolicy;
// The intervention policies to use for a given origin.
struct OriginInterventionPolicies {
OriginInterventionPolicies(InterventionPolicy discarding_policy,
InterventionPolicy freezing_policy);
InterventionPolicy discarding_policy;
InterventionPolicy freezing_policy;
};
InterventionPolicyDatabase();
~InterventionPolicyDatabase();
InterventionPolicy GetDiscardingPolicy(const url::Origin& origin) const;
InterventionPolicy GetFreezingPolicy(const url::Origin& origin) const;
// Initialize the database with the OriginInterventionsDatabase protobuf
// stored in |proto_location|.
void InitializeDatabaseWithProtoFile(
const base::FilePath& proto_location,
const base::Version& version,
std::unique_ptr<base::DictionaryValue> manifest);
void AddOriginPoliciesForTesting(const url::Origin& origin,
OriginInterventionPolicies policies);
protected:
// Map that associates the MD5 hash of an origin to its polices.
using InterventionsMap =
base::flat_map<std::string, OriginInterventionPolicies>;
friend class InterventionPolicyDatabaseTest;
const InterventionsMap& database_for_testing() { return database_; }
private:
// Asynchronously initialize an |InterventionsMap| object with the content of
// the OriginInterventionsDatabase proto stored at |proto_location|.
static InterventionsMap ReadDatabaseFromProtoFileOnSequence(
const base::FilePath& proto_location);
// Needs to be called to initialize |database_| with the data read in
// InitializeDatabaseWithProtoAsync.
void OnReadDatabaseProtoFromFile(InterventionsMap database);
// The map that stores all the per-origin intervention policies.
InterventionsMap database_;
base::WeakPtrFactory<InterventionPolicyDatabase> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(InterventionPolicyDatabase);
};
} // namespace resource_coordinator
#endif // CHROME_BROWSER_RESOURCE_COORDINATOR_INTERVENTION_POLICY_DATABASE_H_
syntax = "proto2";
option optimize_for = LITE_RUNTIME;
// Information about an origin and the intervention it supports.
// Next Id: 4
message OriginInterventions {
// The MD5 hash of the origin, the value used to generate this hash
// should be the ‘host’ part of the origin, e.g. in
// “http://example.com/foo” the host is “example.com”.
required string host_hash = 1;
// Policy associated with an intervention. A DEFAULT value indicates
// that the existing heuristics should be applied.
enum InterventionPolicy {
OPT_IN = 0;
OPT_OUT = 1;
DEFAULT = 2;
}
// The discarding policy.
required InterventionPolicy discarding_policy = 2;
// The freezing policy.
required InterventionPolicy freezing_policy = 3;
}
// The database that contains all the origins and the interventions they
// support.
// Next Id: 2
message OriginInterventionsDatabase {
repeated OriginInterventions origin_interventions = 1;
}
// Copyright 2018 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 "chrome/browser/resource_coordinator/intervention_policy_database.h"
#include <map>
#include <string>
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/run_loop.h"
#include "base/test/task_environment.h"
#include "base/values.h"
#include "chrome/browser/resource_coordinator/intervention_policy_database.pb.h"
#include "chrome/browser/resource_coordinator/utils.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace resource_coordinator {
namespace {
using InterventionPolicy = InterventionPolicyDatabase::InterventionPolicy;
using OriginInterventionPolicies =
InterventionPolicyDatabase::OriginInterventionPolicies;
// Initialize a protobuf in |path| with the content of |data_map|.
void WriteProtoToFile(
const base::FilePath& path,
std::map<url::Origin, OriginInterventionPolicies> data_map) {
OriginInterventionsDatabase proto;
for (const auto& iter : data_map) {
OriginInterventions* origin_interventions =
proto.add_origin_interventions();
EXPECT_TRUE(origin_interventions);
origin_interventions->set_host_hash(
SerializeOriginIntoDatabaseKey(iter.first));
origin_interventions->set_discarding_policy(iter.second.discarding_policy);
origin_interventions->set_freezing_policy(iter.second.freezing_policy);
}
std::string serialized_proto;
EXPECT_TRUE(proto.SerializeToString(&serialized_proto));
EXPECT_EQ(static_cast<int>(serialized_proto.length()),
base::WriteFile(path, serialized_proto.c_str(),
serialized_proto.length()));
}
} // namespace
class InterventionPolicyDatabaseTest : public ::testing::Test {
protected:
InterventionPolicyDatabaseTest() = default;
void WaitForDatabaseToBeInitialized() {
while (intervention_policy_database_.database_for_testing().empty())
test_env_.RunUntilIdle();
}
InterventionPolicyDatabase* GetDatabase() {
return &intervention_policy_database_;
}
private:
base::test::TaskEnvironment test_env_;
InterventionPolicyDatabase intervention_policy_database_;
};
TEST_F(InterventionPolicyDatabaseTest, EndToEnd) {
base::ScopedTempDir temp_dir;
EXPECT_TRUE(temp_dir.CreateUniqueTempDir());
base::FilePath proto_path;
EXPECT_TRUE(base::CreateTemporaryFileInDir(temp_dir.GetPath(), &proto_path));
std::map<url::Origin, OriginInterventionPolicies> policy_map;
policy_map.emplace(url::Origin::Create(GURL("https://a.com")),
OriginInterventionPolicies(OriginInterventions::OPT_IN,
OriginInterventions::OPT_IN));
policy_map.emplace(url::Origin::Create(GURL("https://b.com")),
OriginInterventionPolicies(OriginInterventions::OPT_IN,
OriginInterventions::OPT_OUT));
policy_map.emplace(url::Origin::Create(GURL("https://c.com")),
OriginInterventionPolicies(OriginInterventions::OPT_OUT,
OriginInterventions::OPT_OUT));
policy_map.emplace(url::Origin::Create(GURL("https://d.com")),
OriginInterventionPolicies(OriginInterventions::OPT_IN,
OriginInterventions::DEFAULT));
WriteProtoToFile(proto_path, policy_map);
GetDatabase()->InitializeDatabaseWithProtoFile(proto_path, base::Version(),
nullptr);
WaitForDatabaseToBeInitialized();
for (const auto& iter : policy_map) {
EXPECT_EQ(iter.second.discarding_policy,
GetDatabase()->GetDiscardingPolicy(iter.first));
EXPECT_EQ(iter.second.freezing_policy,
GetDatabase()->GetFreezingPolicy(iter.first));
}
}
} // namespace resource_coordinator
...@@ -11,8 +11,7 @@ namespace resource_coordinator { ...@@ -11,8 +11,7 @@ namespace resource_coordinator {
ResourceCoordinatorParts::ResourceCoordinatorParts() ResourceCoordinatorParts::ResourceCoordinatorParts()
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
: tab_manager_(&tab_load_tracker_), : tab_manager_(&tab_load_tracker_),
tab_lifecycle_unit_source_(tab_manager_.intervention_policy_database(), tab_lifecycle_unit_source_(tab_manager_.usage_clock())
tab_manager_.usage_clock())
#endif #endif
{ {
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
#include "chrome/browser/media/webrtc/media_stream_capture_indicator.h" #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/resource_coordinator/intervention_policy_database.h"
#include "chrome/browser/resource_coordinator/lifecycle_unit_state.mojom.h" #include "chrome/browser/resource_coordinator/lifecycle_unit_state.mojom.h"
#include "chrome/browser/resource_coordinator/local_site_characteristics_data_store_factory.h" #include "chrome/browser/resource_coordinator/local_site_characteristics_data_store_factory.h"
#include "chrome/browser/resource_coordinator/tab_activity_watcher.h" #include "chrome/browser/resource_coordinator/tab_activity_watcher.h"
...@@ -1027,22 +1026,6 @@ void TabLifecycleUnitSource::TabLifecycleUnit::CanFreezeHeuristicsChecks( ...@@ -1027,22 +1026,6 @@ void TabLifecycleUnitSource::TabLifecycleUnit::CanFreezeHeuristicsChecks(
DecisionFailureReason::LIFECYCLES_ENTERPRISE_POLICY_OPT_OUT); DecisionFailureReason::LIFECYCLES_ENTERPRISE_POLICY_OPT_OUT);
} }
// Apply intervention database opt-in/opt-out (policy is per origin).
auto intervention_policy =
GetTabSource()->intervention_policy_database()->GetFreezingPolicy(
url::Origin::Create(web_contents()->GetLastCommittedURL()));
switch (intervention_policy) {
case OriginInterventions::OPT_IN:
decision_details->AddReason(DecisionSuccessReason::GLOBAL_WHITELIST);
break;
case OriginInterventions::OPT_OUT:
decision_details->AddReason(DecisionFailureReason::GLOBAL_BLACKLIST);
break;
case OriginInterventions::DEFAULT:
break;
}
// Apply origin trial opt-in/opt-out (policy is per page). // Apply origin trial opt-in/opt-out (policy is per page).
switch (origin_trial_freeze_policy_) { switch (origin_trial_freeze_policy_) {
case performance_manager::mojom::InterventionPolicy::kUnknown: case performance_manager::mojom::InterventionPolicy::kUnknown:
...@@ -1070,21 +1053,6 @@ void TabLifecycleUnitSource::TabLifecycleUnit:: ...@@ -1070,21 +1053,6 @@ void TabLifecycleUnitSource::TabLifecycleUnit::
decision_details->AddReason( decision_details->AddReason(
DecisionFailureReason::LIFECYCLES_ENTERPRISE_POLICY_OPT_OUT); DecisionFailureReason::LIFECYCLES_ENTERPRISE_POLICY_OPT_OUT);
} }
auto intervention_policy =
GetTabSource()->intervention_policy_database()->GetDiscardingPolicy(
url::Origin::Create(web_contents()->GetLastCommittedURL()));
switch (intervention_policy) {
case OriginInterventions::OPT_IN:
decision_details->AddReason(DecisionSuccessReason::GLOBAL_WHITELIST);
break;
case OriginInterventions::OPT_OUT:
decision_details->AddReason(DecisionFailureReason::GLOBAL_BLACKLIST);
break;
case OriginInterventions::DEFAULT:
break;
}
} }
LifecycleUnitDiscardReason LifecycleUnitDiscardReason
......
...@@ -173,16 +173,12 @@ class TabLifecycleStateObserver ...@@ -173,16 +173,12 @@ class TabLifecycleStateObserver
}; };
TabLifecycleUnitSource::TabLifecycleUnitSource( TabLifecycleUnitSource::TabLifecycleUnitSource(
InterventionPolicyDatabase* intervention_policy_database,
UsageClock* usage_clock) UsageClock* usage_clock)
: browser_tab_strip_tracker_(this, nullptr, this), : browser_tab_strip_tracker_(this, nullptr, this),
intervention_policy_database_(intervention_policy_database),
usage_clock_(usage_clock) { usage_clock_(usage_clock) {
// In unit tests, tabs might already exist when TabLifecycleUnitSource is // In unit tests, tabs might already exist when TabLifecycleUnitSource is
// instantiated. No TabLifecycleUnit is created for these tabs. // instantiated. No TabLifecycleUnit is created for these tabs.
DCHECK(intervention_policy_database_);
browser_tab_strip_tracker_.Init(); browser_tab_strip_tracker_.Init();
} }
......
...@@ -27,7 +27,6 @@ class WebContents; ...@@ -27,7 +27,6 @@ class WebContents;
namespace resource_coordinator { namespace resource_coordinator {
class InterventionPolicyDatabase;
class TabLifecylesEnterprisePreferenceMonitor; class TabLifecylesEnterprisePreferenceMonitor;
class TabLifecycleObserver; class TabLifecycleObserver;
class TabLifecycleStateObserver; class TabLifecycleStateObserver;
...@@ -43,7 +42,6 @@ class TabLifecycleUnitSource : public BrowserListObserver, ...@@ -43,7 +42,6 @@ class TabLifecycleUnitSource : public BrowserListObserver,
class LifecycleStateObserver; class LifecycleStateObserver;
TabLifecycleUnitSource( TabLifecycleUnitSource(
InterventionPolicyDatabase* intervention_policy_database,
UsageClock* usage_clock); UsageClock* usage_clock);
~TabLifecycleUnitSource() override; ~TabLifecycleUnitSource() override;
...@@ -64,10 +62,6 @@ class TabLifecycleUnitSource : public BrowserListObserver, ...@@ -64,10 +62,6 @@ class TabLifecycleUnitSource : public BrowserListObserver,
// Pretend that |tab_strip| is the TabStripModel of the focused window. // Pretend that |tab_strip| is the TabStripModel of the focused window.
void SetFocusedTabStripModelForTesting(TabStripModel* tab_strip); void SetFocusedTabStripModelForTesting(TabStripModel* tab_strip);
InterventionPolicyDatabase* intervention_policy_database() const {
return intervention_policy_database_;
}
// Returns the state of the tab lifecycles feature enterprise control. This // Returns the state of the tab lifecycles feature enterprise control. This
// returns true if the feature should be enabled, false otherwise. // returns true if the feature should be enabled, false otherwise.
bool tab_lifecycles_enterprise_policy() const { bool tab_lifecycles_enterprise_policy() const {
...@@ -184,10 +178,6 @@ class TabLifecycleUnitSource : public BrowserListObserver, ...@@ -184,10 +178,6 @@ class TabLifecycleUnitSource : public BrowserListObserver,
// changes. // changes.
base::ObserverList<TabLifecycleObserver>::Unchecked tab_lifecycle_observers_; base::ObserverList<TabLifecycleObserver>::Unchecked tab_lifecycle_observers_;
// The intervention policy database used to assist freezing/discarding
// decisions.
InterventionPolicyDatabase* intervention_policy_database_;
// A clock that advances when Chrome is in use. // A clock that advances when Chrome is in use.
UsageClock* const usage_clock_; UsageClock* const usage_clock_;
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
#include "chrome/browser/media/webrtc/media_stream_capture_indicator.h" #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h"
#include "chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.h" #include "chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.h"
#include "chrome/browser/resource_coordinator/intervention_policy_database.h"
#include "chrome/browser/resource_coordinator/lifecycle_unit_observer.h" #include "chrome/browser/resource_coordinator/lifecycle_unit_observer.h"
#include "chrome/browser/resource_coordinator/local_site_characteristics_data_unittest_utils.h" #include "chrome/browser/resource_coordinator/local_site_characteristics_data_unittest_utils.h"
#include "chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.h" #include "chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.h"
...@@ -595,108 +594,6 @@ TEST_F(TabLifecycleUnitTest, ...@@ -595,108 +594,6 @@ TEST_F(TabLifecycleUnitTest,
DecisionFailureReason::HEURISTIC_INSUFFICIENT_OBSERVATION, nullptr); DecisionFailureReason::HEURISTIC_INSUFFICIENT_OBSERVATION, nullptr);
} }
TEST_F(TabLifecycleUnitTest, CannotProactivelyDiscardTabIfOriginOptedOut) {
InterventionPolicyDatabase* policy_db =
GetTabLifecycleUnitSource()->intervention_policy_database();
policy_db->AddOriginPoliciesForTesting(
url::Origin::Create(web_contents_->GetLastCommittedURL()),
{OriginInterventions::OPT_OUT, OriginInterventions::DEFAULT});
TabLifecycleUnit tab_lifecycle_unit(GetTabLifecycleUnitSource(), &observers_,
usage_clock_.get(), web_contents_,
tab_strip_model_.get());
// Advance time enough that the tab is urgent discardable.
test_clock_.Advance(kBackgroundUrgentProtectionTime);
// Proactive discarding shouldn't be possible, urgent and external discarding
// should still be possible.
{
DecisionDetails decision_details;
EXPECT_FALSE(tab_lifecycle_unit.CanDiscard(
LifecycleUnitDiscardReason::PROACTIVE, &decision_details));
EXPECT_FALSE(decision_details.IsPositive());
EXPECT_EQ(DecisionFailureReason::GLOBAL_BLACKLIST,
decision_details.FailureReason());
EXPECT_EQ(1U, decision_details.reasons().size());
}
{
DecisionDetails decision_details;
EXPECT_TRUE(tab_lifecycle_unit.CanDiscard(
LifecycleUnitDiscardReason::URGENT, &decision_details));
EXPECT_TRUE(decision_details.IsPositive());
}
{
DecisionDetails decision_details;
EXPECT_TRUE(tab_lifecycle_unit.CanDiscard(
LifecycleUnitDiscardReason::EXTERNAL, &decision_details));
EXPECT_TRUE(decision_details.IsPositive());
}
}
TEST_F(TabLifecycleUnitTest, CannotFreezeTabIfOriginOptedOut) {
auto* policy_db = GetTabLifecycleUnitSource()->intervention_policy_database();
policy_db->AddOriginPoliciesForTesting(
url::Origin::Create(web_contents_->GetLastCommittedURL()),
InterventionPolicyDatabase::OriginInterventionPolicies(
OriginInterventions::DEFAULT, OriginInterventions::OPT_OUT));
TabLifecycleUnit tab_lifecycle_unit(GetTabLifecycleUnitSource(), &observers_,
usage_clock_.get(), web_contents_,
tab_strip_model_.get());
TabLoadTracker::Get()->TransitionStateForTesting(web_contents_,
LoadingState::LOADED);
DecisionDetails decision_details;
EXPECT_FALSE(tab_lifecycle_unit.CanFreeze(&decision_details));
EXPECT_FALSE(decision_details.IsPositive());
EXPECT_EQ(DecisionFailureReason::GLOBAL_BLACKLIST,
decision_details.FailureReason());
}
TEST_F(TabLifecycleUnitTest, OptInTabsGetsDiscarded) {
auto* policy_db = GetTabLifecycleUnitSource()->intervention_policy_database();
policy_db->AddOriginPoliciesForTesting(
url::Origin::Create(web_contents_->GetLastCommittedURL()),
InterventionPolicyDatabase::OriginInterventionPolicies(
OriginInterventions::OPT_IN, OriginInterventions::DEFAULT));
TabLifecycleUnit tab_lifecycle_unit(GetTabLifecycleUnitSource(), &observers_,
usage_clock_.get(), web_contents_,
tab_strip_model_.get());
// Mark the tab as recently audible, this should protect it from being
// discarded.
tab_lifecycle_unit.SetRecentlyAudible(true);
DecisionDetails decision_details;
EXPECT_TRUE(tab_lifecycle_unit.CanDiscard(
LifecycleUnitDiscardReason::PROACTIVE, &decision_details));
EXPECT_TRUE(decision_details.IsPositive());
EXPECT_EQ(DecisionSuccessReason::GLOBAL_WHITELIST,
decision_details.SuccessReason());
}
TEST_F(TabLifecycleUnitTest, CanFreezeOptedInTabs) {
auto* policy_db = GetTabLifecycleUnitSource()->intervention_policy_database();
policy_db->AddOriginPoliciesForTesting(
url::Origin::Create(web_contents_->GetLastCommittedURL()),
{OriginInterventions::DEFAULT, OriginInterventions::OPT_IN});
TabLifecycleUnit tab_lifecycle_unit(GetTabLifecycleUnitSource(), &observers_,
usage_clock_.get(), web_contents_,
tab_strip_model_.get());
TabLoadTracker::Get()->TransitionStateForTesting(web_contents_,
LoadingState::LOADED);
// Mark the tab as recently audible, this should protect it from being frozen.
tab_lifecycle_unit.SetRecentlyAudible(true);
DecisionDetails decision_details;
EXPECT_TRUE(tab_lifecycle_unit.CanFreeze(&decision_details));
EXPECT_TRUE(decision_details.IsPositive());
EXPECT_EQ(DecisionSuccessReason::GLOBAL_WHITELIST,
decision_details.SuccessReason());
}
TEST_F(TabLifecycleUnitTest, CannotFreezeAFrozenTab) { TEST_F(TabLifecycleUnitTest, CannotFreezeAFrozenTab) {
TabLifecycleUnit tab_lifecycle_unit(GetTabLifecycleUnitSource(), &observers_, TabLifecycleUnit tab_lifecycle_unit(GetTabLifecycleUnitSource(), &observers_,
usage_clock_.get(), web_contents_, usage_clock_.get(), web_contents_,
...@@ -885,12 +782,9 @@ TEST_F(TabLifecycleUnitTest, DisableHeuristicsFlag) { ...@@ -885,12 +782,9 @@ TEST_F(TabLifecycleUnitTest, DisableHeuristicsFlag) {
EXPECT_TRUE(decision_details.IsPositive()); EXPECT_TRUE(decision_details.IsPositive());
decision_details.Clear(); decision_details.Clear();
// Use one of the heuristics on the tab to prevent it from being discarded. // Use one of the heuristics on the tab to prevent it from being frozen or
InterventionPolicyDatabase* policy_db = // discarded.
GetTabLifecycleUnitSource()->intervention_policy_database(); ScopedEnterpriseOptOut enterprise_opt_out;
policy_db->AddOriginPoliciesForTesting(
url::Origin::Create(web_contents_->GetLastCommittedURL()),
{OriginInterventions::OPT_OUT, OriginInterventions::OPT_OUT});
EXPECT_FALSE(tab_lifecycle_unit.CanFreeze(&decision_details)); EXPECT_FALSE(tab_lifecycle_unit.CanFreeze(&decision_details));
EXPECT_FALSE(decision_details.IsPositive()); EXPECT_FALSE(decision_details.IsPositive());
......
...@@ -169,7 +169,6 @@ TabManager::TabManager(TabLoadTracker* tab_load_tracker) ...@@ -169,7 +169,6 @@ TabManager::TabManager(TabLoadTracker* tab_load_tracker)
proactive_freeze_discard_params_ = proactive_freeze_discard_params_ =
GetStaticProactiveTabFreezeAndDiscardParams(); GetStaticProactiveTabFreezeAndDiscardParams();
tab_load_tracker_->AddObserver(this); tab_load_tracker_->AddObserver(this);
intervention_policy_database_.reset(new InterventionPolicyDatabase());
// TabManager works in the absence of DesktopSessionDurationTracker for tests. // TabManager works in the absence of DesktopSessionDurationTracker for tests.
if (metrics::DesktopSessionDurationTracker::IsInitialized()) if (metrics::DesktopSessionDurationTracker::IsInitialized())
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include "base/timer/timer.h" #include "base/timer/timer.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.h" #include "chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.h"
#include "chrome/browser/resource_coordinator/intervention_policy_database.h"
#include "chrome/browser/resource_coordinator/lifecycle_unit.h" #include "chrome/browser/resource_coordinator/lifecycle_unit.h"
#include "chrome/browser/resource_coordinator/lifecycle_unit_observer.h" #include "chrome/browser/resource_coordinator/lifecycle_unit_observer.h"
#include "chrome/browser/resource_coordinator/lifecycle_unit_source_observer.h" #include "chrome/browser/resource_coordinator/lifecycle_unit_source_observer.h"
...@@ -159,10 +158,6 @@ class TabManager : public LifecycleUnitObserver, ...@@ -159,10 +158,6 @@ class TabManager : public LifecycleUnitObserver,
// non-zero only during session restore. // non-zero only during session restore.
int restored_tab_count() const { return restored_tab_count_; } int restored_tab_count() const { return restored_tab_count_; }
InterventionPolicyDatabase* intervention_policy_database() {
return intervention_policy_database_.get();
}
UsageClock* usage_clock() { return &usage_clock_; } UsageClock* usage_clock() { return &usage_clock_; }
// Returns true if the tab was created by session restore and has not finished // Returns true if the tab was created by session restore and has not finished
...@@ -481,10 +476,6 @@ class TabManager : public LifecycleUnitObserver, ...@@ -481,10 +476,6 @@ class TabManager : public LifecycleUnitObserver,
// session restore. // session restore.
std::unique_ptr<TabManagerStatsCollector> stats_collector_; std::unique_ptr<TabManagerStatsCollector> stats_collector_;
// The intervention policy database, should be initialized by
// InterventionPolicyDatabaseComponentInstallerPolicy.
std::unique_ptr<InterventionPolicyDatabase> intervention_policy_database_;
// Last time at which a LifecycleUnit was temporarily unfrozen. // Last time at which a LifecycleUnit was temporarily unfrozen.
base::TimeTicks last_unfreeze_time_; base::TimeTicks last_unfreeze_time_;
......
...@@ -3736,7 +3736,6 @@ test("unit_tests") { ...@@ -3736,7 +3736,6 @@ test("unit_tests") {
"../browser/resource_coordinator/background_tab_navigation_throttle_unittest.cc", "../browser/resource_coordinator/background_tab_navigation_throttle_unittest.cc",
"../browser/resource_coordinator/decision_details_unittest.cc", "../browser/resource_coordinator/decision_details_unittest.cc",
"../browser/resource_coordinator/discard_metrics_lifecycle_unit_observer_unittest.cc", "../browser/resource_coordinator/discard_metrics_lifecycle_unit_observer_unittest.cc",
"../browser/resource_coordinator/intervention_policy_database_unittest.cc",
"../browser/resource_coordinator/leveldb_site_characteristics_database_unittest.cc", "../browser/resource_coordinator/leveldb_site_characteristics_database_unittest.cc",
"../browser/resource_coordinator/lifecycle_unit_base_unittest.cc", "../browser/resource_coordinator/lifecycle_unit_base_unittest.cc",
"../browser/resource_coordinator/lifecycle_unit_unittest.cc", "../browser/resource_coordinator/lifecycle_unit_unittest.cc",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment