diff options
author | Ben Murdoch <benm@google.com> | 2014-07-17 14:55:00 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2014-07-17 21:18:40 +0000 |
commit | dc00a84af15ff3594a6dfa512be21095bf9fee82 (patch) | |
tree | ce23ac29855ef8fa696285a2fe7ae4a50f67b645 /services | |
parent | 6ccb5f894e11a0ee59c0632643f265427731536e (diff) | |
download | frameworks_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.java | 32 | ||||
-rw-r--r-- | services/java/com/android/server/SystemServer.java | 2 |
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(); |