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