8
8
#include " base/callback.h"
9
9
#include " base/memory/read_only_shared_memory_region.h"
10
10
#include " base/run_loop.h"
11
+ #include " base/test/scoped_task_environment.h"
11
12
#include " base/test/test_discardable_memory_allocator.h"
12
13
#include " cc/paint/paint_flags.h"
13
14
#include " cc/paint/skia_paint_canvas.h"
14
15
#include " components/services/pdf_compositor/pdf_compositor_service.h"
15
16
#include " components/services/pdf_compositor/public/cpp/pdf_service_mojo_types.h"
16
17
#include " components/services/pdf_compositor/public/interfaces/pdf_compositor.mojom.h"
17
- #include " mojo/public/cpp/bindings/binding_set.h"
18
- #include " services/service_manager/public/cpp/binder_registry.h"
19
- #include " services/service_manager/public/cpp/service_context.h"
20
- #include " services/service_manager/public/cpp/service_test.h"
21
- #include " services/service_manager/public/mojom/service_factory.mojom.h"
18
+ #include " services/service_manager/public/cpp/test/test_connector_factory.h"
22
19
#include " testing/gmock/include/gmock/gmock.h"
23
20
#include " testing/gtest/include/gtest/gtest.h"
24
21
#include " third_party/skia/include/core/SkStream.h"
25
22
#include " third_party/skia/src/utils/SkMultiPictureDocument.h"
26
23
27
24
namespace printing {
28
25
29
- // In order to test PdfCompositorService, this class overrides PrepareToStart()
30
- // to do nothing. So the test discardable memory allocator set up by
31
- // PdfCompositorServiceTest will be used. Also checks for the service setup are
32
- // skipped since we don't have those setups in unit tests.
33
- class PdfCompositorTestService : public printing ::PdfCompositorService {
26
+ class PdfCompositorServiceTest : public testing ::Test {
34
27
public:
35
- explicit PdfCompositorTestService (const std::string& creator)
36
- : PdfCompositorService(creator) {}
37
- ~PdfCompositorTestService () override {}
38
-
39
- // PdfCompositorService:
40
- void PrepareToStart () override {}
41
- };
42
-
43
- class PdfServiceTestClient : public service_manager ::test::ServiceTestClient,
44
- public service_manager::mojom::ServiceFactory {
45
- public:
46
- explicit PdfServiceTestClient (service_manager::test::ServiceTest* test)
47
- : service_manager::test::ServiceTestClient(test) {
48
- registry_.AddInterface <service_manager::mojom::ServiceFactory>(
49
- base::Bind (&PdfServiceTestClient::Create, base::Unretained (this )));
50
- }
51
- ~PdfServiceTestClient () override {}
52
-
53
- // service_manager::Service
54
- void OnBindInterface (const service_manager::BindSourceInfo& source_info,
55
- const std::string& interface_name,
56
- mojo::ScopedMessagePipeHandle interface_pipe) override {
57
- registry_.BindInterface (interface_name, std::move (interface_pipe));
28
+ PdfCompositorServiceTest ()
29
+ : connector_(test_connector_factory_.CreateConnector()),
30
+ service_ (
31
+ " pdf_compositor_service_unittest" ,
32
+ test_connector_factory_.RegisterInstance(mojom::kServiceName )) {
33
+ // We don't want the service instance setting up its own discardable memory
34
+ // allocator, which it normally does. Instead it will use the one provided
35
+ // by our fixture in |SetUp()| below.
36
+ service_.set_skip_initialization_for_testing (true );
58
37
}
59
38
60
- // service_manager::mojom::ServiceFactory
61
- void CreateService (
62
- service_manager::mojom::ServiceRequest request,
63
- const std::string& name,
64
- service_manager::mojom::PIDReceiverPtr pid_receiver) override {
65
- if (!name.compare (mojom::kServiceName )) {
66
- service_context_ = std::make_unique<service_manager::ServiceContext>(
67
- std::make_unique<PdfCompositorTestService>(" pdf_compositor_unittest" ),
68
- std::move (request));
69
- }
70
- }
71
-
72
- void Create (service_manager::mojom::ServiceFactoryRequest request) {
73
- service_factory_bindings_.AddBinding (this , std::move (request));
74
- }
75
-
76
- private:
77
- service_manager::BinderRegistry registry_;
78
- mojo::BindingSet<service_manager::mojom::ServiceFactory>
79
- service_factory_bindings_;
80
- std::unique_ptr<service_manager::ServiceContext> service_context_;
81
- };
82
-
83
- class PdfCompositorServiceTest : public service_manager ::test::ServiceTest {
84
- public:
85
- PdfCompositorServiceTest () : ServiceTest(" pdf_compositor_service_unittest" ) {}
86
- ~PdfCompositorServiceTest () override {}
39
+ ~PdfCompositorServiceTest () override = default ;
87
40
88
41
MOCK_METHOD1 (CallbackOnCompositeSuccess,
89
42
void (const base::ReadOnlySharedMemoryRegion&));
90
43
MOCK_METHOD1 (CallbackOnCompositeStatus, void (mojom::PdfCompositor::Status));
44
+
91
45
void OnCompositeToPdfCallback (mojom::PdfCompositor::Status status,
92
46
base::ReadOnlySharedMemoryRegion region) {
93
47
if (status == mojom::PdfCompositor::Status::SUCCESS)
@@ -100,11 +54,11 @@ class PdfCompositorServiceTest : public service_manager::test::ServiceTest {
100
54
MOCK_METHOD0 (ConnectionClosed, void ());
101
55
102
56
protected:
103
- // service_manager::test::ServiceTest:
57
+ service_manager::Connector* connector () { return connector_.get (); }
58
+
104
59
void SetUp () override {
105
60
base::DiscardableMemoryAllocator::SetInstance (
106
61
&discardable_memory_allocator_);
107
- ServiceTest::SetUp ();
108
62
109
63
ASSERT_FALSE (compositor_);
110
64
connector ()->BindInterface (mojom::kServiceName , &compositor_);
@@ -114,15 +68,10 @@ class PdfCompositorServiceTest : public service_manager::test::ServiceTest {
114
68
}
115
69
116
70
void TearDown () override {
117
- // Clean up
118
71
compositor_.reset ();
119
72
base::DiscardableMemoryAllocator::SetInstance (nullptr );
120
73
}
121
74
122
- std::unique_ptr<service_manager::Service> CreateService () override {
123
- return std::make_unique<PdfServiceTestClient>(this );
124
- }
125
-
126
75
base::ReadOnlySharedMemoryRegion CreateMSKP () {
127
76
SkDynamicMemoryWStream stream;
128
77
sk_sp<SkDocument> doc = SkMakeMultiPictureDocument (&stream);
@@ -156,11 +105,16 @@ class PdfCompositorServiceTest : public service_manager::test::ServiceTest {
156
105
run_loop_->Run ();
157
106
}
158
107
108
+ base::test::ScopedTaskEnvironment task_environment_;
159
109
std::unique_ptr<base::RunLoop> run_loop_;
160
110
mojom::PdfCompositorPtr compositor_;
161
111
base::TestDiscardableMemoryAllocator discardable_memory_allocator_;
162
112
163
113
private:
114
+ service_manager::TestConnectorFactory test_connector_factory_;
115
+ std::unique_ptr<service_manager::Connector> connector_;
116
+ PdfCompositorService service_;
117
+
164
118
DISALLOW_COPY_AND_ASSIGN (PdfCompositorServiceTest);
165
119
};
166
120
@@ -183,8 +137,8 @@ TEST_F(PdfCompositorServiceTest, InvokeCallbackOnSuccess) {
183
137
CallCompositorWithSuccess (std::move (compositor_));
184
138
}
185
139
186
- // Test coexistence of multiple service instances .
187
- TEST_F (PdfCompositorServiceTest, MultipleServiceInstances ) {
140
+ // Test coexistence of multiple PdfCompositor interface bindings .
141
+ TEST_F (PdfCompositorServiceTest, MultipleCompositors ) {
188
142
// One service can bind multiple interfaces.
189
143
mojom::PdfCompositorPtr another_compositor;
190
144
ASSERT_FALSE (another_compositor);
@@ -197,9 +151,9 @@ TEST_F(PdfCompositorServiceTest, MultipleServiceInstances) {
197
151
CallCompositorWithSuccess (std::move (another_compositor));
198
152
}
199
153
200
- // Test data structures and content of multiple service instances
154
+ // Test data structures and content of multiple PdfCompositor interface bindings
201
155
// are independent from each other.
202
- TEST_F (PdfCompositorServiceTest, IndependentServiceInstances ) {
156
+ TEST_F (PdfCompositorServiceTest, IndependentCompositors ) {
203
157
// Create a new connection 2.
204
158
mojom::PdfCompositorPtr compositor2;
205
159
ASSERT_FALSE (compositor2);
0 commit comments