| Index: ios/chrome/browser/ui/ntp/new_tab_page_controller.h
|
| diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_controller.h b/ios/chrome/browser/ui/ntp/new_tab_page_controller.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fc021d85dab2e044afb7c6ef9be67d3b4f1021bf
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/ntp/new_tab_page_controller.h
|
| @@ -0,0 +1,114 @@
|
| +// 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_NTP_NEW_TAB_PAGE_CONTROLLER_H_
|
| +#define IOS_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_CONTROLLER_H_
|
| +
|
| +#import <UIKit/UIKit.h>
|
| +#include <string>
|
| +
|
| +#include "base/mac/scoped_nsobject.h"
|
| +#import "ios/chrome/browser/ui/native_content_controller.h"
|
| +#import "ios/chrome/browser/ui/ntp/new_tab_page_bar.h"
|
| +#import "ios/chrome/browser/ui/ntp/new_tab_page_panel_protocol.h"
|
| +#import "ios/chrome/browser/ui/toolbar/toolbar_owner.h"
|
| +#import "ios/public/provider/chrome/browser/voice/logo_animation_controller.h"
|
| +
|
| +namespace ios {
|
| +class ChromeBrowserState;
|
| +}
|
| +
|
| +namespace NewTabPage {
|
| +
|
| +enum PanelIdentifier {
|
| + kNone,
|
| + kMostVisitedPanel,
|
| + kBookmarksPanel,
|
| + kOpenTabsPanel,
|
| + kIncognitoPanel,
|
| +};
|
| +
|
| +// Converts from a NewTabPage::PanelIdentifier to a URL #fragment
|
| +// and vice versa.
|
| +PanelIdentifier IdentifierFromFragment(const std::string& fragment);
|
| +std::string FragmentFromIdentifier(PanelIdentifier panel);
|
| +
|
| +} // namespace NewTabPage
|
| +
|
| +@protocol CRWSwipeRecognizerProvider;
|
| +@class GoogleLandingController;
|
| +@protocol NewTabPagePanelProtocol;
|
| +@protocol OmniboxFocuser;
|
| +@class TabModel;
|
| +@protocol WebToolbarDelegate;
|
| +@protocol UrlLoader;
|
| +
|
| +// This protocol provides callbacks for when the NewTabPageController changes
|
| +// panels.
|
| +@protocol NewTabPageControllerObserver
|
| +// The current visible panel has changed.
|
| +- (void)selectedPanelDidChange;
|
| +@end
|
| +
|
| +// A controller for the New Tab Page user interface. Supports multiple "panels",
|
| +// each with its own controller. The panels are created lazily.
|
| +//
|
| +// The scoped_nsobjects instance variables |*Controller_| are instances of
|
| +// subclasses of NewTabPagePanelProtocol that are created lazily.
|
| +// Each Panel is its own controller with the accessible views are added to the
|
| +// |newTabPageView_|.
|
| +//
|
| +// newTabPageView_ (aka |ntpView|) is a horizontally scrollable view that
|
| +// contains the *PanelController instances available to the user at the moment.
|
| +// A tab-page bar inside |ntpView| provides direct access to the
|
| +// *PanelControllers on the scrollable view.
|
| +//
|
| +// The currently visible *PanelController is accessible through
|
| +// |currentController_|.
|
| +//
|
| +@interface NewTabPageController
|
| + : NativeContentController<LogoAnimationControllerOwnerOwner,
|
| + NewTabPageBarDelegate,
|
| + NewTabPagePanelControllerDelegate,
|
| + ToolbarOwner,
|
| + UIGestureRecognizerDelegate,
|
| + UIScrollViewDelegate> {
|
| + @private
|
| + base::scoped_nsprotocol<id<NewTabPagePanelProtocol>> bookmarkController_;
|
| + base::scoped_nsobject<GoogleLandingController> googleLandingController_;
|
| + base::scoped_nsprotocol<id<NewTabPagePanelProtocol>> incognitoController_;
|
| + // The currently visible controller, one of the above.
|
| + id<NewTabPagePanelProtocol> currentController_; // weak
|
| +}
|
| +
|
| +@property(nonatomic, assign) id<CRWSwipeRecognizerProvider>
|
| + swipeRecognizerProvider;
|
| +
|
| +// Init with the given url (presumably "chrome://newtab") and loader object.
|
| +// |loader| may be nil, but isn't retained so it must outlive this controller.
|
| +// Dominant color cache is passed to bookmark controller only, to optimize
|
| +// favicon processing.
|
| +- (id)initWithUrl:(const GURL&)url
|
| + loader:(id<UrlLoader>)loader
|
| + focuser:(id<OmniboxFocuser>)focuser
|
| + ntpObserver:(id<NewTabPageControllerObserver>)ntpObserver
|
| + browserState:(ios::ChromeBrowserState*)browserState
|
| + colorCache:(NSMutableDictionary*)colorCache
|
| + webToolbarDelegate:(id<WebToolbarDelegate>)webToolbarDelegate
|
| + tabModel:(TabModel*)tabModel;
|
| +
|
| +// Select a panel based on the given |panelType|.
|
| +- (void)selectPanel:(NewTabPage::PanelIdentifier)panelType;
|
| +
|
| +// Returns |YES| if the current visible controller should show the keyboard
|
| +// shield.
|
| +- (BOOL)wantsKeyboardShield;
|
| +
|
| +// Returns |YES| if the current visible controller allows showing the location
|
| +// bar hint text.
|
| +- (BOOL)wantsLocationBarHintText;
|
| +
|
| +@end
|
| +
|
| +#endif // IOS_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_CONTROLLER_H_
|
|
|