Update WebViewUpdateService to receive PACKAGE_REPLACED broadcast.
This allows the WebViewUpdateService to receive notifications that
an update has been installed and we need to trigger recreation of
the relro file.
bug: 16329377
Change-Id: I088e61487416add997995db304beca0cde71390c
diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateService.java b/services/core/java/com/android/server/webkit/WebViewUpdateService.java
index e8ae97c..60724e7 100644
--- a/services/core/java/com/android/server/webkit/WebViewUpdateService.java
+++ b/services/core/java/com/android/server/webkit/WebViewUpdateService.java
@@ -16,10 +16,15 @@
package com.android.server.webkit;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.os.Binder;
import android.os.Process;
import android.util.Log;
import android.webkit.IWebViewUpdateService;
+import android.webkit.WebViewFactory;
/**
* Private service to wait for the updatable WebView to be ready for use.
@@ -32,7 +37,22 @@
private boolean mRelroReady32Bit = false;
private boolean mRelroReady64Bit = false;
- public WebViewUpdateService() {
+ private BroadcastReceiver mWebViewUpdatedReceiver;
+
+ public WebViewUpdateService(Context context) {
+ mWebViewUpdatedReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String webviewPackage = "package:" + WebViewFactory.getWebViewPackageName();
+ if (webviewPackage.equals(intent.getDataString())) {
+ onWebViewUpdateInstalled();
+ }
+ }
+ };
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
+ filter.addDataScheme("package");
+ context.registerReceiver(mWebViewUpdatedReceiver, filter);
}
/**
@@ -75,4 +95,14 @@
}
}
}
+
+ private void onWebViewUpdateInstalled() {
+ Log.d(TAG, "WebView Package updated!");
+
+ synchronized (this) {
+ mRelroReady32Bit = false;
+ mRelroReady64Bit = false;
+ }
+ WebViewFactory.prepareWebViewInSystemServer();
+ }
}