summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Patrick Baumann <patb@google.com> 2020-01-14 14:49:07 -0800
committer Patrick Baumann <patb@google.com> 2020-01-24 09:39:36 -0800
commitefb37369ad631679aab60d970856fdff3dc2d8d8 (patch)
tree5332af7c9606d75e10860fc428f356689a54b591
parent26050dbd4dfc372990ffd2c0e16129dd89bd0149 (diff)
Marks resolved webview provider as visible
This change modifies the webview updater to mark the resolved webview provider as visible to the calling app. This will last until device reboot. Test: atest CtsHostsideWebViewTests CtsWebkitTestCases Bug: 142386643 Change-Id: I4e0bac46d268b128033f6f2970b155936d66ca27
-rw-r--r--services/core/java/com/android/server/pm/AppsFilter.java2
-rw-r--r--services/core/java/com/android/server/webkit/WebViewUpdateService.java32
2 files changed, 30 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java
index 78e17192ed58..917b5a9c8de6 100644
--- a/services/core/java/com/android/server/pm/AppsFilter.java
+++ b/services/core/java/com/android/server/pm/AppsFilter.java
@@ -657,7 +657,7 @@ public class AppsFilter {
String description, Throwable throwable) {
Slog.wtf(TAG,
"interaction: " + callingPkgSetting
- + " -> " + targetPkgSetting.name + " "
+ + " -> " + targetPkgSetting + " "
+ description, throwable);
}
diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateService.java b/services/core/java/com/android/server/webkit/WebViewUpdateService.java
index 0abe68f270f3..8130546e2699 100644
--- a/services/core/java/com/android/server/webkit/WebViewUpdateService.java
+++ b/services/core/java/com/android/server/webkit/WebViewUpdateService.java
@@ -22,6 +22,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.content.pm.PackageManagerInternal;
import android.os.Binder;
import android.os.PatternMatcher;
import android.os.Process;
@@ -34,6 +35,7 @@ import android.webkit.WebViewProviderInfo;
import android.webkit.WebViewProviderResponse;
import com.android.internal.util.DumpUtils;
+import com.android.server.LocalServices;
import com.android.server.SystemService;
import java.io.FileDescriptor;
@@ -191,7 +193,26 @@ public class WebViewUpdateService extends SystemService {
throw new IllegalStateException("Cannot create a WebView from the SystemServer");
}
- return WebViewUpdateService.this.mImpl.waitForAndGetProvider();
+ final WebViewProviderResponse webViewProviderResponse =
+ WebViewUpdateService.this.mImpl.waitForAndGetProvider();
+ if (webViewProviderResponse.packageInfo != null) {
+ grantVisibilityToCaller(
+ webViewProviderResponse.packageInfo.packageName, Binder.getCallingUid());
+ }
+ return webViewProviderResponse;
+ }
+
+ /**
+ * Grants app visibility of the webViewPackageName to the currently bound caller.
+ * @param webViewPackageName
+ */
+ private void grantVisibilityToCaller(String webViewPackageName, int callingUid) {
+ final PackageManagerInternal pmInternal = LocalServices.getService(
+ PackageManagerInternal.class);
+ final int webviewUid = pmInternal.getPackageUidInternal(
+ webViewPackageName, 0, UserHandle.getUserId(callingUid));
+ pmInternal.grantImplicitAccess(UserHandle.getUserId(callingUid), null, webviewUid,
+ UserHandle.getAppId(callingUid));
}
/**
@@ -231,13 +252,18 @@ public class WebViewUpdateService extends SystemService {
@Override // Binder call
public String getCurrentWebViewPackageName() {
- PackageInfo pi = WebViewUpdateService.this.mImpl.getCurrentWebViewPackage();
+ PackageInfo pi = getCurrentWebViewPackage();
return pi == null ? null : pi.packageName;
}
@Override // Binder call
public PackageInfo getCurrentWebViewPackage() {
- return WebViewUpdateService.this.mImpl.getCurrentWebViewPackage();
+ final PackageInfo currentWebViewPackage =
+ WebViewUpdateService.this.mImpl.getCurrentWebViewPackage();
+ if (currentWebViewPackage != null) {
+ grantVisibilityToCaller(currentWebViewPackage.packageName, Binder.getCallingUid());
+ }
+ return currentWebViewPackage;
}
@Override // Binder call