// 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.dom_distiller;

import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.components.dom_distiller.core.DomDistillerService;

import java.util.HashMap;

/**
 * DomDistillerServiceFactory maps Profiles to instances of
 * {@link DomDistillerService} 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("dom_distiller::android")
public class DomDistillerServiceFactory {

    private static final HashMap<Profile, DomDistillerService> sServiceMap =
            new HashMap<Profile, DomDistillerService>();

    /**
     * Returns Java DomDistillerService for given Profile.
     */
    public static DomDistillerService getForProfile(Profile profile) {
        ThreadUtils.assertOnUiThread();
        DomDistillerService service = sServiceMap.get(profile);
        if (service == null) {
            service = nativeGetForProfile(profile);
            sServiceMap.put(profile, service);
        }
        return service;
    }

    private static native DomDistillerService nativeGetForProfile(Profile profile);
}