Skip to content

Commit b4dc618

Browse files
krockotCommit Bot
authored and
Commit Bot
committed
Move pdf_compositor off ServiceContext/ServiceTest
Migrates pdf_compositor from ServiceContext to ServiceBinding and makes its tests regular unit tests instead of using the deprecated ServiceTest framework. TBR=thestig@chromium.org Bug: 891780,906239 Change-Id: Ia2485320e71352b3263108544fbea06c6b8ca6ef Reviewed-on: https://chromium-review.googlesource.com/c/1343506 Reviewed-by: Ken Rockot <rockot@google.com> Reviewed-by: Jochen Eisinger <jochen@chromium.org> Reviewed-by: Robert Sesek <rsesek@chromium.org> Reviewed-by: Sami Kyöstilä <skyostil@chromium.org> Reviewed-by: Wei Li <weili@chromium.org> Commit-Queue: Ken Rockot <rockot@google.com> Cr-Commit-Position: refs/heads/master@{#610340}
1 parent 1c8d73b commit b4dc618

13 files changed

+95
-180
lines changed

chrome/utility/chrome_content_utility_client.cc

+7-7
Original file line numberDiff line numberDiff line change
@@ -204,13 +204,6 @@ void ChromeContentUtilityClient::RegisterServices(
204204
services->emplace(device::mojom::kVrIsolatedServiceName, service_info);
205205
#endif
206206

207-
#if BUILDFLAG(ENABLE_PRINTING)
208-
service_manager::EmbeddedServiceInfo pdf_compositor_info;
209-
pdf_compositor_info.factory = base::BindRepeating(
210-
&printing::CreatePdfCompositorService, GetUserAgent());
211-
services->emplace(printing::mojom::kServiceName, pdf_compositor_info);
212-
#endif
213-
214207
#if BUILDFLAG(ENABLE_PRINT_PREVIEW) || \
215208
(BUILDFLAG(ENABLE_PRINTING) && defined(OS_WIN))
216209
service_manager::EmbeddedServiceInfo printing_info;
@@ -328,6 +321,13 @@ ChromeContentUtilityClient::HandleServiceRequest(
328321
return std::make_unique<patch::PatchService>(std::move(request));
329322
#endif
330323

324+
#if BUILDFLAG(ENABLE_PRINTING)
325+
if (service_name == printing::mojom::kServiceName) {
326+
return printing::CreatePdfCompositorService(GetUserAgent(),
327+
std::move(request));
328+
}
329+
#endif
330+
331331
#if defined(OS_CHROMEOS)
332332
if (service_name == chromeos::ime::mojom::kServiceName)
333333
return std::make_unique<chromeos::ime::ImeService>(std::move(request));

components/services/pdf_compositor/BUILD.gn

+3-7
Original file line numberDiff line numberDiff line change
@@ -53,22 +53,18 @@ if (enable_basic_printing) {
5353
"//testing/gmock/include",
5454
"//third_party/skia/include/core",
5555
]
56+
5657
deps = [
5758
":pdf_compositor",
59+
"//base",
5860
"//base/test:test_support",
5961
"//cc/paint:paint",
6062
"//components/crash/core/common:crash_key",
6163
"//components/services/pdf_compositor/public/interfaces",
62-
"//services/service_manager/public/cpp:service_test_support",
64+
"//services/service_manager/public/cpp/test:test_support",
6365
"//skia",
6466
"//testing/gmock",
6567
"//testing/gtest",
6668
]
6769
}
68-
69-
service_manifest("pdf_compositor_service_unittest_manifest") {
70-
name = "pdf_compositor_service_unittest"
71-
source = "pdf_compositor_service_unittest_manifest.json"
72-
packaged_services = [ ":pdf_compositor_manifest" ]
73-
}
7470
}

components/services/pdf_compositor/OWNERS

-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,3 @@ file://printing/OWNERS
22

