| // Copyright 2018 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. |
| |
| #ifndef COMPONENTS_IMAGE_FETCHER_CORE_IMAGE_FETCHER_SERVICE_H_ |
| #define COMPONENTS_IMAGE_FETCHER_CORE_IMAGE_FETCHER_SERVICE_H_ |
| |
| #include <memory> |
| |
| #include "base/callback.h" |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| #include "components/keyed_service/core/keyed_service.h" |
| |
| namespace network { |
| class SharedURLLoaderFactory; |
| } // namespace network |
| |
| namespace image_fetcher { |
| |
| class ImageFetcher; |
| class ImageCache; |
| class ImageDecoder; |
| |
| // Enumerate the possible image fetcher combinations to allow the service to |
| // configure the correct one. New values should be added at the end and things |
| // should not be renumbered. |
| // GENERATED_JAVA_ENUM_PACKAGE: ( |
| // org.chromium.chrome.browser.image_fetcher) |
| enum class ImageFetcherConfig { |
| kNetworkOnly = 0, |
| kDiskCacheOnly = 1, |
| // In memory cache without disk caching. Currently only available in Java. |
| kInMemoryOnly = 2, |
| // In memory cache with disk caching. Currently only available in Java. |
| kInMemoryWithDiskCache = 3, |
| kMaxValue = kInMemoryWithDiskCache |
| }; |
| |
| // Keyed service responsible for managing the lifetime of various ImageFetcher |
| // services. Allows access to instances of the disk cache, network fetcher and |
| // cached image fetcher. |
| class ImageFetcherService : public KeyedService { |
| public: |
| explicit ImageFetcherService( |
| std::unique_ptr<ImageDecoder> image_decoder, |
| scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, |
| scoped_refptr<ImageCache> image_cache, |
| bool read_only); |
| ~ImageFetcherService() override; |
| |
| // Get an image fetcher according to the given config. |
| ImageFetcher* GetImageFetcher(ImageFetcherConfig config); |
| |
| scoped_refptr<ImageCache> ImageCacheForTesting() const; |
| |
| private: |
| // TODO(wylieb): Make this a unique_ptr. |
| scoped_refptr<ImageCache> image_cache_; |
| |
| // This fetcher goes directly to the network. |
| std::unique_ptr<ImageFetcher> image_fetcher_; |
| // This fetcher goes through a disk cache before going to the network. |
| std::unique_ptr<ImageFetcher> cached_image_fetcher_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ImageFetcherService); |
| }; |
| |
| } // namespace image_fetcher |
| |
| #endif // COMPONENTS_IMAGE_FETCHER_CORE_IMAGE_FETCHER_SERVICE_H_ |