Listen to USER_STARTED instead of USER_ADDED from WebViewUpdateService.
When adding a restricted user, 'hidden' applications are uninstalled for
the user after creation of the user, but before the user is 'started'.
Because WebViewUpdateService only listens to USER_ADDED and USER_REMOVED
intents it wouldn't realize that Chrome had been uninstalled for a new
restricted user (at the time of user-creation Chrome would be
installed). Instead listen to user-started/stopped intents to ensure the
restricted-user case is handled correctly.
Bug: 35813523
Test: Add a restricted user (on a Pixel C), with Chrome disabled. Start
an app using WebView (and ensure WebView doesn't crash).
Change-Id: I0c5d0a543b4bc80d269e586444b80cd3baffa11c
diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateService.java b/services/core/java/com/android/server/webkit/WebViewUpdateService.java
index 3b400b4..d7458f2 100644
--- a/services/core/java/com/android/server/webkit/WebViewUpdateService.java
+++ b/services/core/java/com/android/server/webkit/WebViewUpdateService.java
@@ -92,7 +92,7 @@
(intent.getExtras().getBoolean(Intent.EXTRA_REPLACING)
? PACKAGE_ADDED_REPLACED : PACKAGE_ADDED), userId);
break;
- case Intent.ACTION_USER_ADDED:
+ case Intent.ACTION_USER_STARTED:
mImpl.handleNewUser(userId);
break;
case Intent.ACTION_USER_REMOVED:
@@ -115,7 +115,7 @@
null /* broadcast permission */, null /* handler */);
IntentFilter userAddedFilter = new IntentFilter();
- userAddedFilter.addAction(Intent.ACTION_USER_ADDED);
+ userAddedFilter.addAction(Intent.ACTION_USER_STARTED);
userAddedFilter.addAction(Intent.ACTION_USER_REMOVED);
getContext().registerReceiverAsUser(mWebViewUpdatedReceiver, UserHandle.ALL,
userAddedFilter, null /* broadcast permission */, null /* handler */);