Home | History | Annotate | Download | only in public
      1 // Copyright 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef SYNC_INTERNAL_API_PUBLIC_BASE_TRANSACTION_H_
      6 #define SYNC_INTERNAL_API_PUBLIC_BASE_TRANSACTION_H_
      7 
      8 #include "sync/base/sync_export.h"
      9 #include "sync/internal_api/public/base/model_type.h"
     10 #include "sync/internal_api/public/user_share.h"
     11 #include "sync/util/cryptographer.h"
     12 
     13 namespace syncer {
     14 
     15 namespace syncable {
     16 class BaseTransaction;
     17 class Directory;
     18 }
     19 
     20 // Sync API's BaseTransaction, ReadTransaction, and WriteTransaction allow for
     21 // batching of several read and/or write operations.  The read and write
     22 // operations are performed by creating ReadNode and WriteNode instances using
     23 // the transaction. These transaction classes wrap identically named classes in
     24 // syncable, and are used in a similar way. Unlike syncable::BaseTransaction,
     25 // whose construction requires an explicit syncable::Directory, a sync
     26 // API BaseTransaction is created from a UserShare object.
     27 //
     28 // Note, these transactions are not atomic. Individual operations can
     29 // fail. There is no built-in rollback or undo mechanism.
     30 class SYNC_EXPORT BaseTransaction {
     31  public:
     32   // Provide access to the underlying syncable objects from BaseNode.
     33   virtual syncable::BaseTransaction* GetWrappedTrans() const = 0;
     34   Cryptographer* GetCryptographer() const;
     35   ModelTypeSet GetEncryptedTypes() const;
     36 
     37   syncable::Directory* GetDirectory() const {
     38     if (!user_share_) {
     39       return NULL;
     40     } else {
     41       return user_share_->directory.get();
     42     }
     43   }
     44 
     45   UserShare* GetUserShare() const {
     46     return user_share_;
     47   }
     48 
     49  protected:
     50   explicit BaseTransaction(UserShare* share);
     51   virtual ~BaseTransaction();
     52 
     53   BaseTransaction() : user_share_(NULL) { }
     54 
     55  private:
     56   UserShare* user_share_;
     57 
     58   DISALLOW_COPY_AND_ASSIGN(BaseTransaction);
     59 };
     60 
     61 }  // namespace syncer
     62 
     63 #endif  // SYNC_INTERNAL_API_PUBLIC_BASE_TRANSACTION_H_
     64