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 "components/sync/api/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 "components/sync/api/attachments/attachment_service.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 // Static. | |
27 AttachmentServiceProxy AttachmentServiceProxyForTest::Create() { | |
28 std::unique_ptr<AttachmentService> wrapped( | |
29 AttachmentService::CreateForTest()); | |
30 // This class's base class, AttachmentServiceProxy, must be initialized with a | |
31 // WeakPtr to an AttachmentService. Because the base class ctor must be | |
32 // invoked before any of this class's members are initialized, we create the | |
33 // WeakPtrFactory here and pass it to the ctor so that it may initialize its | |
34 // base class and own the WeakPtrFactory. | |
35 // | |
36 // We must pass by unique_ptr because WeakPtrFactory has no copy constructor. | |
37 std::unique_ptr<base::WeakPtrFactory<AttachmentService>> weak_ptr_factory( | |
38 new base::WeakPtrFactory<AttachmentService>(wrapped.get())); | |
39 | |
40 scoped_refptr<Core> core_for_test( | |
41 new OwningCore(std::move(wrapped), std::move(weak_ptr_factory))); | |
42 | |
43 scoped_refptr<base::SequencedTaskRunner> runner; | |
44 if (base::ThreadTaskRunnerHandle::IsSet()) { | |
45 runner = base::ThreadTaskRunnerHandle::Get(); | |
46 } else { | |
47 // Dummy runner for tests that don't have MessageLoop. | |
48 DVLOG(1) << "Creating dummy MessageLoop for AttachmentServiceProxy."; | |
49 base::MessageLoop loop; | |
50 // This works because |runner| takes a ref to the proxy. | |
51 runner = base::ThreadTaskRunnerHandle::Get(); | |
52 } | |
53 return AttachmentServiceProxyForTest(runner, core_for_test); | |
54 } | |
55 | |
56 AttachmentServiceProxyForTest::~AttachmentServiceProxyForTest() {} | |
57 | |
58 AttachmentServiceProxyForTest::AttachmentServiceProxyForTest( | |
59 const scoped_refptr<base::SequencedTaskRunner>& wrapped_task_runner, | |
60 const scoped_refptr<Core>& core) | |
61 : AttachmentServiceProxy(wrapped_task_runner, core) {} | |
62 | |
63 } // namespace syncer | |
OLD | NEW |