15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef SYNC_API_ATTACHMENTS_FAKE_ATTACHMENT_STORE_H_
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define SYNC_API_ATTACHMENTS_FAKE_ATTACHMENT_STORE_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <map>
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/ref_counted.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/stl_util.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sync/api/attachments/attachment_store.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sync/base/sync_export.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace base {
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class SequencedTaskRunner;
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class SingleThreadTaskRunner;
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace base
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace sync_pb {
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class AttachmentId;
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace sync_pb
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace syncer {
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Attachment;
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// A in-memory only implementation of AttachmentStore used for testing.
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Requires that the current thread has a MessageLoop.
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class SYNC_EXPORT FakeAttachmentStore : public AttachmentStore {
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Construct a FakeAttachmentStore whose "IO" will be performed in
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |backend_task_runner|.
36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  explicit FakeAttachmentStore(
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const scoped_refptr<base::SequencedTaskRunner>& backend_task_runner);
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // AttachmentStore implementation.
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void Read(const AttachmentIdList& id,
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    const ReadCallback& callback) OVERRIDE;
420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void Write(const AttachmentList& attachments,
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     const WriteCallback& callback) OVERRIDE;
440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void Drop(const AttachmentIdList& id,
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    const DropCallback& callback) OVERRIDE;
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  class Backend;
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~FakeAttachmentStore();
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_refptr<Backend> backend_;
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_refptr<base::SequencedTaskRunner> backend_task_runner_;
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FakeAttachmentStore);
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace syncer
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // SYNC_API_ATTACHMENTS_FAKE_ATTACHMENT_STORE_H_
61