|  | // Copyright 2012 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  | // | 
|  | #ifndef CONTENT_BROWSER_DOWNLOAD_SAVE_ITEM_H_ | 
|  | #define CONTENT_BROWSER_DOWNLOAD_SAVE_ITEM_H_ | 
|  |  | 
|  | #include <stdint.h> | 
|  |  | 
|  | #include "base/files/file_path.h" | 
|  | #include "base/memory/raw_ptr.h" | 
|  | #include "content/browser/download/save_types.h" | 
|  | #include "content/public/common/referrer.h" | 
|  | #include "url/gurl.h" | 
|  |  | 
|  | namespace content { | 
|  | 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 GURL& url, | 
|  | const Referrer& referrer, | 
|  | SavePackage* package, | 
|  | SaveFileCreateInfo::SaveFileSource save_source, | 
|  | int frame_tree_node_id, | 
|  | int container_frame_tree_node_id); | 
|  |  | 
|  | SaveItem(const SaveItem&) = delete; | 
|  | SaveItem& operator=(const SaveItem&) = delete; | 
|  |  | 
|  | ~SaveItem(); | 
|  |  | 
|  | void Start(); | 
|  |  | 
|  | // Received a new chunk of data. | 
|  | void Update(int64_t bytes_so_far); | 
|  |  | 
|  | // Cancel saving item. | 
|  | void Cancel(); | 
|  |  | 
|  | // Saving operation completed. | 
|  | void Finish(int64_t size, bool is_success); | 
|  |  | 
|  | // Update path for SaveItem, the actual file is renamed on the file thread. | 
|  | void SetTargetPath(const base::FilePath& full_path); | 
|  |  | 
|  | // Accessors. | 
|  | SaveItemId id() const { return save_item_id_; } | 
|  | SaveState state() const { return state_; } | 
|  | const base::FilePath& full_path() const { return full_path_; } | 
|  | const GURL& url() const { return url_; } | 
|  | const Referrer& referrer() const { return referrer_; } | 
|  | int frame_tree_node_id() const { return frame_tree_node_id_; } | 
|  | int container_frame_tree_node_id() const { | 
|  | return container_frame_tree_node_id_; | 
|  | } | 
|  | int64_t received_bytes() const { return received_bytes_; } | 
|  | bool has_final_name() const { return !full_path_.empty(); } | 
|  | bool success() const { return is_success_; } | 
|  | SaveFileCreateInfo::SaveFileSource save_source() const { | 
|  | return save_source_; | 
|  | } | 
|  |  | 
|  | private: | 
|  | // Internal helper for maintaining consistent received and total sizes. | 
|  | void UpdateSize(int64_t size); | 
|  |  | 
|  | // Unique identifier for this SaveItem instance. | 
|  | const SaveItemId save_item_id_; | 
|  |  | 
|  | // Full path to the save item file. | 
|  | base::FilePath full_path_; | 
|  |  | 
|  | // The URL for this save item. | 
|  | GURL url_; | 
|  | Referrer referrer_; | 
|  |  | 
|  | // Frame tree node id, if this save item represents a frame | 
|  | // (otherwise FrameTreeNode::kFrameTreeNodeInvalidId). | 
|  | int frame_tree_node_id_; | 
|  |  | 
|  | // Frame tree node id of the frame containing this save item. | 
|  | // (FrameTreeNode::kFrameTreeNodeInvalidId if this save item represents the | 
|  | // main frame, which obviously doesn't have a containing/parent frame). | 
|  | int container_frame_tree_node_id_; | 
|  |  | 
|  | // Current received bytes. | 
|  | int64_t received_bytes_; | 
|  |  | 
|  | // The current state of this save item. | 
|  | SaveState state_; | 
|  |  | 
|  | // Flag indicates whether SaveItem has error while in saving process. | 
|  | bool is_success_; | 
|  |  | 
|  | SaveFileCreateInfo::SaveFileSource save_source_; | 
|  |  | 
|  | // Our owning object. | 
|  | raw_ptr<SavePackage> package_; | 
|  | }; | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_BROWSER_DOWNLOAD_SAVE_ITEM_H_ |