| // Copyright 2024 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "components/sync/protocol/collaboration_metadata.h" | |
| #include <cstddef> | |
| #include <ostream> | |
| #include <string> | |
| #include "base/trace_event/memory_usage_estimator.h" | |
| #include "components/sync/protocol/entity_metadata.pb.h" | |
| #include "components/sync/protocol/sync_entity.pb.h" | |
| #include "google_apis/gaia/gaia_id.h" | |
| namespace syncer { | |
| CollaborationMetadata::CollaborationMetadata( | |
| const CollaborationMetadata& other) = default; | |
| CollaborationMetadata& CollaborationMetadata::operator=( | |
| const CollaborationMetadata& other) = default; | |
| CollaborationMetadata::CollaborationMetadata(CollaborationMetadata&& other) = | |
| default; | |
| CollaborationMetadata& CollaborationMetadata::operator=( | |
| CollaborationMetadata&& other) = default; | |
| CollaborationMetadata::~CollaborationMetadata() = default; | |
| // static | |
| CollaborationMetadata CollaborationMetadata::FromRemoteProto( | |
| const sync_pb::SyncEntity::CollaborationMetadata& remote_proto) { | |
| return CollaborationMetadata( | |
| /*created_by=*/GaiaId( | |
| remote_proto.creation_attribution().obfuscated_gaia_id()), | |
| /*last_updated_by=*/ | |
| GaiaId(remote_proto.last_update_attribution().obfuscated_gaia_id()), | |
| CollaborationId(remote_proto.collaboration_id())); | |
| } | |
| // static | |
| CollaborationMetadata CollaborationMetadata::FromLocalProto( | |
| const sync_pb::EntityMetadata::CollaborationMetadata& local_proto) { | |
| return CollaborationMetadata( | |
| /*created_by=*/GaiaId( | |
| local_proto.creation_attribution().obfuscated_gaia_id()), | |
| /*last_updated_by=*/ | |
| GaiaId(local_proto.last_update_attribution().obfuscated_gaia_id()), | |
| CollaborationId(local_proto.collaboration_id())); | |
| } | |
| // static | |
| CollaborationMetadata CollaborationMetadata::ForLocalChange( | |
| const GaiaId& changed_by, | |
| const CollaborationId& collaboration_id) { | |
| return CollaborationMetadata( | |
| /*created_by=*/changed_by, | |
| /*last_updated_by=*/changed_by, collaboration_id); | |
| } | |
| sync_pb::SyncEntity::CollaborationMetadata | |
| CollaborationMetadata::ToRemoteProto() const { | |
| sync_pb::SyncEntity::CollaborationMetadata remote_proto; | |
| if (!created_by_.empty()) { | |
| remote_proto.mutable_creation_attribution()->set_obfuscated_gaia_id( | |
| created_by_.ToString()); | |
| } | |
| if (!last_updated_by_.empty()) { | |
| remote_proto.mutable_last_update_attribution()->set_obfuscated_gaia_id( | |
| last_updated_by_.ToString()); | |
| } | |
| remote_proto.set_collaboration_id(collaboration_id_.value()); | |
| return remote_proto; | |
| } | |
| sync_pb::EntityMetadata::CollaborationMetadata | |
| CollaborationMetadata::ToLocalProto() const { | |
| sync_pb::EntityMetadata::CollaborationMetadata local_proto; | |
| if (!created_by_.empty()) { | |
| local_proto.mutable_creation_attribution()->set_obfuscated_gaia_id( | |
| created_by_.ToString()); | |
| } | |
| if (!last_updated_by_.empty()) { | |
| local_proto.mutable_last_update_attribution()->set_obfuscated_gaia_id( | |
| last_updated_by_.ToString()); | |
| } | |
| local_proto.set_collaboration_id(collaboration_id_.value()); | |
| return local_proto; | |
| } | |
| size_t CollaborationMetadata::EstimateMemoryUsage() const { | |
| using base::trace_event::EstimateMemoryUsage; | |
| return EstimateMemoryUsage(created_by_.ToString()) + | |
| EstimateMemoryUsage(last_updated_by_.ToString()) + | |
| EstimateMemoryUsage(collaboration_id_.value()); | |
| } | |
| CollaborationMetadata::CollaborationMetadata(GaiaId created_by, | |
| GaiaId last_updated_by, | |
| CollaborationId collaboration_id) | |
| : created_by_(std::move(created_by)), | |
| last_updated_by_(std::move(last_updated_by)), | |
| collaboration_id_(std::move(collaboration_id)) {} | |
| void PrintTo(const CollaborationMetadata& collaboration_metadata, | |
| std::ostream* os) { | |
| *os << "{ collaboration_id: '" | |
| << collaboration_metadata.collaboration_id().value() << "', created_by: '" | |
| << collaboration_metadata.created_by() << "', last_updated_by: '" | |
| << collaboration_metadata.last_updated_by() << "'}"; | |
| } | |
| } // namespace syncer |