// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_APP_SPOTLIGHT_SEARCHABLE_ITEM_FACTORY_H_
#define IOS_CHROME_APP_SPOTLIGHT_SEARCHABLE_ITEM_FACTORY_H_
#import <CoreSpotlight/CoreSpotlight.h>
#import <Foundation/Foundation.h>
#import "ios/chrome/app/spotlight/spotlight_util.h"
namespace favicon {
class LargeIconService;
}
class GURL;
@class CSSearchableItem;
/// A factory class for creating searchable item.
/// It is designed to be called on the main thread, and will dispatch all the
/// callbacks on the main thread. It takes care of fetching a favicon icon and
/// creating a searchable item.
@interface SearchableItemFactory : NSObject
- (instancetype)initWithLargeIconService:
(favicon::LargeIconService*)largeIconService
domain:(spotlight::Domain)domain
useTitleInIdentifiers:(BOOL)useTitleInIdentifiers;
// When set to NO, items with same URL but different titles will use the same ID
// in the spotlight index.
@property(nonatomic, assign) BOOL useTitleInIdentifiers;
// Fetch a favicon for a given URL and creates a searchable item that points to
// URLToRefresh and have a given title. The URL should be valid and the
// title should not be empty.
- (void)generateSearchableItem:(const GURL&)URLToRefresh
title:(NSString*)title
additionalKeywords:(NSArray<NSString*>*)keywords
completionHandler:(void (^)(CSSearchableItem*))completionHandler;
/// Returns a simple searchable item displaying a title, given a 'title'
/// 'itemID' and some 'additionalKeywords'
- (CSSearchableItem*)searchableItem:(NSString*)title
itemID:(NSString*)itemID
additionalKeywords:(NSArray<NSString*>*)keywords;
// Returns the spotlight ID for an item indexing `URL` and `title`.
- (NSString*)spotlightIDForURL:(const GURL&)URL title:(NSString*)title;
// Returns the spotlight ID for an item indexing URL.
- (NSString*)spotlightIDForURL:(const GURL&)URL;
// Cancel all item generations if there are any.
- (void)cancelItemsGeneration;
@end
#endif // IOS_CHROME_APP_SPOTLIGHT_SEARCHABLE_ITEM_FACTORY_H_