From 1eb3820d7e7a3cc5d1a68a08e4cc924fed0f0b68 Mon Sep 17 00:00:00 2001 From: Gustav Sennton Date: Fri, 21 Oct 2016 13:40:10 +0100 Subject: [PATCH] Dump the entire state of WebViewUpdateService on demand. It is especially useful to know which is the current WebView package but we also add some other state to be able to debug WebViewUpdateService. Bug: 32307028 Test: Run 'adb shell dumpsys webviewupdate' and inspect printed contents. Test: Take bug report and inspect the 'webviewupdate' dump section. Change-Id: I79c2cda87ea7633a915eae5de3c3015b18ed6d7c --- .../server/webkit/WebViewUpdateService.java | 14 ++++++++ .../webkit/WebViewUpdateServiceImpl.java | 32 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateService.java b/services/core/java/com/android/server/webkit/WebViewUpdateService.java index 6d97796d3d3ea..0a7454f316696 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateService.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateService.java @@ -36,6 +36,7 @@ import android.webkit.WebViewProviderResponse; import com.android.server.SystemService; import java.io.FileDescriptor; +import java.io.PrintWriter; import java.util.Arrays; /** @@ -259,5 +260,18 @@ public class WebViewUpdateService extends SystemService { Binder.restoreCallingIdentity(callingId); } } + + @Override + protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.DUMP) + != PackageManager.PERMISSION_GRANTED) { + + pw.println("Permission Denial: can't dump webviewupdate service from pid=" + + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()); + return; + } + + WebViewUpdateService.this.mImpl.dumpState(pw); + } } } diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java index 453e7458b19c6..1a77c68d83d27 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java @@ -30,6 +30,7 @@ import android.webkit.WebViewFactory; import android.webkit.WebViewProviderInfo; import android.webkit.WebViewProviderResponse; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -673,6 +674,27 @@ public class WebViewUpdateServiceImpl { mMinimumVersionCode = minimumVersionCode; return mMinimumVersionCode; } + + public void dumpState(PrintWriter pw) { + synchronized (mLock) { + if (mCurrentWebViewPackage == null) { + pw.println(" Current WebView package is null"); + } else { + pw.println(String.format(" Current WebView package (name, version): (%s, %s)", + mCurrentWebViewPackage.packageName, + mCurrentWebViewPackage.versionName)); + } + pw.println(String.format(" Minimum WebView version code: %d", + mMinimumVersionCode)); + pw.println(String.format(" Number of relros started: %d", + mNumRelroCreationsStarted)); + pw.println(String.format(" Number of relros finished: %d", + mNumRelroCreationsFinished)); + pw.println(String.format(" WebView package dirty: %b", mWebViewPackageDirty)); + pw.println(String.format(" Any WebView package installed: %b", + mAnyWebViewInstalled)); + } + } } private static boolean providerHasValidSignature(WebViewProviderInfo provider, @@ -741,4 +763,14 @@ public class WebViewUpdateServiceImpl { mSystemInterface.setMultiProcessEnabledFromContext(mContext); } } + + /** + * Dump the state of this Service. + */ + void dumpState(PrintWriter pw) { + pw.println("Current WebView Update Service state"); + pw.println(String.format(" Fallback logic enabled: %b", + mSystemInterface.isFallbackLogicEnabled())); + mWebViewUpdater.dumpState(pw); + } }