| Index: components/sync/driver/about_sync_util.cc
|
| diff --git a/components/sync/driver/about_sync_util.cc b/components/sync/driver/about_sync_util.cc
|
| index b1863dcb08a7e56ad182d259cf16a1a688ba573b..3e8cfbf6ef60bc830eacf87b5d3b55f17638c9a9 100644
|
| --- a/components/sync/driver/about_sync_util.cc
|
| +++ b/components/sync/driver/about_sync_util.cc
|
| @@ -22,7 +22,7 @@
|
| #include "components/sync/protocol/proto_enum_conversions.h"
|
|
|
| using base::DictionaryValue;
|
| -using base::ListValue;
|
| +using base::Value;
|
|
|
| namespace syncer {
|
|
|
| @@ -70,39 +70,38 @@ namespace {
|
| // Creates a 'section' for display on about:sync, consisting of a title and a
|
| // list of fields. Returns a pointer to the new section. Note that
|
| // |parent_list|, not the caller, owns the newly added section.
|
| -base::ListValue* AddSection(base::ListValue* parent_list,
|
| - const std::string& title) {
|
| - std::unique_ptr<base::DictionaryValue> section(new base::DictionaryValue());
|
| - base::ListValue* section_contents = new base::ListValue();
|
| - section->SetString("title", title);
|
| - section->Set("data", section_contents);
|
| - section->SetBoolean("is_sensitive", false);
|
| +base::Value* AddSection(base::Value* parent_list, const std::string& title) {
|
| + base::DictionaryValue section;
|
| + base::Value* section_contents = new base::Value(base::Value::Type::LIST);
|
| + section.SetString("title", title);
|
| + section.Set("data", section_contents);
|
| + section.SetBoolean("is_sensitive", false);
|
| // If the following |Append| results in a reallocation, pointers to the
|
| // members of |parent_list| will be invalidated. This would result in
|
| // use-after-free in |*SyncStat::SetValue|. This is why the following CHECK is
|
| // necessary to ensure no reallocation takes place.
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - CHECK_LT(parent_list->GetSize(), parent_list->capacity());
|
| - parent_list->Append(std::move(section));
|
| + CHECK_LT(parent_list->GetList().size(), parent_list->GetList().capacity());
|
| + parent_list->GetList().push_back(std::move(section));
|
| return section_contents;
|
| }
|
|
|
| // Same as AddSection, but for data that should be elided when dumped into text
|
| // form and posted in a public forum (e.g. unique identifiers).
|
| -base::ListValue* AddSensitiveSection(base::ListValue* parent_list,
|
| - const std::string& title) {
|
| - std::unique_ptr<base::DictionaryValue> section(new base::DictionaryValue());
|
| - base::ListValue* section_contents = new base::ListValue();
|
| - section->SetString("title", title);
|
| - section->Set("data", section_contents);
|
| - section->SetBoolean("is_sensitive", true);
|
| +base::Value* AddSensitiveSection(base::Value* parent_list,
|
| + const std::string& title) {
|
| + base::DictionaryValue section;
|
| + base::Value* section_contents = new base::Value(base::Value::Type::LIST);
|
| + section.SetString("title", title);
|
| + section.Set("data", section_contents);
|
| + section.SetBoolean("is_sensitive", true);
|
| // If the following |Append| results in a reallocation, pointers to
|
| // |parent_list| and its members will be invalidated. This would result in
|
| // use-after-free in |*SyncStat::SetValue|. This is why the following CHECK is
|
| // necessary to ensure no reallocation takes place.
|
| - CHECK_LT(parent_list->GetSize(), parent_list->capacity());
|
| + CHECK_LT(parent_list->GetList().size(), parent_list->GetList().capacity());
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - parent_list->Append(std::move(section));
|
| + parent_list->GetList().push_back(std::move(section));
|
| return section_contents;
|
| }
|
|
|
| @@ -115,7 +114,7 @@ base::ListValue* AddSensitiveSection(base::ListValue* parent_list,
|
|
|
| class StringSyncStat {
|
| public:
|
| - StringSyncStat(base::ListValue* section, const std::string& key);
|
| + StringSyncStat(base::Value* section, const std::string& key);
|
| void SetValue(const std::string& value);
|
| void SetValue(const base::string16& value);
|
|
|
| @@ -124,8 +123,7 @@ class StringSyncStat {
|
| base::DictionaryValue* stat_;
|
| };
|
|
|
| -StringSyncStat::StringSyncStat(base::ListValue* section,
|
| - const std::string& key) {
|
| +StringSyncStat::StringSyncStat(base::Value* section, const std::string& key) {
|
| stat_ = new base::DictionaryValue();
|
| stat_->SetString("stat_name", key);
|
| stat_->SetString("stat_value", "Uninitialized");
|
| @@ -135,9 +133,9 @@ StringSyncStat::StringSyncStat(base::ListValue* section,
|
| // other SyncStats will be invalidated. This is why the following check is
|
| // necessary, so that it is guaranteed that a reallocation will not happen.
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - CHECK_LT(section->GetSize(), section->capacity());
|
| - section->Append(base::WrapUnique(stat_));
|
| - section->GetDictionary(section->GetSize() - 1, &stat_);
|
| + CHECK_LT(section->GetList().size(), section->GetList().capacity());
|
| + section->GetList().push_back(std::move(*stat_));
|
| + stat_ = static_cast<base::DictionaryValue*>(§ion->GetList().back());
|
| }
|
|
|
| void StringSyncStat::SetValue(const std::string& value) {
|
| @@ -152,7 +150,7 @@ void StringSyncStat::SetValue(const base::string16& value) {
|
|
|
| class BoolSyncStat {
|
| public:
|
| - BoolSyncStat(base::ListValue* section, const std::string& key);
|
| + BoolSyncStat(base::Value* section, const std::string& key);
|
| void SetValue(bool value);
|
|
|
| private:
|
| @@ -160,7 +158,7 @@ class BoolSyncStat {
|
| base::DictionaryValue* stat_;
|
| };
|
|
|
| -BoolSyncStat::BoolSyncStat(base::ListValue* section, const std::string& key) {
|
| +BoolSyncStat::BoolSyncStat(base::Value* section, const std::string& key) {
|
| stat_ = new base::DictionaryValue();
|
| stat_->SetString("stat_name", key);
|
| stat_->SetBoolean("stat_value", false);
|
| @@ -170,9 +168,9 @@ BoolSyncStat::BoolSyncStat(base::ListValue* section, const std::string& key) {
|
| // other SyncStats will be invalidated. This is why the following check is
|
| // necessary, so that it is guaranteed that a reallocation will not happen.
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - CHECK_LT(section->GetSize(), section->capacity());
|
| - section->Append(base::WrapUnique(stat_));
|
| - section->GetDictionary(section->GetSize() - 1, &stat_);
|
| + CHECK_LT(section->GetList().size(), section->GetList().capacity());
|
| + section->GetList().push_back(std::move(*stat_));
|
| + stat_ = static_cast<base::DictionaryValue*>(§ion->GetList().back());
|
| }
|
|
|
| void BoolSyncStat::SetValue(bool value) {
|
| @@ -182,7 +180,7 @@ void BoolSyncStat::SetValue(bool value) {
|
|
|
| class IntSyncStat {
|
| public:
|
| - IntSyncStat(base::ListValue* section, const std::string& key);
|
| + IntSyncStat(base::Value* section, const std::string& key);
|
| void SetValue(int value);
|
|
|
| private:
|
| @@ -190,7 +188,7 @@ class IntSyncStat {
|
| base::DictionaryValue* stat_;
|
| };
|
|
|
| -IntSyncStat::IntSyncStat(base::ListValue* section, const std::string& key) {
|
| +IntSyncStat::IntSyncStat(base::Value* section, const std::string& key) {
|
| stat_ = new base::DictionaryValue();
|
| stat_->SetString("stat_name", key);
|
| stat_->SetInteger("stat_value", 0);
|
| @@ -200,9 +198,9 @@ IntSyncStat::IntSyncStat(base::ListValue* section, const std::string& key) {
|
| // other SyncStats will be invalidated. This is why the following check is
|
| // necessary, so that it is guaranteed that a reallocation will not happen.
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - CHECK_LT(section->GetSize(), section->capacity());
|
| - section->Append(base::WrapUnique(stat_));
|
| - section->GetDictionary(section->GetSize() - 1, &stat_);
|
| + CHECK_LT(section->GetList().size(), section->GetList().capacity());
|
| + section->GetList().push_back(std::move(*stat_));
|
| + stat_ = static_cast<base::DictionaryValue*>(§ion->GetList().back());
|
| }
|
|
|
| void IntSyncStat::SetValue(int value) {
|
| @@ -284,44 +282,44 @@ std::unique_ptr<base::DictionaryValue> ConstructAboutInformation(
|
| new base::DictionaryValue());
|
|
|
| // 'details': A list of sections.
|
| - base::ListValue* stats_list = new base::ListValue();
|
| + base::Value* stats_list = new base::Value(base::Value::Type::LIST);
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - stats_list->Reserve(12);
|
| + stats_list->GetList().reserve(12);
|
|
|
| // The following lines define the sections and their fields. For each field,
|
| // a class is instantiated, which allows us to reference the fields in
|
| // 'setter' code later on in this function.
|
| - base::ListValue* section_summary = AddSection(stats_list, "Summary");
|
| + base::Value* section_summary = AddSection(stats_list, "Summary");
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_summary->Reserve(1);
|
| + section_summary->GetList().reserve(1);
|
| StringSyncStat summary_string(section_summary, "Summary");
|
|
|
| - base::ListValue* section_version = AddSection(stats_list, "Version Info");
|
| + base::Value* section_version = AddSection(stats_list, "Version Info");
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_version->Reserve(2);
|
| + section_version->GetList().reserve(2);
|
| StringSyncStat client_version(section_version, "Client Version");
|
| StringSyncStat server_url(section_version, "Server URL");
|
|
|
| - base::ListValue* section_identity =
|
| + base::Value* section_identity =
|
| AddSensitiveSection(stats_list, kIdentityTitle);
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_identity->Reserve(3);
|
| + section_identity->GetList().reserve(3);
|
| StringSyncStat sync_id(section_identity, "Sync Client ID");
|
| StringSyncStat invalidator_id(section_identity, "Invalidator Client ID");
|
| StringSyncStat username(section_identity, "Username");
|
|
|
| - base::ListValue* section_credentials = AddSection(stats_list, "Credentials");
|
| + base::Value* section_credentials = AddSection(stats_list, "Credentials");
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_credentials->Reserve(4);
|
| + section_credentials->GetList().reserve(4);
|
| StringSyncStat request_token_time(section_credentials, "Requested Token");
|
| StringSyncStat receive_token_time(section_credentials, "Received Token");
|
| StringSyncStat token_request_status(section_credentials,
|
| "Token Request Status");
|
| StringSyncStat next_token_request(section_credentials, "Next Token Request");
|
|
|
| - base::ListValue* section_local = AddSection(stats_list, "Local State");
|
| + base::Value* section_local = AddSection(stats_list, "Local State");
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_local->Reserve(7);
|
| + section_local->GetList().reserve(7);
|
| StringSyncStat server_connection(section_local, "Server Connection");
|
| StringSyncStat last_synced(section_local, "Last Synced");
|
| BoolSyncStat is_setup_complete(section_local,
|
| @@ -333,17 +331,17 @@ std::unique_ptr<base::DictionaryValue> ConstructAboutInformation(
|
| "Local sync backend enabled");
|
| StringSyncStat local_backend_path(section_local, "Local backend path");
|
|
|
| - base::ListValue* section_network = AddSection(stats_list, "Network");
|
| + base::Value* section_network = AddSection(stats_list, "Network");
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_network->Reserve(3);
|
| + section_network->GetList().reserve(3);
|
| BoolSyncStat is_throttled(section_network, "Throttled");
|
| StringSyncStat retry_time(section_network, "Retry time (maybe stale)");
|
| BoolSyncStat are_notifications_enabled(section_network,
|
| "Notifications Enabled");
|
|
|
| - base::ListValue* section_encryption = AddSection(stats_list, "Encryption");
|
| + base::Value* section_encryption = AddSection(stats_list, "Encryption");
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_encryption->Reserve(9);
|
| + section_encryption->GetList().reserve(9);
|
| BoolSyncStat is_using_explicit_passphrase(section_encryption,
|
| "Explicit Passphrase");
|
| BoolSyncStat is_passphrase_required(section_encryption,
|
| @@ -359,18 +357,18 @@ std::unique_ptr<base::DictionaryValue> ConstructAboutInformation(
|
| StringSyncStat passphrase_type(section_encryption, "Passphrase Type");
|
| StringSyncStat passphrase_time(section_encryption, "Passphrase Time");
|
|
|
| - base::ListValue* section_last_session =
|
| + base::Value* section_last_session =
|
| AddSection(stats_list, "Status from Last Completed Session");
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_last_session->Reserve(4);
|
| + section_last_session->GetList().reserve(4);
|
| StringSyncStat session_source(section_last_session, "Sync Source");
|
| StringSyncStat get_key_result(section_last_session, "GetKey Step Result");
|
| StringSyncStat download_result(section_last_session, "Download Step Result");
|
| StringSyncStat commit_result(section_last_session, "Commit Step Result");
|
|
|
| - base::ListValue* section_counters = AddSection(stats_list, "Running Totals");
|
| + base::Value* section_counters = AddSection(stats_list, "Running Totals");
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_counters->Reserve(7);
|
| + section_counters->GetList().reserve(7);
|
| IntSyncStat notifications_received(section_counters,
|
| "Notifications Received");
|
| IntSyncStat updates_received(section_counters, "Updates Downloaded");
|
| @@ -382,27 +380,27 @@ std::unique_ptr<base::DictionaryValue> ConstructAboutInformation(
|
| IntSyncStat conflicts_resolved_server_wins(section_counters,
|
| "Conflicts Resolved: Server Wins");
|
|
|
| - base::ListValue* section_this_cycle =
|
| + base::Value* section_this_cycle =
|
| AddSection(stats_list, "Transient Counters (this cycle)");
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_this_cycle->Reserve(4);
|
| + section_this_cycle->GetList().reserve(4);
|
| IntSyncStat encryption_conflicts(section_this_cycle, "Encryption Conflicts");
|
| IntSyncStat hierarchy_conflicts(section_this_cycle, "Hierarchy Conflicts");
|
| IntSyncStat server_conflicts(section_this_cycle, "Server Conflicts");
|
| IntSyncStat committed_items(section_this_cycle, "Committed Items");
|
|
|
| - base::ListValue* section_that_cycle = AddSection(
|
| + base::Value* section_that_cycle = AddSection(
|
| stats_list, "Transient Counters (last cycle of last completed session)");
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_that_cycle->Reserve(3);
|
| + section_that_cycle->GetList().reserve(3);
|
| IntSyncStat updates_downloaded(section_that_cycle, "Updates Downloaded");
|
| IntSyncStat committed_count(section_that_cycle, "Committed Count");
|
| IntSyncStat entries(section_that_cycle, "Entries");
|
|
|
| - base::ListValue* section_nudge_info =
|
| + base::Value* section_nudge_info =
|
| AddSection(stats_list, "Nudge Source Counters");
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - section_nudge_info->Reserve(3);
|
| + section_nudge_info->GetList().reserve(3);
|
| IntSyncStat nudge_source_notification(section_nudge_info,
|
| "Server Invalidations");
|
| IntSyncStat nudge_source_local(section_nudge_info, "Local Changes");
|
| @@ -550,9 +548,9 @@ std::unique_ptr<base::DictionaryValue> ConstructAboutInformation(
|
| // NOTE: We won't bother showing any of the following values unless
|
| // actionable_error_detected is set.
|
|
|
| - base::ListValue* actionable_error = new base::ListValue();
|
| + base::Value* actionable_error = new base::Value(base::Value::Type::LIST);
|
| // TODO(crbug.com/702230): Remove the usages of raw pointers in this file.
|
| - actionable_error->Reserve(4);
|
| + actionable_error->GetList().reserve(4);
|
| about_info->Set("actionable_error", actionable_error);
|
|
|
| StringSyncStat error_type(actionable_error, "Error Type");
|
|
|