blob: 1550caf2b8039fbd73a7f37eb4756548ad88b782 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/dom_distiller/core/article_entry.h"
#include "base/logging.h"
#include "sync/api/sync_change.h"
using sync_pb::EntitySpecifics;
using sync_pb::ArticlePage;
using sync_pb::ArticleSpecifics;
namespace dom_distiller {
bool IsEntryPageValid(const ArticleEntryPage& page) { return page.has_url(); }
bool IsEntryValid(const ArticleEntry& entry) {
if (!entry.has_entry_id())
return false;
for (int i = 0; i < entry.pages_size(); ++i) {
if (!IsEntryPageValid(entry.pages(i)))
return false;
}
return true;
}
bool AreEntriesEqual(const ArticleEntry& left, const ArticleEntry& right) {
DCHECK(IsEntryValid(left));
DCHECK(IsEntryValid(right));
return left.SerializeAsString() == right.SerializeAsString();
}
ArticleEntry EntryFromSpecifics(const EntitySpecifics& specifics) {
DCHECK(specifics.has_article());
const ArticleSpecifics& article_specifics = specifics.article();
ArticleEntry entry = article_specifics;
DCHECK(IsEntryValid(entry));
return entry;
}
EntitySpecifics SpecificsFromEntry(const ArticleEntry& entry) {
DCHECK(IsEntryValid(entry));
EntitySpecifics specifics;
*specifics.mutable_article() = entry;
return specifics;
}
ArticleEntry GetEntryFromChange(const syncer::SyncChange& change) {
DCHECK(change.IsValid());
DCHECK(change.sync_data().IsValid());
return EntryFromSpecifics(change.sync_data().GetSpecifics());
}
std::string GetEntryIdFromSyncData(const syncer::SyncData& data) {
const EntitySpecifics& entity = data.GetSpecifics();
DCHECK(entity.has_article());
const ArticleSpecifics& specifics = entity.article();
DCHECK(specifics.has_entry_id());
return specifics.entry_id();
}
syncer::SyncData CreateLocalData(const ArticleEntry& entry) {
EntitySpecifics specifics = SpecificsFromEntry(entry);
const std::string& entry_id = entry.entry_id();
return syncer::SyncData::CreateLocalData(entry_id, entry_id, specifics);
}
} // namespace dom_distiller