diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/AppsFilter.java | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/webkit/WebViewUpdateService.java | 32 |
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 |