blob: 060a54e12640bead7ca5a3b4131a9d36d816be5e [file] [log] [blame]
// Copyright 2012 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_TOOLBAR_WEB_TOOLBAR_CONTROLLER_H_
#define IOS_CHROME_BROWSER_UI_TOOLBAR_WEB_TOOLBAR_CONTROLLER_H_
#import <UIKit/UIKit.h>
#include "ios/chrome/browser/ui/omnibox/omnibox_popup_positioner.h"
#include "ios/chrome/browser/ui/qr_scanner/qr_scanner_view_controller.h"
#import "ios/chrome/browser/ui/toolbar/toolbar_controller.h"
#include "ios/public/provider/chrome/browser/voice/voice_search_controller_delegate.h"
#include "ios/web/public/navigation_item_list.h"
@protocol PreloadProvider;
@class Tab;
@protocol ToolbarFrameDelegate;
class ToolbarModelIOS;
@protocol UrlLoader;
namespace ios {
class ChromeBrowserState;
}
namespace web {
class WebState;
}
// Notification when the tab history popup is shown.
extern NSString* const kTabHistoryPopupWillShowNotification;
// Notification when the tab history popup is hidden.
extern NSString* const kTabHistoryPopupWillHideNotification;
// The brightness of the omnibox placeholder text in regular mode,
// on an iPhone.
extern const CGFloat kiPhoneOmniboxPlaceholderColorBrightness;
// Delegate interface, to be implemented by the controller's delegate.
@protocol WebToolbarDelegate<NSObject>
@required
// Called when the location bar gains keyboard focus.
- (IBAction)locationBarDidBecomeFirstResponder:(id)sender;
// Called when the location bar loses keyboard focus.
- (IBAction)locationBarDidResignFirstResponder:(id)sender;
// Called when the location bar receives a key press.
- (IBAction)locationBarBeganEdit:(id)sender;
// Called when the stack view controller is about to be shown.
- (IBAction)prepareToEnterTabSwitcher:(id)sender;
// Loads the text entered in the location bar as javascript.
// Note: The JavaScript is executed asynchronously.
- (void)loadJavaScriptFromLocationBar:(NSString*)script;
// Returns the WebState.
- (web::WebState*)currentWebState;
// Called when the toolbar height changes. Other elements, such as the web view,
// may need to adjust accordingly. This is called from within an animation
// block.
- (void)toolbarHeightChanged;
- (ToolbarModelIOS*)toolbarModelIOS;
// Sets the alpha for the toolbar's background views.
- (void)updateToolbarBackgroundAlpha:(CGFloat)backgroundAlpha;
// Sets the alpha for the toolbar's background views.
- (void)updateToolbarControlsAlpha:(CGFloat)controlsAlpha;
@optional
// Called before the toolbar screenshot gets updated.
- (void)willUpdateToolbarSnapshot;
@end
// This protocol provides callbacks for focusing and blurring the omnibox.
@protocol OmniboxFocuser
// Give focus to the omnibox, if it is visible. No-op if it is not visible.
- (void)focusOmnibox;
// Cancel omnibox edit (from shield tap or cancel button tap).
- (void)cancelOmniboxEdit;
// Give focus to the omnibox, but indicate that the focus event was initiated
// from the fakebox on the Google landing page.
- (void)focusFakebox;
// Hides the toolbar when the fakebox is blurred.
- (void)onFakeboxBlur;
// Shows the toolbar when the fakebox has animated to full bleed.
- (void)onFakeboxAnimationComplete;
@end
// Web-view specific toolbar, adding navigation controls like back/forward,
// omnibox, etc.
@interface WebToolbarController
: ToolbarController<OmniboxFocuser,
QRScannerViewControllerDelegate,
VoiceSearchControllerDelegate>
@property(nonatomic, weak) id<WebToolbarDelegate> delegate;
@property(nonatomic, weak, readonly) id<UrlLoader> urlLoader;
// Mark inherited initializer as unavailable.
- (instancetype)initWithStyle:(ToolbarControllerStyle)style NS_UNAVAILABLE;
// Create a new web toolbar controller whose omnibox is backed by
// |browserState|.
- (instancetype)initWithDelegate:(id<WebToolbarDelegate>)delegate
urlLoader:(id<UrlLoader>)urlLoader
browserState:(ios::ChromeBrowserState*)browserState
preloadProvider:(id<PreloadProvider>)preloader
NS_DESIGNATED_INITIALIZER;
// Called when the browser state this object was initialized with is being
// destroyed.
- (void)browserStateDestroyed;
// Update the visibility of the back/forward buttons, omnibox, etc.
- (void)updateToolbarState;
// Update the visibility of the toolbar before making a side swipe snapshot so
// the toolbar looks appropriate for |tab|. This includes morphing the toolbar
// to look like the new tab page header.
- (void)updateToolbarForSideSwipeSnapshot:(Tab*)tab;
// Remove any formatting added by -updateToolbarForSideSwipeSnapshot.
- (void)resetToolbarAfterSideSwipeSnapshot;
// Briefly animate the progress bar when a pre-rendered tab is displayed.
- (void)showPrerenderingAnimation;
// Hides or shows the toolbar controls. When controls are hidden, the toolbar
// will be drawn as an empty bar with the usual background.
- (void)setControlsHidden:(BOOL)hidden;
// Set the alpha of the toolbar controls, for fading while tracking gestures.
- (void)setControlsAlpha:(CGFloat)alpha;
// Called when the current page starts loading.
- (void)currentPageLoadStarted;
// Called when the current tab changes or is closed.
- (void)selectedTabChanged;
// Returns the bound of the bookmark button. Used to position the bookmark
// editor.
- (CGRect)bookmarkButtonAnchorRect;
// Returns the bookmark button's view. Used to position the bookmark editor.
- (UIView*)bookmarkButtonView;
// Returns visible omnibox frame in WebToolbarController's view coordinate
// system.
- (CGRect)visibleOmniboxFrame;
// Returns a UIImage containing a snapshot of the view at the given width. If
// |width| is 0, it uses the view's current width. Returns the cached snapshot
// if it is up to date.
- (UIImage*)snapshotWithWidth:(CGFloat)width;
// Shows the tab history popup inside |view|.
- (void)showTabHistoryPopupInView:(UIView*)view
withItems:(const web::NavigationItemList&)items
forBackHistory:(BOOL)isBackHistory;
// Dismisses the tab history popup.
- (void)dismissTabHistoryPopup;
// Returns whether omnibox is a first responder.
- (BOOL)isOmniboxFirstResponder;
// Returns whether the omnibox popup is currently displayed.
- (BOOL)showingOmniboxPopup;
- (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection;
@end
#endif // IOS_CHROME_BROWSER_UI_TOOLBAR_WEB_TOOLBAR_CONTROLLER_H_