Merge "Don\'t pass calling contexts into static services." into nyc-dev

am: 7f2b6e2a84

* commit '7f2b6e2a8492d2b751f1695a747aef5f53d30d8c':
  Don't pass calling contexts into static services.
This commit is contained in:
Lorenzo Colitti
2016-03-02 01:42:55 +00:00
committed by android-build-merger

View File

@@ -226,7 +226,7 @@ final class SystemServiceRegistry {
SYSTEM_SERVICE_NAMES.put(android.text.ClipboardManager.class, Context.CLIPBOARD_SERVICE);
registerService(Context.CONNECTIVITY_SERVICE, ConnectivityManager.class,
new StaticOuterContextServiceFetcher<ConnectivityManager>() {
new StaticApplicationContextServiceFetcher<ConnectivityManager>() {
@Override
public ConnectivityManager createService(Context context) {
IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
@@ -840,22 +840,21 @@ final class SystemServiceRegistry {
}
/**
* Like StaticServiceFetcher, creates only one instance of the service per process, but when
* creating the service for the first time, passes it the outer context of the creating
* component.
* Like StaticServiceFetcher, creates only one instance of the service per application, but when
* creating the service for the first time, passes it the application context of the creating
* application.
*
* TODO: Is this safe in the case where multiple applications share the same process?
* TODO: Delete this once its only user (ConnectivityManager) is known to work well in the
* case where multiple application components each have their own ConnectivityManager object.
*/
static abstract class StaticOuterContextServiceFetcher<T> implements ServiceFetcher<T> {
static abstract class StaticApplicationContextServiceFetcher<T> implements ServiceFetcher<T> {
private T mCachedInstance;
@Override
public final T getService(ContextImpl ctx) {
synchronized (StaticOuterContextServiceFetcher.this) {
synchronized (StaticApplicationContextServiceFetcher.this) {
if (mCachedInstance == null) {
mCachedInstance = createService(ctx.getOuterContext());
mCachedInstance = createService(ctx.getApplicationContext());
}
return mCachedInstance;
}