diff options
| author | 2020-01-14 14:49:07 -0800 | |
|---|---|---|
| committer | 2020-01-24 09:39:36 -0800 | |
| commit | efb37369ad631679aab60d970856fdff3dc2d8d8 (patch) | |
| tree | 5332af7c9606d75e10860fc428f356689a54b591 | |
| parent | 26050dbd4dfc372990ffd2c0e16129dd89bd0149 (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.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 |