text: // Copyright 2016 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 IOS_CHROME_BROWSER_UI_FAVICON_FAVICON_ATTRIBUTES_PROVIDER_H_
  #define IOS_CHROME_BROWSER_UI_FAVICON_FAVICON_ATTRIBUTES_PROVIDER_H_
  
  #import <UIKit/UIKit.h>
  #import "ios/chrome/browser/ui/favicon/favicon_attributes.h"
  
  namespace favicon {
  class LargeIconService;
  }  // namespace favicon
  
  @class FaviconViewProvider;
  class LargeIconCache;
  class GURL;
  
  // Object to fetch favicon attributes by URL - an image or a fallback icon if
  // there is no favicon image available with large enough resolution.
  @interface FaviconAttributesProvider : NSObject
  // Favicon attributes associated with |URL| will be fetched using
  // |largeIconService|. The favicon will be rendered with height and width equal
  // to |faviconSize|, and the image will be fetched if the source size is greater
  // than or equal to |minFaviconSize|.
  - (instancetype)initWithFaviconSize:(CGFloat)faviconSize
                       minFaviconSize:(CGFloat)minFaviconSize
                     largeIconService:(favicon::LargeIconService*)largeIconService
      NS_DESIGNATED_INITIALIZER;
  - (instancetype)init NS_UNAVAILABLE;
  
  // Fetches favicon attributes and calls the completion block.
  - (void)fetchFaviconAttributesForURL:(const GURL&)URL
                            completion:(void (^)(FaviconAttributes*))completion;
  
  // LargeIconService used to fetch favicons.
  @property(nonatomic, readonly) favicon::LargeIconService* largeIconService;
  // Minimal acceptable favicon size. Below that, will fall back to a monogram.
  @property(nonatomic, readonly) CGFloat minSize;
  // Expected favicon size (in points). Will downscale favicon to this.
  @property(nonatomic, readonly) CGFloat faviconSize;
  // Cache for the favicon. Using a cache makes the |completion| block to be
  // called synchronously and potentially multiple times. If this is null, no
  // cache is used.
  @property(nonatomic, assign) LargeIconCache* cache;
  
  @end
  
  #endif  // IOS_CHROME_BROWSER_UI_FAVICON_FAVICON_ATTRIBUTES_PROVIDER_H_
  