Index: ios/chrome/browser/ui/contextual_search/contextual_search_controller.h |
diff --git a/ios/chrome/browser/ui/contextual_search/contextual_search_controller.h b/ios/chrome/browser/ui/contextual_search/contextual_search_controller.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5b30b3cee0ffc5b596c93263b14b2a7836f76b1c |
--- /dev/null |
+++ b/ios/chrome/browser/ui/contextual_search/contextual_search_controller.h |
@@ -0,0 +1,125 @@ |
+// Copyright 2015 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_CONTEXTUAL_SEARCH_CONTROLLER_H_ |
+#define IOS_CHROME_BROWSER_UI_CONTEXTUAL_SEARCH_CONTEXTUAL_SEARCH_CONTROLLER_H_ |
+ |
+#import <UIKit/UIKit.h> |
+ |
+#include "base/ios/block_types.h" |
+#include "base/strings/string16.h" |
+#include "ios/chrome/browser/ui/contextual_search/panel_configuration.h" |
+ |
+namespace ios { |
+class ChromeBrowserState; |
+} |
+ |
+namespace web { |
+class WebState; |
+} |
+ |
+class GURL; |
+@class Tab; |
+@class TouchToSearchPermissionsMediator; |
+ |
+namespace ContextualSearch { |
+// Possible reason for panel state changes. |
+enum StateChangeReason { |
+ UNKNOWN, |
+ RESET, |
+ BACK_PRESS, // This is Android-only; we should never use this value. |
+ TEXT_SELECT_TAP, |
+ TEXT_SELECT_LONG_PRESS, |
+ INVALID_SELECTION, |
+ BASE_PAGE_TAP, |
+ BASE_PAGE_SCROLL, |
+ SEARCH_BAR_TAP, |
+ SERP_NAVIGATION, |
+ TAB_PROMOTION, |
+ CLICK, |
+ SWIPE, // Moved by going to the nearest state when a drag ends. |
+ FLING, // Moved by interpolating a drag with velocity. |
+ OPTIN, |
+ OPTOUT |
+}; |
+} // namespace ContextualSearch |
+ |
+@class ContextualSearchController; |
+@class ContextualSearchPanelView; |
+@class ContextualSearchResultsView; |
+ |
+@protocol ContextualSearchTabProvider<NSObject> |
+// Disassociate the internal Tab object from this view and return it. |
+- (Tab*)releaseTab; |
+@end |
+ |
+@protocol ContextualSearchControllerDelegate<NSObject> |
+ |
+// Called by the controller when it has tab content for the delegate to load |
+// and display as a new tab; the content is provided by -releaseSearchTab. |
+// |focusInput| indicates that the after promoting the tab, the delegate must |
+// focus the main input. |
+- (void)promotePanelToTabProvidedBy:(id<ContextualSearchTabProvider>)tabProvider |
+ focusInput:(BOOL)focusInput; |
+ |
+// Called by the controller when it has a link for the delegate to load |
+// and display as a new tab. |
+- (void)createTabFromContextualSearchController:(const GURL&)url; |
+ |
+// Provides the current height of the headers at the top of the screen. |
+- (CGFloat)currentHeaderHeight; |
+ |
+@end |
+ |
+// Controller for handling contextual search gestures. |
+@interface ContextualSearchController : NSObject |
+ |
+// YES if contextual search is enabled on the current WebState. |
+@property(readonly) BOOL enabled; |
+ |
+// The current web state being watched for contextual search events. |
+// Only tests should set this directly; for general use, use -setTab:, which |
+// will set this property with the tab's webState. |
+@property(nonatomic, assign) web::WebState* webState; |
+ |
+// The panel view that this controller should populate with subviews and use. |
+// Owned by its superview. Setting this will have the controller create subviews |
+// for the panel; code that sets this property is responsible for disposing of |
+// the old panel and its views. |
+// This property can only be assigned a non-nil value, and can only be assigned |
+// a value when its current value is nil. |
+@property(nonatomic, assign) ContextualSearchPanelView* panel; |
+ |
+// Designated initializer. |
+- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState |
+ delegate:(id<ContextualSearchControllerDelegate>) |
+ delegate; |
+ |
+// Set the Tab to be used as the opener for the search results tab. |opener|'s |
+// lifetime should be greater than the reciever's. |opener| can be nil. |
+- (void)setTab:(Tab*)tab; |
+ |
+// Enable or disable contextual search for the current WebState. If |
+// |enabled| is YES, contextual search may still not be enabled for a number of |
+// reasons; the -enabled property will indicate the current status. |
+// This method functions asynchronously. |
+- (void)enableContextualSearch:(BOOL)enabled; |
+ |
+// Reset the pane to be offscreen when tabs change. |
+- (void)movePanelOffscreen; |
+ |
+// Destroy the receiver. |
+// Any following call is not supported. |
+- (void)close; |
+ |
+@end |
+ |
+// Testing category that allows a permissions class to be injected. |
+@interface ContextualSearchController (Testing) |
+ |
+- (void)setPermissions:(TouchToSearchPermissionsMediator*)permissions; |
+ |
+@end |
+ |
+#endif // IOS_CHROME_BROWSER_UI_CONTEXTUAL_SEARCH_CONTEXTUAL_SEARCH_CONTROLLER_H_ |