1 // Copyright 2014 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_API_ATTACHMENTS_ATTACHMENT_SERVICE_PROXY_FOR_TEST_H_ 6 #define SYNC_API_ATTACHMENTS_ATTACHMENT_SERVICE_PROXY_FOR_TEST_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/weak_ptr.h" 10 #include "sync/api/attachments/attachment_service_proxy.h" 11 #include "sync/base/sync_export.h" 12 13 namespace syncer { 14 15 // An self-contained AttachmentServiceProxy to reduce boilerplate code in tests. 16 // 17 // Constructs and owns an AttachmentService suitable for use in tests. 18 // NOTE: This class does not require the current thread to have a MessageLoop, 19 // however all methods will effectively become no-op stubs in that case. 20 class SYNC_EXPORT AttachmentServiceProxyForTest 21 : public AttachmentServiceProxy { 22 public: 23 static AttachmentServiceProxy Create(); 24 virtual ~AttachmentServiceProxyForTest(); 25 26 private: 27 // A Core that owns the wrapped AttachmentService. 28 class OwningCore : public AttachmentServiceProxy::Core { 29 public: 30 OwningCore( 31 scoped_ptr<AttachmentService>, 32 scoped_ptr<base::WeakPtrFactory<AttachmentService> > weak_ptr_factory); 33 34 private: 35 scoped_ptr<AttachmentService> wrapped_; 36 // WeakPtrFactory for wrapped_. See Create() for why this is a scoped_ptr. 37 scoped_ptr<base::WeakPtrFactory<AttachmentService> > weak_ptr_factory_; 38 39 virtual ~OwningCore(); 40 41 DISALLOW_COPY_AND_ASSIGN(OwningCore); 42 }; 43 44 AttachmentServiceProxyForTest( 45 const scoped_refptr<base::SequencedTaskRunner>& wrapped_task_runner, 46 const scoped_refptr<Core>& core); 47 }; 48 49 } // namespace syncer 50 51 #endif // SYNC_API_ATTACHMENTS_ATTACHMENT_SERVICE_PROXY_FOR_TEST_H_ 52