Commit 7356cb88 authored by Stepan Khapugin's avatar Stepan Khapugin Committed by Commit Bot

[iOS][multiball] Move TabOpening from MainController to SceneController.

Moves TabOpening protocol implementation and updates tests.

Bug: None
Change-Id: Iee5608fc34d288f3196dd77438825264add0f15c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1984307
Commit-Queue: Stepan Khapugin <stkhapugin@chromium.org>
Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#732376}
parent 4243798f
...@@ -59,6 +59,7 @@ source_set("unit_tests") { ...@@ -59,6 +59,7 @@ source_set("unit_tests") {
"//ios/chrome/browser", "//ios/chrome/browser",
"//ios/chrome/browser/browser_state:test_support", "//ios/chrome/browser/browser_state:test_support",
"//ios/chrome/browser/tabs", "//ios/chrome/browser/tabs",
"//ios/chrome/browser/ui/main:scene",
"//ios/chrome/common/app_group", "//ios/chrome/common/app_group",
"//ios/chrome/test:test_support", "//ios/chrome/test:test_support",
"//ios/public/provider/chrome/browser:browser", "//ios/public/provider/chrome/browser:browser",
......
...@@ -71,7 +71,6 @@ ...@@ -71,7 +71,6 @@
[_mainController setMetricsMediator:_metricsMediator]; [_mainController setMetricsMediator:_metricsMediator];
_browserLauncher = _mainController; _browserLauncher = _mainController;
_startupInformation = _mainController; _startupInformation = _mainController;
_tabOpener = _mainController;
_appState = [[AppState alloc] initWithBrowserLauncher:_browserLauncher _appState = [[AppState alloc] initWithBrowserLauncher:_browserLauncher
startupInformation:_startupInformation startupInformation:_startupInformation
applicationDelegate:self]; applicationDelegate:self];
...@@ -91,6 +90,7 @@ ...@@ -91,6 +90,7 @@
_sceneController.mainController = (id<MainControllerGuts>)_mainController; _sceneController.mainController = (id<MainControllerGuts>)_mainController;
_mainController.sceneController = _sceneController; _mainController.sceneController = _sceneController;
_tabSwitcherProtocol = _sceneController; _tabSwitcherProtocol = _sceneController;
_tabOpener = _sceneController;
} }
} }
return self; return self;
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#import "ios/chrome/app/application_delegate/app_navigation.h" #import "ios/chrome/app/application_delegate/app_navigation.h"
#import "ios/chrome/app/application_delegate/browser_launcher.h" #import "ios/chrome/app/application_delegate/browser_launcher.h"
#import "ios/chrome/app/application_delegate/startup_information.h" #import "ios/chrome/app/application_delegate/startup_information.h"
#import "ios/chrome/app/application_delegate/tab_opening.h"
#import "ios/chrome/app/main_controller_guts.h" #import "ios/chrome/app/main_controller_guts.h"
#import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/application_commands.h"
#import "ios/chrome/browser/ui/commands/browsing_data_commands.h" #import "ios/chrome/browser/ui/commands/browsing_data_commands.h"
...@@ -20,6 +19,7 @@ ...@@ -20,6 +19,7 @@
@protocol AppURLLoadingServiceDelegate; @protocol AppURLLoadingServiceDelegate;
@protocol BrowsingDataCommands; @protocol BrowsingDataCommands;
@protocol SceneControllerGuts; @protocol SceneControllerGuts;
@protocol TabOpening;
@protocol TabSwitcherDelegate; @protocol TabSwitcherDelegate;
// The main controller of the application, owned by the MainWindow nib. Also // The main controller of the application, owned by the MainWindow nib. Also
...@@ -32,7 +32,6 @@ ...@@ -32,7 +32,6 @@
BrowserLauncher, BrowserLauncher,
MainControllerGuts, MainControllerGuts,
StartupInformation, StartupInformation,
TabOpening,
BrowsingDataCommands> BrowsingDataCommands>
// The application window. // The application window.
...@@ -50,7 +49,8 @@ ...@@ -50,7 +49,8 @@
@property(nonatomic, weak) id<ApplicationCommands, @property(nonatomic, weak) id<ApplicationCommands,
TabSwitcherDelegate, TabSwitcherDelegate,
AppURLLoadingServiceDelegate, AppURLLoadingServiceDelegate,
SceneControllerGuts> SceneControllerGuts,
TabOpening>
sceneController; sceneController;
@end @end
......
...@@ -675,9 +675,9 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData( ...@@ -675,9 +675,9 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData(
[_browserViewWrangler updateDeviceSharingManager]; [_browserViewWrangler updateDeviceSharingManager];
[self openTabFromLaunchOptions:_launchOptions [self.sceneController openTabFromLaunchOptions:_launchOptions
startupInformation:self startupInformation:self
appState:self.appState]; appState:self.appState];
_launchOptions = nil; _launchOptions = nil;
if (!self.startupParameters) { if (!self.startupParameters) {
...@@ -718,13 +718,14 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData( ...@@ -718,13 +718,14 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData(
if (self.startupParameters) { if (self.startupParameters) {
UrlLoadParams params = UrlLoadParams params =
UrlLoadParams::InNewTab(self.startupParameters.externalURL); UrlLoadParams::InNewTab(self.startupParameters.externalURL);
[self dismissModalsAndOpenSelectedTabInMode:ApplicationModeForTabOpening:: [self.sceneController
NORMAL dismissModalsAndOpenSelectedTabInMode:ApplicationModeForTabOpening::
withUrlLoadParams:params NORMAL
dismissOmnibox:YES withUrlLoadParams:params
completion:^{ dismissOmnibox:YES
[self setStartupParameters:nil]; completion:^{
}]; [self setStartupParameters:nil];
}];
} }
} }
...@@ -1285,7 +1286,8 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData( ...@@ -1285,7 +1286,8 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData(
focusOmnibox:NO]; focusOmnibox:NO];
[self finishDismissingTabSwitcher]; [self finishDismissingTabSwitcher];
} }
if (firstRun || [self shouldOpenNTPTabOnActivationOfTabModel:tabModel]) { if (firstRun ||
[self.sceneController shouldOpenNTPTabOnActivationOfTabModel:tabModel]) {
OpenNewTabCommand* command = [OpenNewTabCommand OpenNewTabCommand* command = [OpenNewTabCommand
commandWithIncognito:(self.currentBVC == self.otrBVC)]; commandWithIncognito:(self.currentBVC == self.otrBVC)];
command.userInitiated = NO; command.userInitiated = NO;
...@@ -1544,33 +1546,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData( ...@@ -1544,33 +1546,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData(
[self.mainCoordinator showTabSwitcher:_tabSwitcher]; [self.mainCoordinator showTabSwitcher:_tabSwitcher];
} }
- (BOOL)shouldOpenNTPTabOnActivationOfTabModel:(TabModel*)tabModel {
if (self.tabSwitcherIsActive) {
// Only attempt to dismiss the tab switcher and open a new tab if:
// - there are no tabs open in either tab model, and
// - the tab switcher controller is not directly or indirectly presenting
// another view controller.
if (![self.mainTabModel isEmpty] || ![self.otrTabModel isEmpty])
return NO;
// If the tabSwitcher is contained, check if the parent container is
// presenting another view controller.
if ([[_tabSwitcher viewController]
.parentViewController presentedViewController]) {
return NO;
}
// Check if the tabSwitcher is directly presenting another view controller.
if ([_tabSwitcher viewController].presentedViewController) {
return NO;
}
return YES;
}
return ![tabModel count] && [tabModel browserState] &&
![tabModel browserState]->IsOffTheRecord();
}
#pragma mark - TabSwitcherDelegate helper methods #pragma mark - TabSwitcherDelegate helper methods
- (void)beginDismissingTabSwitcherWithCurrentModel:(TabModel*)tabModel - (void)beginDismissingTabSwitcherWithCurrentModel:(TabModel*)tabModel
...@@ -1732,51 +1707,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData( ...@@ -1732,51 +1707,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData(
prefs->CommitPendingWrite(); prefs->CommitPendingWrite();
} }
#pragma mark - TabOpening implementation.
- (void)dismissModalsAndOpenSelectedTabInMode:
(ApplicationModeForTabOpening)targetMode
withUrlLoadParams:
(const UrlLoadParams&)urlLoadParams
dismissOmnibox:(BOOL)dismissOmnibox
completion:(ProceduralBlock)completion {
UrlLoadParams copyOfUrlLoadParams = urlLoadParams;
[self.sceneController
dismissModalDialogsWithCompletion:^{
[self.sceneController openSelectedTabInMode:targetMode
withUrlLoadParams:copyOfUrlLoadParams
completion:completion];
}
dismissOmnibox:dismissOmnibox];
}
- (void)openTabFromLaunchOptions:(NSDictionary*)launchOptions
startupInformation:(id<StartupInformation>)startupInformation
appState:(AppState*)appState {
if (launchOptions) {
BOOL applicationIsActive =
[[UIApplication sharedApplication] applicationState] ==
UIApplicationStateActive;
[URLOpener handleLaunchOptions:launchOptions
applicationActive:applicationIsActive
tabOpener:self
startupInformation:startupInformation
appState:appState];
}
}
// TODO(crbug.com/1021752): Remove this stub.
- (BOOL)shouldCompletePaymentRequestOnCurrentTab:
(id<StartupInformation>)startupInformation {
return NO;
}
- (BOOL)URLIsOpenedInRegularMode:(const GURL&)URL {
WebStateList* webStateList = self.mainTabModel.webStateList;
return webStateList && webStateList->GetIndexOfWebStateWithURL(URL) !=
WebStateList::kInvalidIndex;
}
#pragma mark - ApplicationCommands helpers #pragma mark - ApplicationCommands helpers
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
#include "ios/chrome/app/startup/chrome_app_startup_parameters.h"
#import "ios/chrome/browser/crash_report/crash_restore_helper.h" #import "ios/chrome/browser/crash_report/crash_restore_helper.h"
#import "ios/chrome/browser/ui/settings/settings_navigation_controller.h" #import "ios/chrome/browser/ui/settings/settings_navigation_controller.h"
#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h" #import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h"
...@@ -64,8 +65,7 @@ enum class TabSwitcherDismissalMode { NONE, NORMAL, INCOGNITO }; ...@@ -64,8 +65,7 @@ enum class TabSwitcherDismissalMode { NONE, NORMAL, INCOGNITO };
BOOL tabSwitcherIsActive; BOOL tabSwitcherIsActive;
// YES while animating the dismissal of tab switcher. // YES while animating the dismissal of tab switcher.
@property(nonatomic, assign, getter=dismissingTabSwitcher) @property(nonatomic, assign) BOOL dismissingTabSwitcher;
BOOL dismissingTabSwitcher;
// Returns YES if the settings are presented, either from // Returns YES if the settings are presented, either from
// self.settingsNavigationController or from SigninInteractionCoordinator. // self.settingsNavigationController or from SigninInteractionCoordinator.
...@@ -104,13 +104,6 @@ enum class TabSwitcherDismissalMode { NONE, NORMAL, INCOGNITO }; ...@@ -104,13 +104,6 @@ enum class TabSwitcherDismissalMode { NONE, NORMAL, INCOGNITO };
- (TabGridCoordinator*)mainCoordinator; - (TabGridCoordinator*)mainCoordinator;
- (id<BrowserInterfaceProvider>)interfaceProvider; - (id<BrowserInterfaceProvider>)interfaceProvider;
- (void)startVoiceSearchInCurrentBVC; - (void)startVoiceSearchInCurrentBVC;
- (void)dismissModalsAndOpenSelectedTabInMode:
(ApplicationModeForTabOpening)targetMode
withUrlLoadParams:
(const UrlLoadParams&)urlLoadParams
dismissOmnibox:(BOOL)dismissOmnibox
completion:(ProceduralBlock)completion;
- (void)showTabSwitcher; - (void)showTabSwitcher;
// TabSwitcherDelegate helpers // TabSwitcherDelegate helpers
......
...@@ -6,9 +6,12 @@ ...@@ -6,9 +6,12 @@
#include "base/threading/thread.h" #include "base/threading/thread.h"
#import "ios/chrome/app/application_delegate/app_state.h" #import "ios/chrome/app/application_delegate/app_state.h"
#import "ios/chrome/app/application_delegate/tab_opening.h"
#import "ios/chrome/app/application_delegate/url_opener.h" #import "ios/chrome/app/application_delegate/url_opener.h"
#include "ios/chrome/app/main_controller_private.h" #include "ios/chrome/app/main_controller_private.h"
#import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/tabs/tab_model.h"
#import "ios/chrome/browser/ui/main/scene_controller.h"
#import "ios/chrome/browser/ui/main/scene_state.h"
#import "ios/testing/scoped_block_swizzler.h" #import "ios/testing/scoped_block_swizzler.h"
#include "testing/platform_test.h" #include "testing/platform_test.h"
#import "third_party/ocmock/OCMock/OCMock.h" #import "third_party/ocmock/OCMock/OCMock.h"
...@@ -50,7 +53,7 @@ class TabOpenerTest : public PlatformTest { ...@@ -50,7 +53,7 @@ class TabOpenerTest : public PlatformTest {
swizzle_block_executed_ = YES; swizzle_block_executed_ = YES;
EXPECT_EQ(expectedLaunchOptions, options); EXPECT_EQ(expectedLaunchOptions, options);
EXPECT_EQ(expectedStartupInformation, startupInformation); EXPECT_EQ(expectedStartupInformation, startupInformation);
EXPECT_EQ(main_controller_, tabOpener); EXPECT_EQ(main_controller_.sceneController, tabOpener);
EXPECT_EQ(expectedAppState, appState); EXPECT_EQ(expectedAppState, appState);
} copy]; } copy];
URL_opening_handle_launch_swizzler_.reset(new ScopedBlockSwizzler( URL_opening_handle_launch_swizzler_.reset(new ScopedBlockSwizzler(
...@@ -62,13 +65,21 @@ class TabOpenerTest : public PlatformTest { ...@@ -62,13 +65,21 @@ class TabOpenerTest : public PlatformTest {
MainController* GetMainController() { MainController* GetMainController() {
if (!main_controller_) { if (!main_controller_) {
scene_state_ = [[SceneState alloc] init];
main_controller_ = [[MainController alloc] init]; main_controller_ = [[MainController alloc] init];
scene_controller_ =
[[SceneController alloc] initWithSceneState:scene_state_];
main_controller_.sceneController = scene_controller_;
scene_controller_.mainController = main_controller_;
} }
return main_controller_; return main_controller_;
} }
private: private:
MainController* main_controller_; MainController* main_controller_;
SceneController* scene_controller_;
SceneState* scene_state_;
__block BOOL swizzle_block_executed_; __block BOOL swizzle_block_executed_;
HandleLaunchOptions swizzle_block_; HandleLaunchOptions swizzle_block_;
std::unique_ptr<ScopedBlockSwizzler> URL_opening_handle_launch_swizzler_; std::unique_ptr<ScopedBlockSwizzler> URL_opening_handle_launch_swizzler_;
...@@ -91,7 +102,7 @@ TEST_F(TabOpenerTest, openTabFromLaunchOptionsWithOptions) { ...@@ -91,7 +102,7 @@ TEST_F(TabOpenerTest, openTabFromLaunchOptionsWithOptions) {
swizzleHandleLaunchOptions(launchOptions, startupInformationMock, swizzleHandleLaunchOptions(launchOptions, startupInformationMock,
appStateMock); appStateMock);
id<TabOpening> tabOpener = GetMainController(); id<TabOpening> tabOpener = GetMainController().sceneController;
// Action. // Action.
[tabOpener openTabFromLaunchOptions:launchOptions [tabOpener openTabFromLaunchOptions:launchOptions
...@@ -111,7 +122,7 @@ TEST_F(TabOpenerTest, openTabFromLaunchOptionsWithNil) { ...@@ -111,7 +122,7 @@ TEST_F(TabOpenerTest, openTabFromLaunchOptionsWithNil) {
swizzleHandleLaunchOptions(nil, startupInformationMock, appStateMock); swizzleHandleLaunchOptions(nil, startupInformationMock, appStateMock);
id<TabOpening> tabOpener = GetMainController(); id<TabOpening> tabOpener = GetMainController().sceneController;
// Action. // Action.
[tabOpener openTabFromLaunchOptions:nil [tabOpener openTabFromLaunchOptions:nil
......
...@@ -54,6 +54,7 @@ source_set("payments") { ...@@ -54,6 +54,7 @@ source_set("payments") {
"//ui/base", "//ui/base",
"//url", "//url",
] ]
public_deps = [ "//components/autofill/core/browser" ]
libs = [ "UIKit.framework" ] libs = [ "UIKit.framework" ]
} }
......
...@@ -30,6 +30,7 @@ source_set("scene") { ...@@ -30,6 +30,7 @@ source_set("scene") {
":main", ":main",
":scene_guts", ":scene_guts",
"//base", "//base",
"//components/payments/core",
"//components/signin/public/identity_manager", "//components/signin/public/identity_manager",
"//components/url_formatter", "//components/url_formatter",
"//ios/chrome/app:app", "//ios/chrome/app:app",
...@@ -40,6 +41,8 @@ source_set("scene") { ...@@ -40,6 +41,8 @@ source_set("scene") {
"//ios/chrome/browser/browsing_data", "//ios/chrome/browser/browsing_data",
"//ios/chrome/browser/main", "//ios/chrome/browser/main",
"//ios/chrome/browser/ntp:features", "//ios/chrome/browser/ntp:features",
"//ios/chrome/browser/payments",
"//ios/chrome/browser/payments:constants",
"//ios/chrome/browser/signin", "//ios/chrome/browser/signin",
"//ios/chrome/browser/snapshots", "//ios/chrome/browser/snapshots",
"//ios/chrome/browser/tabs:tabs", "//ios/chrome/browser/tabs:tabs",
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
#import "ios/chrome/app/application_delegate/tab_opening.h"
#import "ios/chrome/app/application_delegate/tab_switching.h" #import "ios/chrome/app/application_delegate/tab_switching.h"
#import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/application_commands.h"
#import "ios/chrome/browser/ui/main/scene_controller_guts.h" #import "ios/chrome/browser/ui/main/scene_controller_guts.h"
...@@ -22,7 +23,8 @@ ...@@ -22,7 +23,8 @@
ApplicationCommands, ApplicationCommands,
TabSwitcherDelegate, TabSwitcherDelegate,
TabSwitching, TabSwitching,
SceneControllerGuts> SceneControllerGuts,
TabOpening>
- (instancetype)init NS_UNAVAILABLE; - (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithSceneState:(SceneState*)sceneState - (instancetype)initWithSceneState:(SceneState*)sceneState
......
...@@ -8,9 +8,12 @@ ...@@ -8,9 +8,12 @@
#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/strings/sys_string_conversions.h" #include "base/strings/sys_string_conversions.h"
#include "components/payments/core/features.h"
#include "components/signin/public/identity_manager/identity_manager.h" #include "components/signin/public/identity_manager/identity_manager.h"
#include "components/url_formatter/url_formatter.h" #include "components/url_formatter/url_formatter.h"
#import "ios/chrome/app/application_delegate/app_state.h"
#include "ios/chrome/app/application_delegate/tab_opening.h" #include "ios/chrome/app/application_delegate/tab_opening.h"
#import "ios/chrome/app/application_delegate/url_opener.h"
#import "ios/chrome/app/chrome_overlay_window.h" #import "ios/chrome/app/chrome_overlay_window.h"
#import "ios/chrome/app/deferred_initialization_runner.h" #import "ios/chrome/app/deferred_initialization_runner.h"
#import "ios/chrome/app/main_controller_guts.h" #import "ios/chrome/app/main_controller_guts.h"
...@@ -22,6 +25,9 @@ ...@@ -22,6 +25,9 @@
#import "ios/chrome/browser/chrome_url_util.h" #import "ios/chrome/browser/chrome_url_util.h"
#include "ios/chrome/browser/main/browser.h" #include "ios/chrome/browser/main/browser.h"
#include "ios/chrome/browser/ntp/features.h" #include "ios/chrome/browser/ntp/features.h"
#include "ios/chrome/browser/payments/ios_payment_instrument_launcher.h"
#include "ios/chrome/browser/payments/ios_payment_instrument_launcher_factory.h"
#include "ios/chrome/browser/payments/payment_request_constants.h"
#include "ios/chrome/browser/signin/identity_manager_factory.h" #include "ios/chrome/browser/signin/identity_manager_factory.h"
#import "ios/chrome/browser/snapshots/snapshot_tab_helper.h" #import "ios/chrome/browser/snapshots/snapshot_tab_helper.h"
#import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/tabs/tab_model.h"
...@@ -517,11 +523,11 @@ enum class EnterTabSwitcherSnapshotResult { ...@@ -517,11 +523,11 @@ enum class EnterTabSwitcherSnapshotResult {
UrlLoadParams params = UrlLoadParams::InNewTab([command URL]); UrlLoadParams params = UrlLoadParams::InNewTab([command URL]);
params.web_params.transition_type = ui::PAGE_TRANSITION_TYPED; params.web_params.transition_type = ui::PAGE_TRANSITION_TYPED;
ProceduralBlock completion = ^{ ProceduralBlock completion = ^{
[self.mainController dismissModalsAndOpenSelectedTabInMode: [self dismissModalsAndOpenSelectedTabInMode:ApplicationModeForTabOpening::
ApplicationModeForTabOpening::NORMAL NORMAL
withUrlLoadParams:params withUrlLoadParams:params
dismissOmnibox:YES dismissOmnibox:YES
completion:nil]; completion:nil];
}; };
[self closeSettingsAnimated:YES completion:completion]; [self closeSettingsAnimated:YES completion:completion];
} }
...@@ -616,6 +622,118 @@ enum class EnterTabSwitcherSnapshotResult { ...@@ -616,6 +622,118 @@ enum class EnterTabSwitcherSnapshotResult {
return YES; return YES;
} }
#pragma mark - TabOpening implementation.
- (void)dismissModalsAndOpenSelectedTabInMode:
(ApplicationModeForTabOpening)targetMode
withUrlLoadParams:
(const UrlLoadParams&)urlLoadParams
dismissOmnibox:(BOOL)dismissOmnibox
completion:(ProceduralBlock)completion {
UrlLoadParams copyOfUrlLoadParams = urlLoadParams;
[self
dismissModalDialogsWithCompletion:^{
[self openSelectedTabInMode:targetMode
withUrlLoadParams:copyOfUrlLoadParams
completion:completion];
}
dismissOmnibox:dismissOmnibox];
}
- (void)openTabFromLaunchOptions:(NSDictionary*)launchOptions
startupInformation:(id<StartupInformation>)startupInformation
appState:(AppState*)appState {
if (launchOptions) {
BOOL applicationIsActive =
[[UIApplication sharedApplication] applicationState] ==
UIApplicationStateActive;
[URLOpener handleLaunchOptions:launchOptions
applicationActive:applicationIsActive
tabOpener:self
startupInformation:startupInformation
appState:appState];
}
}
- (BOOL)shouldCompletePaymentRequestOnCurrentTab:
(id<StartupInformation>)startupInformation {
if (!startupInformation.startupParameters)
return NO;
if (!startupInformation.startupParameters.completePaymentRequest)
return NO;
if (!base::FeatureList::IsEnabled(payments::features::kWebPaymentsNativeApps))
return NO;
payments::IOSPaymentInstrumentLauncher* paymentAppLauncher =
payments::IOSPaymentInstrumentLauncherFactory::GetInstance()
->GetForBrowserState(self.mainController.mainBrowserState);
if (!paymentAppLauncher->delegate())
return NO;
std::string payment_id =
startupInformation.startupParameters.externalURLParams
.find(payments::kPaymentRequestIDExternal)
->second;
if (paymentAppLauncher->payment_request_id() != payment_id)
return NO;
std::string payment_response =
startupInformation.startupParameters.externalURLParams
.find(payments::kPaymentRequestDataExternal)
->second;
paymentAppLauncher->ReceiveResponseFromIOSPaymentInstrument(payment_response);
[startupInformation setStartupParameters:nil];
return YES;
}
- (BOOL)URLIsOpenedInRegularMode:(const GURL&)URL {
WebStateList* webStateList =
self.mainController.interfaceProvider.mainInterface.tabModel.webStateList;
return webStateList && webStateList->GetIndexOfWebStateWithURL(URL) !=
WebStateList::kInvalidIndex;
}
- (ProceduralBlock)completionBlockForTriggeringAction:
(NTPTabOpeningPostOpeningAction)action {
return [self.mainController completionBlockForTriggeringAction:action];
}
- (BOOL)shouldOpenNTPTabOnActivationOfTabModel:(TabModel*)tabModel {
if (self.mainController.tabSwitcherIsActive) {
TabModel* mainTabModel =
self.mainController.interfaceProvider.mainInterface.tabModel;
TabModel* otrTabModel =
self.mainController.interfaceProvider.incognitoInterface.tabModel;
// Only attempt to dismiss the tab switcher and open a new tab if:
// - there are no tabs open in either tab model, and
// - the tab switcher controller is not directly or indirectly presenting
// another view controller.
if (![mainTabModel isEmpty] || ![otrTabModel isEmpty])
return NO;
// If the tabSwitcher is contained, check if the parent container is
// presenting another view controller.
if ([[self.mainController.tabSwitcher viewController]
.parentViewController presentedViewController]) {
return NO;
}
// Check if the tabSwitcher is directly presenting another view controller.
if ([self.mainController.tabSwitcher viewController]
.presentedViewController) {
return NO;
}
return YES;
}
return ![tabModel count] && [tabModel browserState] &&
![tabModel browserState] -> IsOffTheRecord();
}
#pragma mark - AppURLLoadingServiceDelegate #pragma mark - AppURLLoadingServiceDelegate
// Note that the current tab of |browserCoordinator|'s BVC will normally be // Note that the current tab of |browserCoordinator|'s BVC will normally be
......
...@@ -7,10 +7,13 @@ ...@@ -7,10 +7,13 @@
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
#include "ios/chrome/app/application_delegate/startup_information.h"
#import "ios/chrome/app/application_delegate/tab_opening.h" #import "ios/chrome/app/application_delegate/tab_opening.h"
#import "ios/chrome/browser/procedural_block_types.h" #import "ios/chrome/browser/procedural_block_types.h"
#import "ios/chrome/browser/url_loading/url_loading_params.h" #import "ios/chrome/browser/url_loading/url_loading_params.h"
@class TabModel;
@protocol SceneControllerGuts @protocol SceneControllerGuts
- (void)closeSettingsAnimated:(BOOL)animated - (void)closeSettingsAnimated:(BOOL)animated
...@@ -23,6 +26,18 @@ ...@@ -23,6 +26,18 @@
withUrlLoadParams:(const UrlLoadParams&)urlLoadParams withUrlLoadParams:(const UrlLoadParams&)urlLoadParams
completion:(ProceduralBlock)completion; completion:(ProceduralBlock)completion;
- (void)openTabFromLaunchOptions:(NSDictionary*)launchOptions
startupInformation:(id<StartupInformation>)startupInformation
appState:(AppState*)appState;
- (void)dismissModalsAndOpenSelectedTabInMode:
(ApplicationModeForTabOpening)targetMode
withUrlLoadParams:
(const UrlLoadParams&)urlLoadParams
dismissOmnibox:(BOOL)dismissOmnibox
completion:(ProceduralBlock)completion;
- (BOOL)shouldOpenNTPTabOnActivationOfTabModel:(TabModel*)tabModel;
@end @end
#endif // IOS_CHROME_BROWSER_UI_MAIN_SCENE_CONTROLLER_GUTS_H_ #endif // IOS_CHROME_BROWSER_UI_MAIN_SCENE_CONTROLLER_GUTS_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment