#include "chrome/browser/ui/startup/startup_browser_creator_impl.h"
#include <stddef.h>
#include <algorithm>
#include <iterator>
#include <memory>
#include <utility>
#include "base/auto_reset.h"
#include "base/command_line.h"
#include "base/debug/dump_without_crashing.h"
#include "base/functional/bind.h"
#include "base/notreached.h"
#include "build/build_config.h"
#include "chrome/browser/apps/platform_apps/install_chrome_app.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h"
#include "chrome/browser/defaults.h"
#include "chrome/browser/first_run/first_run.h"
#include "chrome/browser/headless/headless_command_processor.h"
#include "chrome/browser/prefs/session_startup_pref.h"
#include "chrome/browser/privacy_sandbox/privacy_sandbox_service.h"
#include "chrome/browser/privacy_sandbox/privacy_sandbox_service_factory.h"
#include "chrome/browser/profiles/keep_alive/profile_keep_alive_types.h"
#include "chrome/browser/profiles/keep_alive/scoped_profile_keep_alive.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_io_data.h"
#include "chrome/browser/sessions/session_service.h"
#include "chrome/browser/sessions/session_service_factory.h"
#include "chrome/browser/signin/account_consistency_mode_manager.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_navigator.h"
#include "chrome/browser/ui/browser_navigator_params.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/startup/infobar_utils.h"
#include "chrome/browser/ui/startup/startup_browser_creator.h"
#include "chrome/browser/ui/startup/startup_tab.h"
#include "chrome/browser/ui/startup/startup_tab_provider.h"
#include "chrome/browser/ui/startup/startup_types.h"
#include "chrome/browser/ui/webui/whats_new/whats_new_util.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "components/custom_handlers/protocol_handler_registry.h"
#include "components/prefs/pref_service.h"
#include "components/privacy_sandbox/privacy_sandbox_features.h"
#include "components/signin/public/base/signin_switches.h"
#include "content/public/browser/child_process_security_policy.h"
#include "content/public/browser/dom_storage_context.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/common/content_switches.h"
#if BUILDFLAG(IS_MAC)
#include "base/mac/mac_util.h"
#include "chrome/browser/app_controller_mac.h"
#endif
#if BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
#include "chrome/browser/win/conflicts/incompatible_applications_updater.h"
#endif
#if BUILDFLAG(ENABLE_RLZ)
#include "components/google/core/common/google_util.h"
#include "components/rlz/rlz_tracker.h"
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "chrome/browser/ash/crosapi/browser_util.h"
#include "components/app_restore/full_restore_utils.h"
#endif
#if BUILDFLAG(IS_CHROMEOS_LACROS)
#include "chrome/browser/chromeos/arc/arc_web_contents_data.h"
#include "chrome/browser/lacros/browser_launcher.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chromeos/crosapi/mojom/crosapi.mojom.h"
#include "chromeos/startup/browser_params_proxy.h"
#endif
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
#include "chrome/browser/ui/webui/whats_new/whats_new_fetcher.h"
#endif
namespace {
bool ShouldRestoreApps(bool is_post_restart, Profile* profile) { … }
void UrlsToTabs(const std::vector<GURL>& urls, StartupTabs* tabs) { … }
void AppendTabs(const StartupTabs& from, StartupTabs* to) { … }
void PrependTabs(const StartupTabs& from, StartupTabs* to) { … }
}
StartupBrowserCreatorImpl::StartupBrowserCreatorImpl(
const base::FilePath& cur_dir,
const base::CommandLine& command_line,
chrome::startup::IsFirstRun is_first_run)
: … { … }
StartupBrowserCreatorImpl::StartupBrowserCreatorImpl(
const base::FilePath& cur_dir,
const base::CommandLine& command_line,
StartupBrowserCreator* browser_creator,
chrome::startup::IsFirstRun is_first_run)
: … { … }
void StartupBrowserCreatorImpl::MaybeToggleFullscreen(Browser* browser) { … }
void StartupBrowserCreatorImpl::Launch(
Profile* profile,
chrome::startup::IsProcessStartup process_startup,
bool restore_tabbed_browser) { … }
Browser* StartupBrowserCreatorImpl::OpenURLsInBrowser(
Browser* browser,
chrome::startup::IsProcessStartup process_startup,
const std::vector<GURL>& urls) { … }
Browser* StartupBrowserCreatorImpl::OpenTabsInBrowser(
Browser* browser,
chrome::startup::IsProcessStartup process_startup,
const StartupTabs& tabs) { … }
void StartupBrowserCreatorImpl::DetermineURLsAndLaunch(
chrome::startup::IsProcessStartup process_startup,
bool restore_tabbed_browser) { … }
StartupBrowserCreatorImpl::DetermineStartupTabsResult::
DetermineStartupTabsResult(StartupTabs tabs, LaunchResult launch_result)
: … { … }
StartupBrowserCreatorImpl::DetermineStartupTabsResult::
DetermineStartupTabsResult(DetermineStartupTabsResult&&) = default;
StartupBrowserCreatorImpl::DetermineStartupTabsResult&
StartupBrowserCreatorImpl::DetermineStartupTabsResult::operator=(
DetermineStartupTabsResult&&) = default;
StartupBrowserCreatorImpl::DetermineStartupTabsResult::
~DetermineStartupTabsResult() = default;
StartupBrowserCreatorImpl::DetermineStartupTabsResult
StartupBrowserCreatorImpl::DetermineStartupTabs(
const StartupTabProvider& provider,
chrome::startup::IsProcessStartup process_startup,
bool is_incognito_or_guest,
bool is_post_crash_launch,
bool has_incompatible_applications,
bool promotions_enabled,
bool whats_new_enabled,
bool privacy_sandbox_dialog_required) { … }
bool StartupBrowserCreatorImpl::MaybeAsyncRestore(
const StartupTabs& tabs,
chrome::startup::IsProcessStartup process_startup,
bool is_post_crash_launch) { … }
Browser* StartupBrowserCreatorImpl::RestoreOrCreateBrowser(
const StartupTabs& tabs,
BrowserOpenBehavior behavior,
SessionRestore::BehaviorBitmask restore_options,
chrome::startup::IsProcessStartup process_startup,
bool is_post_crash_launch) { … }
StartupBrowserCreatorImpl::BrowserOpenBehavior
StartupBrowserCreatorImpl::DetermineBrowserOpenBehavior(
const SessionStartupPref& pref,
BrowserOpenBehaviorOptions options) { … }
SessionRestore::BehaviorBitmask
StartupBrowserCreatorImpl::DetermineSynchronousRestoreOptions(
bool has_create_browser_default,
bool has_create_browser_switch,
bool was_mac_login_or_resume,
bool restore_tabbed_browser) { … }
bool StartupBrowserCreatorImpl::IsKioskModeEnabled() { … }