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

Unified Diff: chrome/browser/sync/glue/extension_change_processor.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
Index: chrome/browser/sync/glue/extension_change_processor.cc
diff --git a/chrome/browser/sync/glue/extension_change_processor.cc b/chrome/browser/sync/glue/extension_change_processor.cc
deleted file mode 100644
index 9fddd3ee6cb99554a8add4d52a800a370fdac2b9..0000000000000000000000000000000000000000
--- a/chrome/browser/sync/glue/extension_change_processor.cc
+++ /dev/null
@@ -1,190 +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_change_processor.h"
-
-#include <sstream>
-#include <string>
-
-#include "base/logging.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_sync_data.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sync/glue/extension_sync.h"
-#include "chrome/browser/sync/glue/extension_util.h"
-#include "chrome/browser/sync/internal_api/read_node.h"
-#include "chrome/browser/sync/protocol/extension_specifics.pb.h"
-#include "chrome/browser/sync/unrecoverable_error_handler.h"
-#include "chrome/common/chrome_notification_types.h"
-#include "chrome/common/extensions/extension.h"
-#include "chrome/common/extensions/extension_constants.h"
-#include "content/browser/browser_thread.h"
-#include "content/common/notification_details.h"
-#include "content/common/notification_source.h"
-
-namespace browser_sync {
-
-ExtensionChangeProcessor::ExtensionChangeProcessor(
- UnrecoverableErrorHandler* error_handler)
- : ChangeProcessor(error_handler),
- traits_(GetExtensionSyncTraits()),
- profile_(NULL),
- extension_service_(NULL) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK(error_handler);
-}
-
-ExtensionChangeProcessor::~ExtensionChangeProcessor() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-}
-
-// TODO(akalin): We need to make sure events we receive from either
-// the browser or the syncapi are done in order; this is tricky since
-// some events (e.g., extension installation) are done asynchronously.
-
-void ExtensionChangeProcessor::Observe(int type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK(running());
- DCHECK(profile_);
- if ((type != chrome::NOTIFICATION_EXTENSION_LOADED) &&
- (type != chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED) &&
- (type != chrome::NOTIFICATION_EXTENSION_UNLOADED)) {
- LOG(DFATAL) << "Received unexpected notification of type "
- << type;
- return;
- }
-
- // Filter out unhandled extensions first.
- DCHECK_EQ(Source<Profile>(source).ptr(), profile_);
- const Extension& extension =
- (type == chrome::NOTIFICATION_EXTENSION_UNLOADED) ?
- *Details<UnloadedExtensionInfo>(details)->extension :
- *Details<const Extension>(details).ptr();
- if (!traits_.is_valid_and_syncable(extension)) {
- return;
- }
-
- const std::string& id = extension.id();
-
- // Then handle extension uninstalls.
- if (type == chrome::NOTIFICATION_EXTENSION_UNLOADED) {
- const UnloadedExtensionInfo& info =
- *Details<UnloadedExtensionInfo>(details).ptr();
- if (info.reason == extension_misc::UNLOAD_REASON_UNINSTALL) {
- VLOG(1) << "Removing server data for uninstalled extension " << id
- << " of type " << info.extension->GetType();
- RemoveServerData(traits_, id, share_handle());
- return;
- }
- }
-
- VLOG(1) << "Updating server data for extension " << id
- << " (notification type = " << type << ")";
- std::string error;
- if (!UpdateServerData(traits_, extension, *extension_service_,
- share_handle(), &error)) {
- error_handler()->OnUnrecoverableError(FROM_HERE, error);
- }
-}
-
-void ExtensionChangeProcessor::ApplyChangesFromSyncModel(
- const sync_api::BaseTransaction* trans,
- const sync_api::SyncManager::ChangeRecord* changes,
- int change_count) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!running()) {
- return;
- }
- for (int i = 0; i < change_count; ++i) {
- const sync_api::SyncManager::ChangeRecord& change = changes[i];
- sync_pb::ExtensionSpecifics specifics;
- switch (change.action) {
- case sync_api::SyncManager::ChangeRecord::ACTION_ADD:
- case sync_api::SyncManager::ChangeRecord::ACTION_UPDATE: {
- sync_api::ReadNode node(trans);
- if (!node.InitByIdLookup(change.id)) {
- std::stringstream error;
- error << "Extension node lookup failed for change " << change.id
- << " of action type " << change.action;
- error_handler()->OnUnrecoverableError(FROM_HERE, error.str());
- return;
- }
- DCHECK_EQ(node.GetModelType(), traits_.model_type);
- specifics = (*traits_.extension_specifics_getter)(node);
- break;
- }
- case sync_api::SyncManager::ChangeRecord::ACTION_DELETE: {
- if (!(*traits_.extension_specifics_entity_getter)(
- change.specifics, &specifics)) {
- std::stringstream error;
- error << "Could not get extension specifics from deleted node "
- << change.id;
- error_handler()->OnUnrecoverableError(FROM_HERE, error.str());
- LOG(DFATAL) << error.str();
- }
- break;
- }
- }
- ExtensionSyncData sync_data;
- if (!SpecificsToSyncData(specifics, &sync_data)) {
- // TODO(akalin): Should probably recover or drop.
- std::string error =
- std::string("Invalid server specifics: ") +
- ExtensionSpecificsToString(specifics);
- error_handler()->OnUnrecoverableError(FROM_HERE, error);
- return;
- }
- sync_data.uninstalled =
- (change.action == sync_api::SyncManager::ChangeRecord::ACTION_DELETE);
- StopObserving();
- extension_service_->ProcessSyncData(sync_data,
- traits_.is_valid_and_syncable);
- StartObserving();
- }
-}
-
-void ExtensionChangeProcessor::StartImpl(Profile* profile) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- profile_ = profile;
- extension_service_ = profile_->GetExtensionService();
- DCHECK(profile_);
- DCHECK(extension_service_);
- StartObserving();
-}
-
-void ExtensionChangeProcessor::StopImpl() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- StopObserving();
- profile_ = NULL;
- extension_service_ = NULL;
-}
-
-void ExtensionChangeProcessor::StartObserving() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK(profile_);
-
- notification_registrar_.Add(
- this, chrome::NOTIFICATION_EXTENSION_LOADED,
- Source<Profile>(profile_));
- // Despite the name, this notification is exactly like
- // EXTENSION_LOADED but with an initial state of DISABLED.
- notification_registrar_.Add(
- this, chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED,
- Source<Profile>(profile_));
-
- notification_registrar_.Add(
- this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
- Source<Profile>(profile_));
-}
-
-void ExtensionChangeProcessor::StopObserving() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK(profile_);
- VLOG(1) << "Unobserving all notifications";
- notification_registrar_.RemoveAll();
-}
-
-} // namespace browser_sync
« no previous file with comments | « chrome/browser/sync/glue/extension_change_processor.h ('k') | chrome/browser/sync/glue/extension_model_associator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698