| Index: ios/chrome/test/app/tab_test_util.mm
|
| diff --git a/ios/chrome/test/app/tab_test_util.mm b/ios/chrome/test/app/tab_test_util.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b1fab0b2e267d31e3dd9bccd59a46d51a6eb1010
|
| --- /dev/null
|
| +++ b/ios/chrome/test/app/tab_test_util.mm
|
| @@ -0,0 +1,193 @@
|
| +// Copyright 2016 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.
|
| +
|
| +#import "ios/chrome/test/app/tab_test_util.h"
|
| +
|
| +#import <Foundation/Foundation.h>
|
| +
|
| +#import "base/mac/foundation_util.h"
|
| +#import "base/mac/scoped_nsobject.h"
|
| +#import "ios/chrome/app/main_controller_private.h"
|
| +#import "ios/chrome/browser/autofill/form_input_accessory_view_controller.h"
|
| +#include "ios/chrome/browser/experimental_flags.h"
|
| +#import "ios/chrome/browser/metrics/tab_usage_recorder.h"
|
| +#import "ios/chrome/browser/tabs/tab.h"
|
| +#import "ios/chrome/browser/tabs/tab_model.h"
|
| +#import "ios/chrome/browser/tabs/tab_private.h"
|
| +#import "ios/chrome/browser/ui/browser_view_controller.h"
|
| +#import "ios/chrome/browser/ui/commands/generic_chrome_command.h"
|
| +#include "ios/chrome/browser/ui/commands/ios_command_ids.h"
|
| +#import "ios/chrome/browser/ui/tabs/tab_strip_controller_private.h"
|
| +#import "ios/chrome/test/app/chrome_test_util.h"
|
| +#import "ios/testing/wait_util.h"
|
| +
|
| +namespace chrome_test_util {
|
| +
|
| +namespace {
|
| +
|
| +// Returns the tab model for the current mode (incognito or normal).
|
| +TabModel* GetCurrentTabModel() {
|
| + return IsIncognitoMode()
|
| + ? [[GetMainController() browserViewInformation] otrTabModel]
|
| + : [[GetMainController() browserViewInformation] mainTabModel];
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +BOOL IsIncognitoMode() {
|
| + MainController* main_controller = GetMainController();
|
| + BrowserViewController* otr_bvc =
|
| + [[main_controller browserViewInformation] otrBVC];
|
| + BrowserViewController* current_bvc =
|
| + [[main_controller browserViewInformation] currentBVC];
|
| + return otr_bvc == current_bvc;
|
| +}
|
| +
|
| +void OpenNewTab() {
|
| + @autoreleasepool { // Make sure that all internals are deallocated.
|
| + base::scoped_nsobject<GenericChromeCommand> command(
|
| + [[GenericChromeCommand alloc] initWithTag:IDC_NEW_TAB]);
|
| + chrome_test_util::RunCommandWithActiveViewController(command);
|
| + }
|
| +}
|
| +
|
| +void OpenNewIncognitoTab() {
|
| + @autoreleasepool { // Make sure that all internals are deallocated.
|
| + base::scoped_nsobject<GenericChromeCommand> command(
|
| + [[GenericChromeCommand alloc] initWithTag:IDC_NEW_INCOGNITO_TAB]);
|
| + chrome_test_util::RunCommandWithActiveViewController(command);
|
| + }
|
| +}
|
| +
|
| +Tab* GetCurrentTab() {
|
| + TabModel* tab_model = GetCurrentTabModel();
|
| + return tab_model.currentTab;
|
| +}
|
| +
|
| +Tab* GetNextTab() {
|
| + TabModel* tabModel = GetCurrentTabModel();
|
| + NSUInteger tabCount = [tabModel count];
|
| + if (tabCount < 2)
|
| + return nil;
|
| + Tab* currentTab = [tabModel currentTab];
|
| + NSUInteger nextTabIndex = [tabModel indexOfTab:currentTab] + 1;
|
| + if (nextTabIndex >= tabCount)
|
| + nextTabIndex = 0;
|
| + return [tabModel tabAtIndex:nextTabIndex];
|
| +}
|
| +
|
| +void CloseCurrentTab() {
|
| + TabModel* tab_model = GetCurrentTabModel();
|
| + [tab_model closeTab:tab_model.currentTab];
|
| +}
|
| +
|
| +void CloseTabAtIndex(NSUInteger index) {
|
| + @autoreleasepool { // Make sure that all internals are deallocated.
|
| + [GetCurrentTabModel() closeTabAtIndex:index];
|
| + }
|
| +}
|
| +
|
| +void CloseAllTabsInCurrentMode() {
|
| + [GetCurrentTabModel() closeAllTabs];
|
| +}
|
| +
|
| +void CloseAllTabs() {
|
| + if (GetIncognitoTabCount()) {
|
| + [[[GetMainController() browserViewInformation] otrTabModel] closeAllTabs];
|
| + }
|
| + if (GetMainTabCount()) {
|
| + [[[GetMainController() browserViewInformation] mainTabModel] closeAllTabs];
|
| + }
|
| +}
|
| +
|
| +void SelectTabAtIndexInCurrentMode(NSUInteger index) {
|
| + @autoreleasepool { // Make sure that all internals are deallocated.
|
| + TabModel* tab_model = GetCurrentTabModel();
|
| + [tab_model setCurrentTab:[tab_model tabAtIndex:index]];
|
| + }
|
| +}
|
| +
|
| +NSUInteger GetMainTabCount() {
|
| + return [[[GetMainController() browserViewInformation] mainTabModel] count];
|
| +}
|
| +
|
| +NSUInteger GetIncognitoTabCount() {
|
| + return [[[GetMainController() browserViewInformation] otrTabModel] count];
|
| +}
|
| +
|
| +BOOL ResetTabUsageRecorder() {
|
| + if (!GetCurrentTabModel().tabUsageRecorder)
|
| + return NO;
|
| + GetCurrentTabModel().tabUsageRecorder->ResetAll();
|
| + return YES;
|
| +}
|
| +
|
| +BOOL SetCurrentTabsToBeColdStartTabs() {
|
| + if (!GetCurrentTabModel().tabUsageRecorder)
|
| + return NO;
|
| + TabModel* tab_model = GetCurrentTabModel();
|
| + NSMutableArray* tabs = [NSMutableArray array];
|
| + for (Tab* tab in tab_model) {
|
| + [tabs addObject:tab];
|
| + }
|
| + tab_model.tabUsageRecorder->InitialRestoredTabs(tab_model.currentTab, tabs);
|
| + return YES;
|
| +}
|
| +
|
| +BOOL SimulateTabsBackgrounding() {
|
| + if (!GetCurrentTabModel().tabUsageRecorder)
|
| + return NO;
|
| + GetCurrentTabModel().tabUsageRecorder->AppDidEnterBackground();
|
| + return YES;
|
| +}
|
| +
|
| +void EvictOtherTabModelTabs() {
|
| + TabModel* otherTabModel =
|
| + IsIncognitoMode()
|
| + ? [GetMainController().browserViewInformation mainTabModel]
|
| + : [GetMainController().browserViewInformation otrTabModel];
|
| + NSUInteger count = otherTabModel.count;
|
| + for (NSUInteger i = 0; i < count; i++) {
|
| + Tab* tab = [otherTabModel tabAtIndex:i];
|
| + [tab.webController handleLowMemory];
|
| + }
|
| +}
|
| +
|
| +void CloseAllIncognitoTabs() {
|
| + MainController* main_controller = chrome_test_util::GetMainController();
|
| + DCHECK(main_controller);
|
| + TabModel* tabModel = [[main_controller browserViewInformation] otrTabModel];
|
| + DCHECK(tabModel);
|
| + [tabModel closeAllTabs];
|
| + if (!IsIPadIdiom() || !experimental_flags::IsTabSwitcherEnabled()) {
|
| + // If the OTR BVC is active, wait until it isn't (since all of the
|
| + // tabs are now closed)
|
| + testing::WaitUntilConditionOrTimeout(testing::kWaitForUIElementTimeout, ^{
|
| + return !IsIncognitoMode();
|
| + });
|
| + }
|
| +}
|
| +
|
| +TabView* GetTabViewForTab(Tab* tab) {
|
| + MainController* main_controller = GetMainController();
|
| + BrowserViewController* current_bvc =
|
| + [[main_controller browserViewInformation] currentBVC];
|
| + TabStripController* tabStrip = [current_bvc tabStripController];
|
| + return [tabStrip existingTabViewForTab:tab];
|
| +}
|
| +
|
| +NSUInteger GetEvictedMainTabCount() {
|
| + if (![[GetMainController() browserViewInformation] mainTabModel]
|
| + .tabUsageRecorder)
|
| + return 0;
|
| + return [[GetMainController() browserViewInformation] mainTabModel]
|
| + .tabUsageRecorder->EvictedTabsMapSize();
|
| +}
|
| +
|
| +FormInputAccessoryViewController* GetInputAccessoryViewController() {
|
| + Tab* current_tab = GetCurrentTab();
|
| + return [current_tab inputAccessoryViewController];
|
| +}
|
| +
|
| +} // namespace chrome_test_util
|
|
|