1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
content / public / android / java / src / org / chromium / content_public / browser / InterfaceRegistrar.java [blame]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.content_public.browser;
import org.chromium.services.service_manager.InterfaceRegistry;
import java.util.ArrayList;
import java.util.List;
/**
* A registrar for mojo interface implementations to provide to an InterfaceRegistry.
*
* @param <ParamType> the type of parameter to pass to the InterfaceRegistrar when adding its
* interfaces to an InterfaceRegistry
*/
public interface InterfaceRegistrar<ParamType> {
/** Invoked to register interfaces on |registry|, parametrized by |paramValue|. */
public void registerInterfaces(InterfaceRegistry registry, ParamType paramValue);
/** A registry of InterfaceRegistrars. */
public static class Registry<ParamType> {
private static Registry<Void> sSingletonRegistry;
private static Registry<WebContents> sWebContentsRegistry;
private static Registry<RenderFrameHost> sRenderFrameHostRegistry;
private List<InterfaceRegistrar<ParamType>> mRegistrars =
new ArrayList<InterfaceRegistrar<ParamType>>();
public static void applySingletonRegistrars(InterfaceRegistry interfaceRegistry) {
if (sSingletonRegistry == null) {
return;
}
sSingletonRegistry.applyRegistrars(interfaceRegistry, null);
}
public static void applyWebContentsRegistrars(
InterfaceRegistry interfaceRegistry, WebContents webContents) {
if (sWebContentsRegistry == null) {
return;
}
sWebContentsRegistry.applyRegistrars(interfaceRegistry, webContents);
}
public static void applyRenderFrameHostRegistrars(
InterfaceRegistry interfaceRegistry, RenderFrameHost renderFrameHost) {
if (sRenderFrameHostRegistry == null) {
return;
}
sRenderFrameHostRegistry.applyRegistrars(interfaceRegistry, renderFrameHost);
}
public static void addSingletonRegistrar(InterfaceRegistrar<Void> registrar) {
if (sSingletonRegistry == null) {
sSingletonRegistry = new Registry<>();
}
sSingletonRegistry.addRegistrar(registrar);
}
public static void addWebContentsRegistrar(InterfaceRegistrar<WebContents> registrar) {
if (sWebContentsRegistry == null) {
sWebContentsRegistry = new Registry<WebContents>();
}
sWebContentsRegistry.addRegistrar(registrar);
}
public static void addRenderFrameHostRegistrar(
InterfaceRegistrar<RenderFrameHost> registrar) {
if (sRenderFrameHostRegistry == null) {
sRenderFrameHostRegistry = new Registry<RenderFrameHost>();
}
sRenderFrameHostRegistry.addRegistrar(registrar);
}
private Registry() {}
private void addRegistrar(InterfaceRegistrar<ParamType> registrar) {
mRegistrars.add(registrar);
}
private void applyRegistrars(InterfaceRegistry interfaceRegistry, ParamType param) {
for (InterfaceRegistrar<ParamType> registrar : mRegistrars) {
registrar.registerInterfaces(interfaceRegistry, param);
}
}
}
}