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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_STARTUP_DATA_H_
#define CHROME_BROWSER_STARTUP_DATA_H_
#include <memory>
#include "base/memory/scoped_refptr.h"
#include "build/build_config.h"
#include "components/leveldb_proto/public/proto_database_provider.h"
#include "extensions/buildflags/buildflags.h"
#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS)
namespace extensions {
class ExtensionsBrowserClient;
}
#endif
namespace user_prefs {
class PrefRegistrySyncable;
}
namespace policy {
class ProfilePolicyConnector;
class SchemaRegistryService;
class UserCloudPolicyManager;
} // namespace policy
namespace sync_preferences {
class PrefServiceSyncable;
}
class PrefService;
class ProfileKey;
class ChromeFeatureListCreator;
// The StartupData owns any pre-created objects in //chrome before the full
// browser starts, including the ChromeFeatureListCreator and the Profile's
// PrefService. See doc:
// https://docs.google.com/document/d/1ybmGWRWXu0aYNxA99IcHFesDAslIaO1KFP6eGdHTJaE/edit#heading=h.7bk05syrcom
class StartupData {
public:
StartupData();
StartupData(const StartupData&) = delete;
StartupData& operator=(const StartupData&) = delete;
~StartupData();
// Records core profile settings into the SystemProfileProto. It is important
// when Chrome is running in the reduced mode, which doesn't start UMA
// recording but persists all of the UMA data into a memory mapped file. The
// file will be picked up by Chrome next time it is launched in the full
// browser mode.
void RecordCoreSystemProfile();
#if BUILDFLAG(IS_ANDROID)
// Early initialization of the profile key for reduced mode startup.
void InitProfileKey();
// Initializes all necessary parameters to create the Profile's PrefService.
void CreateProfilePrefService();
// Returns whether a PrefService has been created.
bool HasBuiltProfilePrefService();
ProfileKey* GetProfileKey();
// Passes ownership of the |key_| to the caller.
std::unique_ptr<ProfileKey> TakeProfileKey();
// Passes ownership of the |schema_registry_service_| to the caller.
std::unique_ptr<policy::SchemaRegistryService> TakeSchemaRegistryService();
// Passes ownership of the |user_cloud_policy_manager_| to the caller.
std::unique_ptr<policy::UserCloudPolicyManager> TakeUserCloudPolicyManager();
// Passes ownership of the |profile_policy_connector_| to the caller.
std::unique_ptr<policy::ProfilePolicyConnector> TakeProfilePolicyConnector();
// Passes ownership of the |pref_registry_| to the caller.
scoped_refptr<user_prefs::PrefRegistrySyncable> TakePrefRegistrySyncable();
// Passes ownership of the |prefs_| to the caller.
std::unique_ptr<sync_preferences::PrefServiceSyncable>
TakeProfilePrefService();
// Passes ownership of the |proto_db_provider_| to the caller.
std::unique_ptr<leveldb_proto::ProtoDatabaseProvider>
TakeProtoDatabaseProvider();
#endif
#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS)
// Passes ownership of the `extensions_browser_client_` to the caller.
std::unique_ptr<extensions::ExtensionsBrowserClient>
TakeExtensionsBrowserClient();
#endif
// TODO(martinkong): Remove this function and replace its usage with
// ChromeFeatureListCreator::GetInstance()
ChromeFeatureListCreator* chrome_feature_list_creator();
private:
#if BUILDFLAG(IS_ANDROID)
void PreProfilePrefServiceInit();
void CreateServicesInternal();
std::unique_ptr<ProfileKey> key_;
std::unique_ptr<policy::SchemaRegistryService> schema_registry_service_;
std::unique_ptr<policy::UserCloudPolicyManager> user_cloud_policy_manager_;
std::unique_ptr<policy::ProfilePolicyConnector> profile_policy_connector_;
scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry_;
std::unique_ptr<sync_preferences::PrefServiceSyncable> prefs_;
std::unique_ptr<leveldb_proto::ProtoDatabaseProvider> proto_db_provider_;
#endif
#if BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS)
std::unique_ptr<extensions::ExtensionsBrowserClient>
extensions_browser_client_;
#endif
};
#endif // CHROME_BROWSER_STARTUP_DATA_H_
|