33
per-file pdf_compositor_manifest.json=set noparent
44
per-file pdf_compositor_manifest.json=file://ipc/SECURITY_OWNERS
5-
6-
per-file pdf_compositor_service_unittest_manifest.json=set noparent
7-
per-file pdf_compositor_service_unittest_manifest.json=file://ipc/SECURITY_OWNERS

components/services/pdf_compositor/pdf_compositor_service.cc

+27-24
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,24 @@
3232

3333
namespace {
3434

35-
void OnPdfCompositorRequest(
36-
const std::string& creator,
37-
service_manager::ServiceContextRefFactory* ref_factory,
38-
printing::mojom::PdfCompositorRequest request) {
35+
void OnPdfCompositorRequest(const std::string& creator,
36+
service_manager::ServiceKeepalive* keepalive,
37+
printing::mojom::PdfCompositorRequest request) {
3938
mojo::MakeStrongBinding(std::make_unique<printing::PdfCompositorImpl>(
40-
creator, ref_factory->CreateRef()),
39+
creator, keepalive->CreateRef()),
4140
std::move(request));
4241
}
42+
4343
} // namespace
4444

4545
namespace printing {
4646

47-
PdfCompositorService::PdfCompositorService(const std::string& creator)
48-
: creator_(creator.empty() ? "Chromium" : creator), weak_factory_(this) {}
47+
PdfCompositorService::PdfCompositorService(
48+
const std::string& creator,
49+
service_manager::mojom::ServiceRequest request)
50+
: creator_(creator.empty() ? "Chromium" : creator),
51+
binding_(this, std::move(request)),
52+
keepalive_(&binding_, base::TimeDelta{}) {}
4953

5054
PdfCompositorService::~PdfCompositorService() {
5155
#if defined(OS_WIN)
@@ -55,27 +59,35 @@ PdfCompositorService::~PdfCompositorService() {
5559

5660
// static
5761
std::unique_ptr<service_manager::Service> PdfCompositorService::Create(
58-
const std::string& creator) {
62+
const std::string& creator,
63+
service_manager::mojom::ServiceRequest request) {
5964
#if defined(OS_WIN)
6065
// Initialize direct write font proxy so skia can use it.
6166
content::InitializeDWriteFontProxy();
6267
#endif
63-
return std::make_unique<printing::PdfCompositorService>(creator);
68+
return std::make_unique<printing::PdfCompositorService>(creator,
69+
std::move(request));
6470
}
6571

66-
void PdfCompositorService::PrepareToStart() {
72+
void PdfCompositorService::OnStart() {
73+
registry_.AddInterface(
74+
base::BindRepeating(&OnPdfCompositorRequest, creator_, &keepalive_));
75+
76+
if (skip_initialization_for_testing_)
77+
return;
78+
6779
// Set up discardable memory manager.
6880
discardable_memory::mojom::DiscardableSharedMemoryManagerPtr manager_ptr;
6981
if (features::IsMultiProcessMash()) {
7082
#if defined(USE_AURA)
71-
context()->connector()->BindInterface(ws::mojom::kServiceName,
72-
&manager_ptr);
83+
binding_.GetConnector()->BindInterface(ws::mojom::kServiceName,
84+
&manager_ptr);
7385
#else
7486
NOTREACHED();
7587
#endif
7688
} else {
77-
context()->connector()->BindInterface(content::mojom::kBrowserServiceName,
78-
&manager_ptr);
89+
binding_.GetConnector()->BindInterface(content::mojom::kBrowserServiceName,
90+
&manager_ptr);
7991
}
8092
discardable_shared_memory_manager_ = std::make_unique<
8193
discardable_memory::ClientDiscardableSharedMemoryManager>(
@@ -99,19 +111,10 @@ void PdfCompositorService::PrepareToStart() {
99111
// Initialize a connection to FontLoaderMac service so blink platform's web
100112
// sandbox support can communicate with it to load font.
101113
content::UtilityThread::Get()->InitializeFontLoaderMac(
102-
context()->connector());
114+
binding_.GetConnector());
103115
#endif
104116
}
105117

106-
void PdfCompositorService::OnStart() {
107-
PrepareToStart();
108-
109-
ref_factory_ = std::make_unique<service_manager::ServiceContextRefFactory>(
110-
context()->CreateQuitClosure());
111-
registry_.AddInterface(
112-
base::Bind(&OnPdfCompositorRequest, creator_, ref_factory_.get()));
113-
}
114-
115118
void PdfCompositorService::OnBindInterface(
116119
const service_manager::BindSourceInfo& source_info,
117120
const std::string& interface_name,

components/services/pdf_compositor/pdf_compositor_service.h

+13-6
Original file line numberDiff line numberDiff line change
@@ -14,38 +14,45 @@
1414
#include "components/services/pdf_compositor/public/interfaces/pdf_compositor.mojom.h"
1515
#include "services/service_manager/public/cpp/binder_registry.h"
1616
#include "services/service_manager/public/cpp/service.h"
17-
#include "services/service_manager/public/cpp/service_context_ref.h"
17+
#include "services/service_manager/public/cpp/service_binding.h"
18+
#include "services/service_manager/public/cpp/service_keepalive.h"
1819

1920
namespace printing {
2021

2122
class PdfCompositorService : public service_manager::Service {
2223
public:
23-
explicit PdfCompositorService(const std::string& creator);
24+
PdfCompositorService(const std::string& creator,
25+
service_manager::mojom::ServiceRequest request);
2426
~PdfCompositorService() override;
2527

2628
// Factory function for use as an embedded service.
2729
static std::unique_ptr<service_manager::Service> Create(
28-
const std::string& creator);
30+
const std::string& creator,
31+
service_manager::mojom::ServiceRequest request);
2932

3033
// service_manager::Service:
3134
void OnStart() override;
3235
void OnBindInterface(const service_manager::BindSourceInfo& source_info,
3336
const std::string& interface_name,
3437
mojo::ScopedMessagePipeHandle interface_pipe) override;
3538

36-
virtual void PrepareToStart();
39+
void set_skip_initialization_for_testing(bool skip) {
40+
skip_initialization_for_testing_ = skip;
41+
}
3742

3843
private:
3944
// The creator of this service.
4045
// Currently contains the service creator's user agent string if given,
4146
// otherwise just use string "Chromium".
4247
const std::string creator_;
4348

49+
service_manager::ServiceBinding binding_;
50+
service_manager::ServiceKeepalive keepalive_;
51+
bool skip_initialization_for_testing_ = false;
4452
std::unique_ptr<discardable_memory::ClientDiscardableSharedMemoryManager>
4553
discardable_shared_memory_manager_;
46-
std::unique_ptr<service_manager::ServiceContextRefFactory> ref_factory_;
4754
service_manager::BinderRegistry registry_;
48-
base::WeakPtrFactory<PdfCompositorService> weak_factory_;
55+
base::WeakPtrFactory<PdfCompositorService> weak_factory_{this};
4956

5057
DISALLOW_COPY_AND_ASSIGN(PdfCompositorService);
5158
};

components/services/pdf_compositor/pdf_compositor_service_unittest.cc

+25-71
Original file line numberDiff line numberDiff line change
@@ -8,86 +8,40 @@
88
#include "base/callback.h"
99
#include "base/memory/read_only_shared_memory_region.h"
1010
#include "base/run_loop.h"
11+
#include "base/test/scoped_task_environment.h"
1112
#include "base/test/test_discardable_memory_allocator.h"
1213
#include "cc/paint/paint_flags.h"
1314
#include "cc/paint/skia_paint_canvas.h"
1415
#include "components/services/pdf_compositor/pdf_compositor_service.h"
1516
#include "components/services/pdf_compositor/public/cpp/pdf_service_mojo_types.h"
1617
#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"
2219
#include "testing/gmock/include/gmock/gmock.h"
2320
#include "testing/gtest/include/gtest/gtest.h"
2421
#include "third_party/skia/include/core/SkStream.h"
2522
#include "third_party/skia/src/utils/SkMultiPictureDocument.h"
2623

2724
namespace printing {
2825

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 {
3427
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);
5837
}
5938

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;
8740

8841
MOCK_METHOD1(CallbackOnCompositeSuccess,
8942
void(const base::ReadOnlySharedMemoryRegion&));
9043
MOCK_METHOD1(CallbackOnCompositeStatus, void(mojom::PdfCompositor::Status));
44+
9145
void OnCompositeToPdfCallback(mojom::PdfCompositor::Status status,
9246
base::ReadOnlySharedMemoryRegion region) {
9347
if (status == mojom::PdfCompositor::Status::SUCCESS)
@@ -100,11 +54,11 @@ class PdfCompositorServiceTest : public service_manager::test::ServiceTest {
10054
MOCK_METHOD0(ConnectionClosed, void());
10155

10256
protected:
103-
// service_manager::test::ServiceTest:
57+
service_manager::Connector* connector() { return connector_.get(); }
58+
10459
void SetUp() override {
10560
base::DiscardableMemoryAllocator::SetInstance(
10661
&discardable_memory_allocator_);
107-
ServiceTest::SetUp();
10862

10963
ASSERT_FALSE(compositor_);
11064
connector()->BindInterface(mojom::kServiceName, &compositor_);
@@ -114,15 +68,10 @@ class PdfCompositorServiceTest : public service_manager::test::ServiceTest {
11468
}
11569

11670
void TearDown() override {
117-
// Clean up
11871
compositor_.reset();
11972
base::DiscardableMemoryAllocator::SetInstance(nullptr);
12073
}
12174

122-
std::unique_ptr<service_manager::Service> CreateService() override {
123-
return std::make_unique<PdfServiceTestClient>(this);
124-
}
125-
12675
base::ReadOnlySharedMemoryRegion CreateMSKP() {
12776
SkDynamicMemoryWStream stream;
12877
sk_sp<SkDocument> doc = SkMakeMultiPictureDocument(&stream);
@@ -156,11 +105,16 @@ class PdfCompositorServiceTest : public service_manager::test::ServiceTest {
156105
run_loop_->Run();
157106
}
158107

108+
base::test::ScopedTaskEnvironment task_environment_;
159109
std::unique_ptr<base::RunLoop> run_loop_;
160110
mojom::PdfCompositorPtr compositor_;
161111
base::TestDiscardableMemoryAllocator discardable_memory_allocator_;
162112

163113
private:
114+
service_manager::TestConnectorFactory test_connector_factory_;
115+
std::unique_ptr<service_manager::Connector> connector_;
116+
PdfCompositorService service_;
117+
164118
DISALLOW_COPY_AND_ASSIGN(PdfCompositorServiceTest);
165119
};
166120

@@ -183,8 +137,8 @@ TEST_F(PdfCompositorServiceTest, InvokeCallbackOnSuccess) {
183137
CallCompositorWithSuccess(std::move(compositor_));
184138
}
185139

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) {
188142
// One service can bind multiple interfaces.
189143
mojom::PdfCompositorPtr another_compositor;
190144
ASSERT_FALSE(another_compositor);
@@ -197,9 +151,9 @@ TEST_F(PdfCompositorServiceTest, MultipleServiceInstances) {
197151
CallCompositorWithSuccess(std::move(another_compositor));
198152
}
199153

200-
// Test data structures and content of multiple service instances
154+
// Test data structures and content of multiple PdfCompositor interface bindings
201155
// are independent from each other.
202-
TEST_F(PdfCompositorServiceTest, IndependentServiceInstances) {
156+
TEST_F(PdfCompositorServiceTest, IndependentCompositors) {
203157
// Create a new connection 2.
204158
mojom::PdfCompositorPtr compositor2;
205159
ASSERT_FALSE(compositor2);

components/services/pdf_compositor/pdf_compositor_service_unittest_manifest.json

-17
This file was deleted.

0 commit comments

Comments
 (0)