| // Copyright 2020 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_BROWSER_WEB_MODEL_WEB_NAVIGATION_BROWSER_AGENT_H_ |
| #define IOS_CHROME_BROWSER_WEB_MODEL_WEB_NAVIGATION_BROWSER_AGENT_H_ |
| |
| #import "base/memory/raw_ptr.h" |
| #import "ios/chrome/browser/shared/model/browser/browser_user_data.h" |
| #import "ios/web/common/user_agent.h" |
| |
| class Browser; |
| @protocol WebNavigationNTPDelegate; |
| class WebStateList; |
| |
| namespace web { |
| class WebState; |
| } |
| |
| // A browser agent that encapsulates logic for common web navigation tasks on |
| // the current active web state in the associated browser. |
| class WebNavigationBrowserAgent |
| : public BrowserUserData<WebNavigationBrowserAgent> { |
| public: |
| // Not copyable or moveable. |
| WebNavigationBrowserAgent(const WebNavigationBrowserAgent&) = delete; |
| WebNavigationBrowserAgent& operator=(const WebNavigationBrowserAgent&) = |
| delete; |
| ~WebNavigationBrowserAgent() override; |
| |
| // Sets an optional delegate if NTP navigation needs to be handled. If this |
| // is not set, no special considerations for the NTP are made. |
| void SetDelegate(id<WebNavigationNTPDelegate> delegate); |
| |
| // All of the following methods will silently no-op (or return false) if there |
| // is no active web state in the associated browser's WebStateList. |
| |
| // True if the given `web_state` can navigate back. |
| bool CanGoBack(const web::WebState* web_state); |
| // True if it is possible to navigate back. |
| bool CanGoBack(); |
| // Navigates back. |
| void GoBack(); |
| // True if the given `web_state` can navigate forward. |
| bool CanGoForward(const web::WebState* web_state); |
| // True if it is possible to navigate forward. |
| bool CanGoForward(); |
| // Navigates forward. |
| void GoForward(); |
| // Stops the active web state's loading. |
| void StopLoading(); |
| // Reloads the active web state. |
| void Reload(); |
| // Requests the "desktop" version of the current page in the active tab |
| void RequestDesktopSite(); |
| // Requests the "mobile" version of the current page in the active tab. |
| void RequestMobileSite(); |
| |
| private: |
| friend class BrowserUserData<WebNavigationBrowserAgent>; |
| |
| explicit WebNavigationBrowserAgent(Browser* browser); |
| |
| // Reloads the original url of the last non-redirect item (including |
| // non-history items) with `userAgentType`. |
| void ReloadWithUserAgentType(web::UserAgentType userAgentType); |
| // Return the UserAgentType for a given `web_state`. |
| web::UserAgentType UserAgentType(web::WebState* web_state); |
| |
| // The web state list for the associated browser. This should never be |
| // null. |
| raw_ptr<WebStateList> web_state_list_; |
| // The delegate, if assigned. This may be nil. |
| id<WebNavigationNTPDelegate> delegate_; |
| }; |
| |
| #endif // IOS_CHROME_BROWSER_WEB_MODEL_WEB_NAVIGATION_BROWSER_AGENT_H_ |