12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 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 SYNC_INTERNAL_API_PUBLIC_BASE_TRANSACTION_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SYNC_INTERNAL_API_PUBLIC_BASE_TRANSACTION_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/base/sync_export.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/public/base/model_type.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/internal_api/public/user_share.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/util/cryptographer.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncable { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BaseTransaction; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Directory; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sync API's BaseTransaction, ReadTransaction, and WriteTransaction allow for 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// batching of several read and/or write operations. The read and write 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// operations are performed by creating ReadNode and WriteNode instances using 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the transaction. These transaction classes wrap identically named classes in 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// syncable, and are used in a similar way. Unlike syncable::BaseTransaction, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// whose construction requires an explicit syncable::Directory, a sync 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// API BaseTransaction is created from a UserShare object. 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Note, these transactions are not atomic. Individual operations can 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// fail. There is no built-in rollback or undo mechanism. 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SYNC_EXPORT BaseTransaction { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Provide access to the underlying syncable objects from BaseNode. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual syncable::BaseTransaction* GetWrappedTrans() const = 0; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Cryptographer* GetCryptographer() const; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ModelTypeSet GetEncryptedTypes() const; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncable::Directory* GetDirectory() const { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!user_share_) { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return user_share_->directory.get(); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserShare* GetUserShare() const { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return user_share_; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit BaseTransaction(UserShare* share); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BaseTransaction(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BaseTransaction() : user_share_(NULL) { } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserShare* user_share_; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BaseTransaction); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncer 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // SYNC_INTERNAL_API_PUBLIC_BASE_TRANSACTION_H_ 64