blob: af85360f4898f37131a082b570c903a9287b1877 [file] [log] [blame]
// 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_CONTEXTUAL_SEARCH_TOUCH_TO_SEARCH_PERMISSIONS_MEDIATOR_H_
#define IOS_CHROME_BROWSER_UI_CONTEXTUAL_SEARCH_TOUCH_TO_SEARCH_PERMISSIONS_MEDIATOR_H_
#import <Foundation/Foundation.h>
#import "url/gurl.h"
namespace ios {
class ChromeBrowserState;
}
namespace TouchToSearch {
// Enum describing the possible state that a user's Touch-to-Search preference
// is in:
typedef NS_ENUM(NSInteger, TouchToSearchPreferenceState) {
UNDECIDED = -1, // User has not set a preference.
DISABLED, // User has disabled TTS.
ENABLED // User has "opted in" and enabled TTS.
};
} // namespace TouchToSearch
@protocol TouchToSearchPermissionsChangeAudience<NSObject>
@optional
// Called synchronously when preferences are changed
- (void)touchToSearchDidChangePreferenceState:
(TouchToSearch::TouchToSearchPreferenceState)preferenceState;
// Called (asynchronously) after some state has changed that might have affected
// touch-to-search permissions.
- (void)touchToSearchPermissionsUpdated;
@end
// An object for managing and vending permissions associated with the
// Touch-to-Search feature.
@interface TouchToSearchPermissionsMediator : NSObject
// YES if the device supports Touch-to-Search (based on command line flags). The
// return value will be the same over the lifetime of a Chrome process.
+ (BOOL)isTouchToSearchAvailableOnDevice;
// Designated initializer.
- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
NS_DESIGNATED_INITIALIZER;
- (instancetype)init NS_UNAVAILABLE;
// Current preference state. Assigning to this property will update the internal
// representation backing this state.
@property(nonatomic, assign)
TouchToSearch::TouchToSearchPreferenceState preferenceState;
// Current audience object.
@property(nonatomic, weak)
NSObject<TouchToSearchPermissionsChangeAudience>* audience;
// YES if, given the current permissions state, touch-to-search can be enabled.
- (BOOL)canEnable;
// YES if, given the current permissions state, surrounding text in |URL| may be
// extracted.
- (BOOL)canExtractTapContextForURL:(const GURL&)url;
// YES if it is permitted to send page URLs to the contextual search service.
- (BOOL)canSendPageURLs;
// YES if search results pages can be preloaded.
- (BOOL)canPreloadSearchResults;
@end
#endif // IOS_CHROME_BROWSER_UI_CONTEXTUAL_SEARCH_TOUCH_TO_SEARCH_PERMISSIONS_MEDIATOR_H_