blob: 14b76ab306c4b9837b158a178a23f08fb7ae1bf5 [file] [log] [blame]
// Copyright 2019 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.image_fetcher;
import org.chromium.base.DiscardableReferencePool;
/**
* Factory to provide the image fetcher best suited for the given config.
*/
public class ImageFetcherFactory {
// Store static references to singleton image fetchers.
private static CachedImageFetcher sCachedImageFetcher;
private static NetworkImageFetcher sNetworkImageFetcher;
/**
* Alias for createImageFetcher below.
*/
public static ImageFetcher createImageFetcher(@ImageFetcherConfig int config) {
return createImageFetcher(config, ImageFetcherBridge.getInstance(), null,
InMemoryCachedImageFetcher.DEFAULT_CACHE_SIZE);
}
/**
* Alias for createImageFetcher below.
*/
public static ImageFetcher createImageFetcher(
@ImageFetcherConfig int config, DiscardableReferencePool discardableReferencePool) {
return createImageFetcher(config, ImageFetcherBridge.getInstance(),
discardableReferencePool, InMemoryCachedImageFetcher.DEFAULT_CACHE_SIZE);
}
/**
* Alias for createImageFetcher below.
*/
public static ImageFetcher createImageFetcher(@ImageFetcherConfig int config,
DiscardableReferencePool discardableReferencePool, int inMemoryCacheSize) {
return createImageFetcher(config, ImageFetcherBridge.getInstance(),
discardableReferencePool, inMemoryCacheSize);
}
/**
* Return the image fetcher that matches the given config. This will return an image fetcher
* config that you must destroy.
*
* @param config The type of ImageFetcher you need.
* @param imageFetcherBridge Bridge to use.
* @param discardableReferencePool Used to store images in-memory.
* @param inMemoryCacheSize The size of the in memory cache (in bytes).
* @return The correct ImageFetcher according to the provided config.
*/
public static ImageFetcher createImageFetcher(@ImageFetcherConfig int config,
ImageFetcherBridge imageFetcherBridge,
DiscardableReferencePool discardableReferencePool, int inMemoryCacheSize) {
// TODO(crbug.com/947191):Allow server-side configuration image fetcher clients.
switch (config) {
case ImageFetcherConfig.NETWORK_ONLY:
if (sNetworkImageFetcher == null) {
sNetworkImageFetcher = new NetworkImageFetcher(imageFetcherBridge);
}
return sNetworkImageFetcher;
case ImageFetcherConfig.DISK_CACHE_ONLY:
if (sCachedImageFetcher == null) {
sCachedImageFetcher = new CachedImageFetcher(imageFetcherBridge);
}
return sCachedImageFetcher;
case ImageFetcherConfig.IN_MEMORY_ONLY:
assert discardableReferencePool != null;
return new InMemoryCachedImageFetcher(
createImageFetcher(ImageFetcherConfig.NETWORK_ONLY, imageFetcherBridge,
discardableReferencePool, inMemoryCacheSize),
discardableReferencePool, inMemoryCacheSize);
case ImageFetcherConfig.IN_MEMORY_WITH_DISK_CACHE:
assert discardableReferencePool != null;
return new InMemoryCachedImageFetcher(
createImageFetcher(ImageFetcherConfig.DISK_CACHE_ONLY, imageFetcherBridge,
discardableReferencePool, inMemoryCacheSize),
discardableReferencePool, inMemoryCacheSize);
default:
return null;
}
}
}