| Index: storage/browser/blob/shareable_blob_data_item.cc | 
| diff --git a/storage/browser/blob/shareable_blob_data_item.cc b/storage/browser/blob/shareable_blob_data_item.cc | 
| index 40aaf9c7e10d29d40acbc73798f67f6c16030b4d..d085e5a705b8ab79540786c35ea26a71ce38dc6c 100644 | 
| --- a/storage/browser/blob/shareable_blob_data_item.cc | 
| +++ b/storage/browser/blob/shareable_blob_data_item.cc | 
| @@ -7,20 +7,51 @@ | 
| #include "storage/browser/blob/blob_data_item.h" | 
|  | 
| namespace storage { | 
| +namespace { | 
| + | 
| +uint64_t GetAndIncrementItemId() { | 
| +  static uint64_t sNextItemId = 0; | 
| +  return sNextItemId++; | 
| +} | 
| + | 
| +}  // namespace | 
|  | 
| ShareableBlobDataItem::ShareableBlobDataItem( | 
| -    const std::string& blob_uuid, | 
| -    const scoped_refptr<BlobDataItem>& item) | 
| -    : item_(item) { | 
| +    const std::string& referencing_blob_uuid, | 
| +    scoped_refptr<BlobDataItem> item, | 
| +    ShareableBlobDataItem::State state) | 
| +    : item_id_(GetAndIncrementItemId()), state_(state), item_(std::move(item)) { | 
| DCHECK_NE(item_->type(), DataElement::TYPE_BLOB); | 
| -  referencing_blobs_.insert(blob_uuid); | 
| +  referencing_blobs_.insert(referencing_blob_uuid); | 
| } | 
|  | 
| ShareableBlobDataItem::~ShareableBlobDataItem() { | 
| } | 
|  | 
| -const scoped_refptr<BlobDataItem>& ShareableBlobDataItem::item() { | 
| -  return item_; | 
| +void ShareableBlobDataItem::set_item(scoped_refptr<BlobDataItem> item) { | 
| +  item_ = std::move(item); | 
| +} | 
| + | 
| +void PrintTo(const ShareableBlobDataItem& x, ::std::ostream* os) { | 
| +  *os << "<ShareableBlobDataItem>{ item_id: " << x.item_id_ | 
| +      << ", state: " << x.state_ << ", item: "; | 
| +  PrintTo(*x.item_, os); | 
| +  *os << ", referencing_blobs: ["; | 
| +  for (const std::string& uuid : x.referencing_blobs()) { | 
| +    *os << uuid << ", "; | 
| +  } | 
| +  *os << "]}"; | 
| +} | 
| + | 
| +bool operator==(const ShareableBlobDataItem& a, | 
| +                const ShareableBlobDataItem& b) { | 
| +  return a.item_id() == b.item_id() && *a.item() == *b.item() && | 
| +         a.referencing_blobs() == b.referencing_blobs(); | 
| +} | 
| + | 
| +bool operator!=(const ShareableBlobDataItem& a, | 
| +                const ShareableBlobDataItem& b) { | 
| +  return !(a == b); | 
| } | 
|  | 
| }  // namespace storage | 
|  |