14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/dom_distiller/core/article_entry.h" 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/logging.h" 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "sync/api/sync_change.h" 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using sync_pb::EntitySpecifics; 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using sync_pb::ArticlePage; 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using sync_pb::ArticleSpecifics; 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace dom_distiller { 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool IsEntryPageValid(const ArticleEntryPage& page) { return page.has_url(); } 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool IsEntryValid(const ArticleEntry& entry) { 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!entry.has_entry_id()) 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) for (int i = 0; i < entry.pages_size(); ++i) { 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!IsEntryPageValid(entry.pages(i))) 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool AreEntriesEqual(const ArticleEntry& left, const ArticleEntry& right) { 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(IsEntryValid(left)); 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(IsEntryValid(right)); 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return left.SerializeAsString() == right.SerializeAsString(); 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)ArticleEntry EntryFromSpecifics(const EntitySpecifics& specifics) { 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(specifics.has_article()); 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const ArticleSpecifics& article_specifics = specifics.article(); 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ArticleEntry entry = article_specifics; 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(IsEntryValid(entry)); 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return entry; 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)EntitySpecifics SpecificsFromEntry(const ArticleEntry& entry) { 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(IsEntryValid(entry)); 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EntitySpecifics specifics; 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *specifics.mutable_article() = entry; 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return specifics; 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)ArticleEntry GetEntryFromChange(const syncer::SyncChange& change) { 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DCHECK(change.IsValid()); 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DCHECK(change.sync_data().IsValid()); 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return EntryFromSpecifics(change.sync_data().GetSpecifics()); 531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)std::string GetEntryIdFromSyncData(const syncer::SyncData& data) { 561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const EntitySpecifics& entity = data.GetSpecifics(); 571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DCHECK(entity.has_article()); 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const ArticleSpecifics& specifics = entity.article(); 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DCHECK(specifics.has_entry_id()); 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return specifics.entry_id(); 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)syncer::SyncData CreateLocalData(const ArticleEntry& entry) { 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EntitySpecifics specifics = SpecificsFromEntry(entry); 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string& entry_id = entry.entry_id(); 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return syncer::SyncData::CreateLocalData(entry_id, entry_id, specifics); 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace dom_distiller 70