chromium/ios/chrome/test/app/chrome_test_util.h

// Copyright 2016 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_TEST_APP_CHROME_TEST_UTIL_H_
#define IOS_CHROME_TEST_APP_CHROME_TEST_UTIL_H_

#import "base/ios/block_types.h"
#import "ios/chrome/browser/shared/model/profile/profile_ios_forward.h"
#import "ios/chrome/browser/shared/public/commands/browser_commands.h"
#import "ios/chrome/browser/shared/public/commands/browser_coordinator_commands.h"

@protocol ApplicationCommands;
@protocol CountryCodePickerCommands;
@protocol UnitConversionCommands;

class Browser;
@class MainController;
@class NewTabPageController;
@class SceneController;
@class SceneState;
@class UIViewController;

namespace chrome_test_util {

// Returns the main controller.
MainController* GetMainController();

// Returns the foreground, active scene.
SceneState* GetForegroundActiveScene();

// Returns the foreground, active scene controller.
SceneController* GetForegroundActiveSceneController();

// Returns the number of regular Browsers for the default profile.
NSUInteger RegularBrowserCount();

// Returns the current, non-incognito ChromeBrowserState.
ChromeBrowserState* GetOriginalBrowserState();

// Returns the current incognito ChromeBrowserState
ChromeBrowserState* GetCurrentIncognitoBrowserState();

// Returns the browser for the main interface.
Browser* GetMainBrowser();

// Returns the current browser from the foreground active scene.
Browser* GetCurrentBrowser();

// Returns the active view controller.
// NOTE: It is preferred to not directly access the active view controller if
// possible.
UIViewController* GetActiveViewController();

// Returns the dispatcher for the active Browser.
id<ApplicationCommands,
   BrowserCommands,
   BrowserCoordinatorCommands,
   UnitConversionCommands,
   CountryCodePickerCommands>
HandlerForActiveBrowser();

// Removes all presented infobars.
void RemoveAllInfoBars();

// Dismisses all presented views and modal dialogs. `completion` is invoked when
// all the views are dismissed.
void ClearPresentedState(ProceduralBlock completion);

// Presents the signed in accounts view controller if conditions to be presented
// are met.
void PresentSignInAccountsViewControllerIfNecessary();

// Sets the value of a boolean local state pref.
// TODO(crbug.com/41275546): Clean up other tests that use this helper function.
void SetBooleanLocalStatePref(const char* pref_name, bool value);

// Sets the value of a boolean user pref in the given browser state.
void SetBooleanUserPref(ChromeBrowserState* browser_state,
                        const char* pref_name,
                        bool value);

// Sets the value of an integer user pref in the given browser state.
void SetIntegerUserPref(ChromeBrowserState* browser_state,
                        const char* pref_name,
                        int value);

// Checks whether metrics recording is enabled or not.
bool IsMetricsRecordingEnabled();

// Checks whether metrics reporting is enabled or not.
bool IsMetricsReportingEnabled();

// Checks whether crashpad recording is enabled or not.
bool IsCrashpadEnabled();

// Checks whether crashpad reporting is enabled or not.
bool IsCrashpadReportingEnabled();

// Simulates launching Chrome from another application.
void OpenChromeFromExternalApp(const GURL& url);

// Purges cached web view page, so the next time back navigation will not use
// cached page. Browsers don't have to use fresh version for back forward
// navigation for HTTP pages and may serve version from the cache even if
// Cache-Control response header says otherwise.
[[nodiscard]] bool PurgeCachedWebViewPages();

}  // namespace chrome_test_util

#endif  // IOS_CHROME_TEST_APP_CHROME_TEST_UTIL_H_