| // Copyright 2019 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_URL_LOADING_SCENE_URL_LOADING_SERVICE_H_ |
| #define IOS_CHROME_BROWSER_URL_LOADING_SCENE_URL_LOADING_SERVICE_H_ |
| |
| #import <Foundation/Foundation.h> |
| #import <UIKit/UIKit.h> |
| |
| #include "base/ios/block_types.h" |
| #import "ios/chrome/app/application_delegate/tab_opening.h" |
| #include "ios/chrome/app/application_mode.h" |
| #include "ui/base/page_transition_types.h" |
| |
| class Browser; |
| struct UrlLoadParams; |
| |
| // Objective-C delegate for SceneUrlLoadingService. |
| @protocol SceneURLLoadingServiceDelegate |
| |
| // Sets the current interface to `ApplicationMode::INCOGNITO` or |
| // `ApplicationMode::NORMAL`. |
| - (void)setCurrentInterfaceForMode:(ApplicationMode)mode; |
| |
| // Dismisses all modal dialogs, excluding the omnibox if `dismissOmnibox` is |
| // NO, then call `completion`. |
| - (void)dismissModalDialogsWithCompletion:(ProceduralBlock)completion |
| dismissOmnibox:(BOOL)dismissOmnibox; |
| |
| // Opens a tab in the target BVC, and switches to it in a way that's appropriate |
| // to the current UI. |
| // If the current tab in `targetMode` is a NTP, it can be reused to open URL. |
| // `completion` is executed after the tab is opened. After Tab is open the |
| // virtual URL is set to the pending navigation item. |
| - (void)openSelectedTabInMode:(ApplicationModeForTabOpening)targetMode |
| withUrlLoadParams:(const UrlLoadParams&)urlLoadParams |
| completion:(ProceduralBlock)completion; |
| |
| // Open the list of URLs contained in `URLs` in Incognito mode if |
| // `inIncognitoMode` is YES. `completion` is executed after all the tabs are |
| // opened. |
| - (void)openMultipleTabsWithURLs:(const std::vector<GURL>&)URLs |
| inIncognitoMode:(BOOL)incognitoMode |
| completion:(ProceduralBlock)completion; |
| |
| // Opens a new tab as if originating from `originPoint` and `focusOmnibox`. |
| - (void)openNewTabFromOriginPoint:(CGPoint)originPoint |
| focusOmnibox:(BOOL)focusOmnibox |
| inheritOpener:(BOOL)inheritOpener; |
| |
| // Informs the BVC that a new foreground tab is about to be opened in given |
| // `targetMode`. |
| - (void)expectNewForegroundTabForMode:(ApplicationMode)targetMode; |
| |
| // TODO(crbug.com/907527): refactor to remove this and most methods above. |
| @property(nonatomic, readonly) Browser* currentBrowserForURLLoading; |
| |
| @end |
| |
| // Service used to manage url loading at application level. |
| class SceneUrlLoadingService { |
| public: |
| SceneUrlLoadingService(); |
| virtual ~SceneUrlLoadingService() = default; |
| |
| void SetDelegate(id<SceneURLLoadingServiceDelegate> delegate); |
| |
| // Opens a url based on `params` in a new tab. |
| virtual void LoadUrlInNewTab(const UrlLoadParams& params); |
| |
| // Returns the current active browser in the scene owning this object. |
| virtual Browser* GetCurrentBrowser(); |
| |
| private: |
| __weak id<SceneURLLoadingServiceDelegate> delegate_; |
| }; |
| |
| #endif // IOS_CHROME_BROWSER_URL_LOADING_SCENE_URL_LOADING_SERVICE_H_ |