blob: f4d8ea09b6ad28f900fc5d236cb489717d4c3b59 [file] [log] [blame]
// Copyright 2019 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_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 mode specified by
// |tabOpeningTargetMode|. |completion| is executed after all the tabs are
// opened.
- (void)openMultipleTabsInMode:
(ApplicationModeForTabOpening)tabOpeningTargetMode
URLs:(const std::vector<GURL>&)URLs
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|. This is intended to be called before setWebUsageSuspended:NO in
// cases where a new tab is about to appear in order to allow the BVC to avoid
// doing unnecessary work related to showing the previously selected tab.
- (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_