summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2014-07-17 14:55:00 +0100
committerBen Murdoch <benm@google.com>2014-07-17 21:18:40 +0000
commitdc00a84af15ff3594a6dfa512be21095bf9fee82 (patch)
treece23ac29855ef8fa696285a2fe7ae4a50f67b645 /services
parent6ccb5f894e11a0ee59c0632643f265427731536e (diff)
downloadframeworks_base-dc00a84af15ff3594a6dfa512be21095bf9fee82.zip
frameworks_base-dc00a84af15ff3594a6dfa512be21095bf9fee82.tar.gz
frameworks_base-dc00a84af15ff3594a6dfa512be21095bf9fee82.tar.bz2
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
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/webkit/WebViewUpdateService.java32
-rw-r--r--services/java/com/android/server/SystemServer.java2
2 files changed, 32 insertions, 2 deletions
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 @@ public class WebViewUpdateService extends IWebViewUpdateService.Stub {
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 @@ public class WebViewUpdateService extends IWebViewUpdateService.Stub {
}
}
}
+
+ private void onWebViewUpdateInstalled() {
+ Log.d(TAG, "WebView Package updated!");
+
+ synchronized (this) {
+ mRelroReady32Bit = false;
+ mRelroReady64Bit = false;
+ }
+ WebViewFactory.prepareWebViewInSystemServer();
+ }
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index a6030cf..b224249 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -411,7 +411,7 @@ public final class SystemServer {
SystemConfig.getInstance();
Slog.i(TAG, "WebView Update Service");
- ServiceManager.addService("webviewupdate", new WebViewUpdateService());
+ ServiceManager.addService("webviewupdate", new WebViewUpdateService(context));
Slog.i(TAG, "WebViewFactory preparation");
WebViewFactory.prepareWebViewInSystemServer();