| // Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef IMAGE_BURNER_IMAGE_BURNER_IMPL_H_ |
| #define IMAGE_BURNER_IMAGE_BURNER_IMPL_H_ |
| |
| #include <string> |
| |
| #include "image-burner/image_burner_utils_interfaces.h" |
| |
| #include <gtest/gtest_prod.h> |
| |
| namespace imageburn { |
| |
| enum ErrorCode { |
| IMAGEBURN_OK = 0, |
| IMAGEBURN_ERROR_NULL_SOURCE_PATH, |
| IMAGEBURN_ERROR_NULL_TARGET_PATH, |
| IMAGEBURN_ERROR_TARGET_PATH_ON_ROOT, |
| IMAGEBURN_ERROR_INVALID_TARGET_PATH, |
| IMAGEBURN_ERROR_CANNOT_OPEN_SOURCE, |
| IMAGEBURN_ERROR_CANNOT_OPEN_TARGET, |
| IMAGEBURN_ERROR_CANNOT_CLOSE_SOURCE, |
| IMAGEBURN_ERROR_CANNOT_CLOSE_TARGET, |
| IMAGEBURN_ERROR_FAILED_READING_SOURCE, |
| IMAGEBURN_ERROR_FAILED_WRITING_TO_TARGET, |
| IMAGEBURN_ERROR_FAILED_SYNCING_TARGET, |
| IMAGEBURN_ERROR_BURNER_NOT_INITIALIZED, |
| IMAGEBURN_ERROR_SOURCE_REAL_PATH_NOT_DETERMINED, |
| IMAGEBURN_ERROR_SOURCE_PATH_NOT_ALLOWED, |
| }; |
| |
| class BurnerImpl { |
| public: |
| BurnerImpl(FileSystemWriter* writer, |
| FileSystemReader* reader, |
| SignalSender* signal_sender, |
| PathGetter* path_getter); |
| |
| // Returns error code (error code for success == 0) |
| ErrorCode BurnImage(const char* from_path, const char* to_path); |
| |
| void InitSignalSender(SignalSender* signal_sender); |
| |
| // We use this primary for testing. |
| void SetDataBlockSize(int value) { data_block_size_ = value; } |
| |
| private: |
| FRIEND_TEST(ImageBurnerImplTest, IsSourcePathAllowed); |
| |
| bool IsSourcePathAllowed(const std::string& path) const; |
| |
| bool ValidateTargetPath(const char* path, ErrorCode* error); |
| bool ValidateSourcePath(const char* path, |
| std::string* resolved_path, |
| ErrorCode* error); |
| bool DoBurn(const char* from_path, const char* to_path, ErrorCode* error); |
| |
| FileSystemWriter* writer_; |
| FileSystemReader* reader_; |
| SignalSender* signal_sender_; |
| PathGetter* path_getter_; |
| |
| int data_block_size_; |
| }; |
| |
| } // namespace imageburn |
| #endif // IMAGE_BURNER_IMAGE_BURNER_IMPL_H_ |