Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(263)

Unified Diff: chrome/browser/sync/glue/extension_sync.cc

Issue 7564037: Apps/Extensions Sync refactoring -- delete most of the old glue, implement new sync API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Release build warning :-/ Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/sync/glue/extension_sync.h ('k') | chrome/browser/sync/glue/extension_sync_traits.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/glue/extension_sync.cc
diff --git a/chrome/browser/sync/glue/extension_sync.cc b/chrome/browser/sync/glue/extension_sync.cc
deleted file mode 100644
index d057d6a97a9f0f4e36a69855be37796ff4dd6213..0000000000000000000000000000000000000000
--- a/chrome/browser/sync/glue/extension_sync.cc
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright (c) 2011 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 "chrome/browser/sync/glue/extension_sync.h"
-
-#include <utility>
-
-#include "base/logging.h"
-#include "base/tracked.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_sync_data.h"
-#include "chrome/browser/sync/glue/extension_sync_traits.h"
-#include "chrome/browser/sync/glue/extension_util.h"
-#include "chrome/browser/sync/internal_api/read_node.h"
-#include "chrome/browser/sync/internal_api/read_transaction.h"
-#include "chrome/browser/sync/internal_api/write_node.h"
-#include "chrome/browser/sync/internal_api/write_transaction.h"
-#include "chrome/browser/sync/protocol/extension_specifics.pb.h"
-
-namespace browser_sync {
-
-bool RootNodeHasChildren(const char* tag,
- sync_api::UserShare* user_share,
- bool* has_children) {
- CHECK(has_children);
- *has_children = false;
- sync_api::ReadTransaction trans(FROM_HERE, user_share);
- sync_api::ReadNode node(&trans);
- if (!node.InitByTagLookup(tag)) {
- LOG(ERROR) << "Root node with tag " << tag << " does not exist";
- return false;
- }
- *has_children = node.GetFirstChildId() != sync_api::kInvalidId;
- return true;
-}
-
-namespace {
-
-// Fills in |extension_data_map| with data from
-// extension_service.GetSyncDataList().
-void SlurpClientData(
- IsValidAndSyncablePredicate is_valid_and_syncable,
- const ExtensionServiceInterface& extension_service,
- ExtensionDataMap* extension_data_map) {
- std::vector<ExtensionSyncData> sync_data_list =
- extension_service.GetSyncDataList(is_valid_and_syncable);
- for (std::vector<ExtensionSyncData>::const_iterator it =
- sync_data_list.begin();
- it != sync_data_list.end(); ++it) {
- std::pair<ExtensionDataMap::iterator, bool> result =
- extension_data_map->insert(std::make_pair(it->id, *it));
- if (!result.second) {
- // The value wasn't inserted, so merge it in.
- result.first->second.Merge(*it);
- }
- }
-}
-
-// Gets the boilerplate error message for not being able to find a
-// root node.
-//
-// TODO(akalin): Put this somewhere where all data types can use it.
-std::string GetRootNodeDoesNotExistError(const char* root_node_tag) {
- return
- std::string("Server did not create the top-level ") +
- root_node_tag +
- " node. We might be running against an out-of-date server.";
-}
-
-// Gets the data from the server for extensions to be synced and
-// updates |extension_data_map|.
-bool SlurpServerData(
- const char* root_node_tag,
- const ExtensionSpecificsGetter extension_specifics_getter,
- sync_api::UserShare* user_share,
- ExtensionDataMap* extension_data_map) {
- sync_api::WriteTransaction trans(FROM_HERE, user_share);
- sync_api::ReadNode root(&trans);
- if (!root.InitByTagLookup(root_node_tag)) {
- LOG(ERROR) << GetRootNodeDoesNotExistError(root_node_tag);
- return false;
- }
-
- int64 id = root.GetFirstChildId();
- while (id != sync_api::kInvalidId) {
- sync_api::ReadNode sync_node(&trans);
- if (!sync_node.InitByIdLookup(id)) {
- LOG(ERROR) << "Failed to fetch sync node for id " << id;
- return false;
- }
- const sync_pb::ExtensionSpecifics& server_data =
- (*extension_specifics_getter)(sync_node);
- ExtensionSyncData sync_data;
- if (!SpecificsToSyncData(server_data, &sync_data)) {
- LOG(ERROR) << "Invalid extensions specifics for id " << id;
- return false;
- }
- (*extension_data_map)[sync_data.id] = sync_data;
- id = sync_node.GetSuccessorId();
- }
- return true;
-}
-
-} // namespace
-
-bool SlurpExtensionData(const ExtensionSyncTraits& traits,
- const ExtensionServiceInterface& extension_service,
- sync_api::UserShare* user_share,
- ExtensionDataMap* extension_data_map) {
- // Read server-side data first so client user settings take
- // precedence.
- if (!SlurpServerData(
- traits.root_node_tag, traits.extension_specifics_getter,
- user_share, extension_data_map)) {
- return false;
- }
-
- SlurpClientData(
- traits.is_valid_and_syncable, extension_service,
- extension_data_map);
- return true;
-}
-
-namespace {
-
-// Updates the server data from the given extension data. Returns
-// whether or not the update was successful.
-bool UpdateServer(
- const ExtensionSyncTraits& traits,
- const ExtensionSyncData& data,
- sync_api::WriteTransaction* trans) {
- sync_pb::ExtensionSpecifics specifics;
- SyncDataToSpecifics(data, &specifics);
- const std::string& id = data.id;
- sync_api::WriteNode write_node(trans);
- if (write_node.InitByClientTagLookup(traits.model_type, id)) {
- (*traits.extension_specifics_setter)(specifics, &write_node);
- } else {
- sync_api::ReadNode root(trans);
- if (!root.InitByTagLookup(traits.root_node_tag)) {
- LOG(ERROR) << GetRootNodeDoesNotExistError(traits.root_node_tag);
- return false;
- }
- sync_api::WriteNode create_node(trans);
- if (!create_node.InitUniqueByCreation(traits.model_type, root, id)) {
- LOG(ERROR) << "Could not create node for extension " << id;
- return false;
- }
- (*traits.extension_specifics_setter)(specifics, &create_node);
- }
- return true;
-}
-
-} // namespace
-
-bool FlushExtensionData(const ExtensionSyncTraits& traits,
- const ExtensionDataMap& extension_data_map,
- ExtensionServiceInterface* extension_service,
- sync_api::UserShare* user_share) {
- sync_api::WriteTransaction trans(FROM_HERE, user_share);
- sync_api::ReadNode root(&trans);
- if (!root.InitByTagLookup(traits.root_node_tag)) {
- LOG(ERROR) << GetRootNodeDoesNotExistError(traits.root_node_tag);
- return false;
- }
-
- // Update server and client as necessary.
- for (ExtensionDataMap::const_iterator it = extension_data_map.begin();
- it != extension_data_map.end(); ++it) {
- const ExtensionSyncData& extension_data = it->second;
- if (!UpdateServer(traits, extension_data, &trans)) {
- LOG(ERROR) << "Could not update server data for extension "
- << it->first;
- return false;
- }
- extension_service->ProcessSyncData(extension_data,
- traits.is_valid_and_syncable);
- }
- return true;
-}
-
-bool UpdateServerData(const ExtensionSyncTraits& traits,
- const Extension& extension,
- const ExtensionServiceInterface& extension_service,
- sync_api::UserShare* user_share,
- std::string* error) {
- const std::string& id = extension.id();
- ExtensionSyncData data;
- if (!extension_service.GetSyncData(
- extension, traits.is_valid_and_syncable, &data)) {
- *error =
- std::string("UpdateServerData() called for invalid or "
- "unsyncable extension ") + id;
- LOG(DFATAL) << *error;
- return false;
- }
-
- sync_api::WriteTransaction trans(FROM_HERE, user_share);
- if (!UpdateServer(traits, data, &trans)) {
- *error =
- std::string("Could not update server data for extension ") + id;
- LOG(ERROR) << *error;
- return false;
- }
- return true;
-}
-
-void RemoveServerData(const ExtensionSyncTraits& traits,
- const std::string& id,
- sync_api::UserShare* user_share) {
- sync_api::WriteTransaction trans(FROM_HERE, user_share);
- sync_api::WriteNode write_node(&trans);
- if (write_node.InitByClientTagLookup(traits.model_type, id)) {
- write_node.Remove();
- } else {
- LOG(ERROR) << "Server data does not exist for extension " << id;
- }
-}
-
-} // namespace browser_sync
« no previous file with comments | « chrome/browser/sync/glue/extension_sync.h ('k') | chrome/browser/sync/glue/extension_sync_traits.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698