• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.base.process_launcher;
6 
7 import android.content.ComponentName;
8 import android.content.Intent;
9 import android.os.Bundle;
10 
11 /** An implementation of ChildProcessConnection that does not connect to a real service. */
12 public class TestChildProcessConnection extends ChildProcessConnection {
13     private static class MockChildServiceConnection implements ChildServiceConnection {
14         private boolean mBound;
15 
16         @Override
bindServiceConnection()17         public boolean bindServiceConnection() {
18             mBound = true;
19             return true;
20         }
21 
22         @Override
unbindServiceConnection()23         public void unbindServiceConnection() {
24             mBound = false;
25         }
26 
27         @Override
isBound()28         public boolean isBound() {
29             return mBound;
30         }
31 
32         @Override
updateGroupImportance(int group, int importanceInGroup)33         public void updateGroupImportance(int group, int importanceInGroup) {}
34 
35         @Override
retire()36         public void retire() {}
37     }
38 
39     private int mPid;
40     private boolean mConnected;
41     private ServiceCallback mServiceCallback;
42     private boolean mRebindCalled;
43 
44     /**
45      * Creates a mock binding corresponding to real ManagedChildProcessConnection after the
46      * connection is established: with initial binding bound and no strong binding.
47      */
TestChildProcessConnection( ComponentName serviceName, boolean bindToCaller, boolean bindAsExternalService, Bundle serviceBundle)48     public TestChildProcessConnection(
49             ComponentName serviceName,
50             boolean bindToCaller,
51             boolean bindAsExternalService,
52             Bundle serviceBundle) {
53         super(
54                 /* context= */ null,
55                 serviceName,
56                 null,
57                 bindToCaller,
58                 bindAsExternalService,
59                 serviceBundle,
60                 new ChildServiceConnectionFactory() {
61                     @Override
62                     public ChildServiceConnection createConnection(
63                             Intent bindIntent,
64                             int bindFlags,
65                             ChildServiceConnectionDelegate delegate,
66                             String instanceName) {
67                         return new MockChildServiceConnection();
68                     }
69                 },
70                 /* instanceName= */ null);
71     }
72 
setPid(int pid)73     public void setPid(int pid) {
74         mPid = pid;
75     }
76 
77     @Override
getPid()78     public int getPid() {
79         return mPid;
80     }
81 
82     // We don't have a real service so we have to mock the connection status.
83     @Override
start(boolean useStrongBinding, ServiceCallback serviceCallback)84     public void start(boolean useStrongBinding, ServiceCallback serviceCallback) {
85         super.start(useStrongBinding, serviceCallback);
86         mConnected = true;
87         mServiceCallback = serviceCallback;
88     }
89 
90     @Override
rebind()91     public void rebind() {
92         super.rebind();
93         mRebindCalled = true;
94     }
95 
96     @Override
stop()97     public void stop() {
98         super.stop();
99         mConnected = false;
100     }
101 
102     @Override
isConnected()103     public boolean isConnected() {
104         return mConnected;
105     }
106 
getServiceCallback()107     public ServiceCallback getServiceCallback() {
108         return mServiceCallback;
109     }
110 
getAndResetRebindCalled()111     public boolean getAndResetRebindCalled() {
112         boolean called = mRebindCalled;
113         mRebindCalled = false;
114         return called;
115     }
116 }
117