Merge "Make a defensive copy when sending NetworkInfo change"
This commit is contained in:
commit
8eda07cff7
2 changed files with 22 additions and 2 deletions
|
|
@ -1076,11 +1076,12 @@ public abstract class NetworkAgent {
|
|||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
|
||||
public final void sendNetworkInfo(NetworkInfo networkInfo) {
|
||||
queueOrSendNetworkInfo(new NetworkInfo(networkInfo));
|
||||
queueOrSendNetworkInfo(networkInfo);
|
||||
}
|
||||
|
||||
private void queueOrSendNetworkInfo(NetworkInfo networkInfo) {
|
||||
queueOrSendMessage(reg -> reg.sendNetworkInfo(networkInfo));
|
||||
final NetworkInfo ni = new NetworkInfo(networkInfo);
|
||||
queueOrSendMessage(reg -> reg.sendNetworkInfo(ni));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1275,4 +1275,23 @@ class NetworkAgentTest {
|
|||
matchAllCallback.expectCallback<Lost>(wifiNetwork)
|
||||
wifiAgent.expectCallback<OnNetworkUnwanted>()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testUnregisterAgentBeforeAgentFullyConnected() {
|
||||
val specifier = UUID.randomUUID().toString()
|
||||
val callback = TestableNetworkCallback()
|
||||
val transports = intArrayOf(TRANSPORT_CELLULAR)
|
||||
// Ensure this NetworkAgent is never unneeded by filing a request with its specifier.
|
||||
requestNetwork(makeTestNetworkRequest(specifier = specifier), callback)
|
||||
val nc = makeTestNetworkCapabilities(specifier, transports)
|
||||
val agent = createNetworkAgent(realContext, initialNc = nc)
|
||||
// Connect the agent
|
||||
agent.register()
|
||||
// Mark agent connected then unregister agent immediately. Verify that both available and
|
||||
// lost callback should be sent still.
|
||||
agent.markConnected()
|
||||
agent.unregister()
|
||||
callback.expectCallback<Available>(agent.network!!)
|
||||
callback.eventuallyExpect<Lost> { it.network == agent.network }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue