summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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