190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 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) 52385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_FILE_CHANGE_H_ 62385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#define CHROME_BROWSER_SYNC_FILE_SYSTEM_FILE_CHANGE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <deque> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 132385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chrome/browser/sync_file_system/sync_file_type.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_url.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace sync_file_system { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 182385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochclass FileChange { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum ChangeType { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_CHANGE_ADD_OR_UPDATE, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_CHANGE_DELETE, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileChange(ChangeType change, SyncFileType file_type); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsAddOrUpdate() const { return change_ == FILE_CHANGE_ADD_OR_UPDATE; } 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsDelete() const { return change_ == FILE_CHANGE_DELETE; } 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsFile() const { return file_type_ == SYNC_FILE_TYPE_FILE; } 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsDirectory() const { return file_type_ == SYNC_FILE_TYPE_DIRECTORY; } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsTypeUnknown() const { return !IsFile() && !IsDirectory(); } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChangeType change() const { return change_; } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncFileType file_type() const { return file_type_; } 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string DebugString() const; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool operator==(const FileChange& that) const { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return change() == that.change() && 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_type() == that.file_type(); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChangeType change_; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncFileType file_type_; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 492385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochclass FileChangeList { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::deque<FileChange> List; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileChangeList(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~FileChangeList(); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates the list with the |new_change|. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Update(const FileChange& new_change); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t size() const { return list_.size(); } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool empty() const { return list_.empty(); } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void clear() { list_.clear(); } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const List& list() const { return list_; } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange& front() const { return list_.front(); } 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileChange& back() const { return list_.back(); } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileChangeList PopAndGetNewList() const; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string DebugString() const; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) List list_; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace sync_file_system 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 762385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_FILE_CHANGE_H_ 77