// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.chrome.browser.invalidation; import android.content.Context; import org.chromium.base.ThreadUtils; import org.chromium.base.VisibleForTesting; import org.chromium.base.annotations.JNINamespace; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.components.invalidation.InvalidationService; import java.util.HashMap; import java.util.Map; /** * InvalidationServiceFactory maps Profiles to instances of * {@link InvalidationService} instances. Each {@link Profile} will at most * have one instance of this service. If the service does not already exist, * it will be created on the first access. */ @JNINamespace("invalidation") public final class InvalidationServiceFactory { private static final Map<Profile, InvalidationService> sServiceMap = new HashMap<Profile, InvalidationService>(); private InvalidationServiceFactory() {} /** * Returns Java InvalidationService for the given Profile. */ public static InvalidationService getForProfile(Profile profile) { ThreadUtils.assertOnUiThread(); InvalidationService service = sServiceMap.get(profile); if (service == null) { service = nativeGetForProfile(profile); sServiceMap.put(profile, service); } return service; } @VisibleForTesting public static InvalidationService getForTest(Context context) { return nativeGetForTest(context); } private static native InvalidationService nativeGetForProfile(Profile profile); private static native InvalidationService nativeGetForTest(Context context); }