1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/engine/model_changing_syncer_command.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/callback.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/engine/model_safe_worker.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/sessions/status_controller.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/sessions/sync_session.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser_sync {
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ModelChangingSyncerCommand::ExecuteImpl(sessions::SyncSession* session) {
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  work_session_ = session;
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!ModelNeutralExecuteImpl(work_session_)) {
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return;
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (size_t i = 0; i < session->workers().size(); ++i) {
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ModelSafeWorker* worker = session->workers()[i];
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ModelSafeGroup group = worker->GetModelSafeGroup();
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    sessions::StatusController* status = work_session_->status_controller();
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    sessions::ScopedModelSafeGroupRestriction r(status, group);
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    scoped_ptr<Callback0::Type> c(NewCallback(this,
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        &ModelChangingSyncerCommand::StartChangingModel));
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    worker->DoWorkAndWaitUntilDone(c.get());
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenbool ModelChangingSyncerCommand::ModelNeutralExecuteImpl(
3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    sessions::SyncSession* session) {
3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  return true;
3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace browser_sync
38