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); + } }