1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/extensions/api/image_writer_private/error_messages.h"
6 #include "chrome/browser/extensions/api/image_writer_private/operation.h"
7 #include "chromeos/dbus/dbus_thread_manager.h"
8 #include "chromeos/dbus/image_burner_client.h"
9 #include "content/public/browser/browser_thread.h"
11 namespace extensions {
12 namespace image_writer {
14 using chromeos::ImageBurnerClient;
15 using content::BrowserThread;
19 void ClearImageBurner() {
20 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
21 BrowserThread::PostTask(BrowserThread::UI,
23 base::Bind(&ClearImageBurner));
27 chromeos::DBusThreadManager::Get()->
28 GetImageBurnerClient()->
34 void Operation::WriteStart() {
35 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
36 SetStage(image_writer_api::STAGE_WRITE);
38 BrowserThread::PostTask(BrowserThread::UI,
40 base::Bind(&Operation::StartWriteOnUIThread, this));
42 AddCleanUpFunction(base::Bind(&ClearImageBurner));
45 void Operation::StartWriteOnUIThread() {
46 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
47 DVLOG(1) << "Starting burn.";
49 ImageBurnerClient* burner =
50 chromeos::DBusThreadManager::Get()->GetImageBurnerClient();
52 burner->SetEventHandlers(
53 base::Bind(&Operation::OnBurnFinished, this),
54 base::Bind(&Operation::OnBurnProgress, this));
56 burner->BurnImage(image_path_.value(),
58 base::Bind(&Operation::OnBurnError, this));
61 void Operation::OnBurnFinished(const std::string& target_path,
63 const std::string& error) {
64 DVLOG(1) << "Burn finished: " << success;
67 SetProgress(kProgressComplete);
74 void Operation::OnBurnProgress(const std::string& target_path,
75 int64 num_bytes_burnt,
77 int progress = kProgressComplete * num_bytes_burnt / total_size;
78 SetProgress(progress);
81 void Operation::OnBurnError() {
82 Error(error::kImageBurnerError);
85 } // namespace image_writer
86 } // namespace extensions