OLD | NEW |
| (Empty) |
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 #include "sync/internal_api/public/attachments/attachment_service_proxy_for_test
.h" | |
6 | |
7 #include <utility> | |
8 | |
9 #include "base/message_loop/message_loop.h" | |
10 #include "base/threading/thread_task_runner_handle.h" | |
11 #include "sync/internal_api/public/attachments/attachment_service_impl.h" | |
12 | |
13 namespace syncer { | |
14 | |
15 AttachmentServiceProxyForTest::OwningCore::OwningCore( | |
16 std::unique_ptr<AttachmentService> wrapped, | |
17 std::unique_ptr<base::WeakPtrFactory<AttachmentService>> weak_ptr_factory) | |
18 : Core(weak_ptr_factory->GetWeakPtr()), | |
19 wrapped_(std::move(wrapped)), | |
20 weak_ptr_factory_(std::move(weak_ptr_factory)) { | |
21 DCHECK(wrapped_); | |
22 } | |
23 | |
24 AttachmentServiceProxyForTest::OwningCore::~OwningCore() { | |
25 } | |
26 | |
27 // Static. | |
28 AttachmentServiceProxy AttachmentServiceProxyForTest::Create() { | |
29 std::unique_ptr<AttachmentService> wrapped( | |
30 AttachmentServiceImpl::CreateForTest()); | |
31 // This class's base class, AttachmentServiceProxy, must be initialized with a | |
32 // WeakPtr to an AttachmentService. Because the base class ctor must be | |
33 // invoked before any of this class's members are initialized, we create the | |
34 // WeakPtrFactory here and pass it to the ctor so that it may initialize its | |
35 // base class and own the WeakPtrFactory. | |
36 // | |
37 // We must pass by unique_ptr because WeakPtrFactory has no copy constructor. | |
38 std::unique_ptr<base::WeakPtrFactory<AttachmentService>> weak_ptr_factory( | |
39 new base::WeakPtrFactory<AttachmentService>(wrapped.get())); | |
40 | |
41 scoped_refptr<Core> core_for_test( | |
42 new OwningCore(std::move(wrapped), std::move(weak_ptr_factory))); | |
43 | |
44 scoped_refptr<base::SequencedTaskRunner> runner; | |
45 if (base::ThreadTaskRunnerHandle::IsSet()) { | |
46 runner = base::ThreadTaskRunnerHandle::Get(); | |
47 } else { | |
48 // Dummy runner for tests that don't have MessageLoop. | |
49 DVLOG(1) << "Creating dummy MessageLoop for AttachmentServiceProxy."; | |
50 base::MessageLoop loop; | |
51 // This works because |runner| takes a ref to the proxy. | |
52 runner = base::ThreadTaskRunnerHandle::Get(); | |
53 } | |
54 return AttachmentServiceProxyForTest(runner, core_for_test); | |
55 } | |
56 | |
57 AttachmentServiceProxyForTest::~AttachmentServiceProxyForTest() { | |
58 } | |
59 | |
60 AttachmentServiceProxyForTest::AttachmentServiceProxyForTest( | |
61 const scoped_refptr<base::SequencedTaskRunner>& wrapped_task_runner, | |
62 const scoped_refptr<Core>& core) | |
63 : AttachmentServiceProxy(wrapped_task_runner, core) { | |
64 } | |
65 | |
66 } // namespace syncer | |
OLD | NEW |