// Copyright (c) 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 "chromeos/dbus/fake_image_burner_client.h"

namespace chromeos {

FakeImageBurnerClient::FakeImageBurnerClient() {
}

FakeImageBurnerClient::~FakeImageBurnerClient() {
}

void FakeImageBurnerClient::Init(dbus::Bus* bus) {
}

void FakeImageBurnerClient::ResetEventHandlers() {
}

void FakeImageBurnerClient::BurnImage(const std::string& from_path,
                                      const std::string& to_path,
                                      const ErrorCallback& error_callback) {
}

void FakeImageBurnerClient::SetEventHandlers(
    const BurnFinishedHandler& burn_finished_handler,
    const BurnProgressUpdateHandler& burn_progress_update_handler) {
}

} // namespace chromeos
