15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_DRIVE_FILE_CHANGE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_DRIVE_FILE_CHANGE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <deque> 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <map> 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <string> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/basictypes.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_url.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace drive { 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ResourceEntry; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FileChange { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch enum FileType { 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FILE_TYPE_UNKNOWN, 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FILE_TYPE_FILE, 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FILE_TYPE_DIRECTORY, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch enum ChangeType { 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ADD_OR_UPDATE, 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DELETE, 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch class Change { 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Change(ChangeType change, FileType file_type); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool IsAddOrUpdate() const { return change_ == ADD_OR_UPDATE; } 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool IsDelete() const { return change_ == DELETE; } 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool IsFile() const { return file_type_ == FILE_TYPE_FILE; } 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool IsDirectory() const { return file_type_ == FILE_TYPE_DIRECTORY; } 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool IsTypeUnknown() const { return !IsFile() && !IsDirectory(); } 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ChangeType change() const { return change_; } 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileType file_type() const { return file_type_; } 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string DebugString() const; 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool operator==(const Change& that) const { 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return change() == that.change() && file_type() == that.file_type(); 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ChangeType change_; 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileType file_type_; 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch class ChangeList { 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch typedef std::deque<Change> List; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ChangeList(); 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ~ChangeList(); 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Updates the list with the |new_change|. 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void Update(const Change& new_change); 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t size() const { return list_.size(); } 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool empty() const { return list_.empty(); } 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void clear() { list_.clear(); } 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const List& list() const { return list_; } 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Change& front() const { return list_.front(); } 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Change& back() const { return list_.back(); } 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ChangeList PopAndGetNewList() const; 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string DebugString() const; 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch List list_; 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch typedef std::map<base::FilePath, FileChange::ChangeList> Map; 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileChange(); 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ~FileChange(); 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void Update(const base::FilePath file_path, 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FileChange::Change& new_change); 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void Update(const base::FilePath file_path, 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FileChange::ChangeList& list); 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void Update(const base::FilePath file_path, 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileType type, 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileChange::ChangeType change); 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void Update(const base::FilePath file_path, 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ResourceEntry& entry, 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FileChange::ChangeType change); 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void Apply(const FileChange& new_changed_files); 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Map& map() const { return map_; } 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t size() const { return map_.size(); } 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool empty() const { return map_.empty(); } 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void ClearForTest() { map_.clear(); } 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t CountDirectory(const base::FilePath& directory_path) const; 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t count(const base::FilePath& file_path) const { 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return map_.count(file_path); 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string DebugString() const; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Map map_; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace drive 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_CHANGE_H_ 119