1731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/sync/engine/clear_data_command.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/sync/engine/syncer.h" 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/sync/engine/syncer_proto_util.h" 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/sync/engine/syncproto.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/sync/sessions/sync_session.h" 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/sync/syncable/directory_manager.h" 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing syncable::ScopedDirLookup; 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace browser_sync { 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing sessions::StatusController; 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing sessions::SyncSession; 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing std::string; 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing syncable::FIRST_REAL_MODEL_TYPE; 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing syncable::MODEL_TYPE_COUNT; 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenClearDataCommand::ClearDataCommand() {} 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenClearDataCommand::~ClearDataCommand() {} 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ClearDataCommand::ExecuteImpl(SyncSession* session) { 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ClientToServerMessage client_to_server_message; 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ClientToServerResponse client_to_server_response; 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen client_to_server_message.set_share(session->context()->account_name()); 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen client_to_server_message.set_message_contents( 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ClientToServerMessage::CLEAR_DATA); 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen client_to_server_message.mutable_clear_user_data(); 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ScopedDirLookup dir(session->context()->directory_manager(), 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen session->context()->account_name()); 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!dir.good()) { 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LOG(ERROR) << "Scoped dir lookup failed!"; 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SyncerProtoUtil::AddRequestBirthday(dir, &client_to_server_message); 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VLOG(1) << "Clearing server data"; 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool ok = SyncerProtoUtil::PostClientToServerMessage( 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen client_to_server_message, 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &client_to_server_response, 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen session); 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DVLOG(1) << SyncerProtoUtil::ClientToServerResponseDebugString( 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen client_to_server_response); 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Clear pending indicates that the server has received our clear message 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!ok || !client_to_server_response.has_error_code() || 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen client_to_server_response.error_code() != 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen sync_pb::ClientToServerResponse::SUCCESS) { 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // On failure, subsequent requests to the server will cause it to attempt 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // to resume the clear. The client will handle disabling of sync in 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // response to a store birthday error from the server. 65731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SyncEngineEvent event(SyncEngineEvent::CLEAR_SERVER_DATA_FAILED); 66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick session->context()->NotifyListeners(event); 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LOG(ERROR) << "Error posting ClearData."; 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SyncEngineEvent event(SyncEngineEvent::CLEAR_SERVER_DATA_SUCCEEDED); 74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick session->context()->NotifyListeners(event); 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen session->delegate()->OnShouldStopSyncingPermanently(); 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 78731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VLOG(1) << "ClearData succeeded."; 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace browser_sync 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 83