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