diff options
Diffstat (limited to 'chrome/browser/save_item.h')
-rw-r--r-- | chrome/browser/save_item.h | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/chrome/browser/save_item.h b/chrome/browser/save_item.h new file mode 100644 index 0000000..025cc28 --- /dev/null +++ b/chrome/browser/save_item.h @@ -0,0 +1,136 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +#ifndef CHROME_BROWSER_SAVE_ITEM_H__ +#define CHROME_BROWSER_SAVE_ITEM_H__ + +#include <string> + +#include "base/basictypes.h" +#include "chrome/browser/save_types.h" + +class SavePackage; + +// One SaveItem per save file. This is the model class that stores all the +// state for one save file. +class SaveItem { + public: + enum SaveState { + WAIT_START, + IN_PROGRESS, + COMPLETE, + CANCELED + }; + + SaveItem(const std::wstring& url, + const std::wstring& referrer, + SavePackage* package, + SaveFileCreateInfo::SaveFileSource save_source); + + ~SaveItem(); + + void Start(); + + // Received a new chunk of data. + void Update(int64 bytes_so_far); + + // Cancel saving item. + void Cancel(); + + // Saving operation completed. + void Finish(int64 size, bool is_success); + + // Rough percent complete, -1 means we don't know (since we didn't receive a + // total size). + int PercentComplete() const; + + // Update path for SaveItem, the actual file is renamed on the file thread. + void Rename(const std::wstring& full_path); + + void SetSaveId(int32 save_id); + + void SetTotalBytes(int64 total_bytes); + + // Accessors. + SaveState state() const { return state_; } + const std::wstring full_path() const { return full_path_; } + const std::wstring file_name() const { return file_name_; } + const std::wstring& url() const { return url_; } + const std::wstring& referrer() const { return referrer_; } + int64 total_bytes() const { return total_bytes_; } + int64 received_bytes() const { return received_bytes_; } + int32 save_id() const { return save_id_; } + bool has_final_name() const { return has_final_name_; } + bool success() const { return is_success_; } + SaveFileCreateInfo::SaveFileSource save_source() const { + return save_source_; + } + SavePackage* package() const { return package_; } + + private: + // Internal helper for maintaining consistent received and total sizes. + void UpdateSize(int64 size); + + // Request ID assigned by the ResourceDispatcherHost. + int32 save_id_; + + // Full path to the save item file. + std::wstring full_path_; + + // Short display version of the file. + std::wstring file_name_; + + // The URL for this save item. + std::wstring url_; + std::wstring referrer_; + + // Total bytes expected. + int64 total_bytes_; + + // Current received bytes. + int64 received_bytes_; + + // The current state of this save item. + SaveState state_; + + // Specifies if this name is a final or not. + bool has_final_name_; + + // Flag indicates whether SaveItem has error while in saving process. + bool is_success_; + + SaveFileCreateInfo::SaveFileSource save_source_; + + // Our owning object. + SavePackage* package_; + + DISALLOW_EVIL_CONSTRUCTORS(SaveItem); +}; + +#endif // CHROME_BROWSER_SAVE_ITEM_H__ |