|  | // Copyright (c) 2011 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. | 
|  |  | 
|  | #include "chrome/browser/lifetime/switch_utils.h" | 
|  |  | 
|  | #include <stddef.h> | 
|  |  | 
|  | #include "base/macros.h" | 
|  | #include "build/build_config.h" | 
|  | #include "chrome/common/chrome_switches.h" | 
|  |  | 
|  | #if defined(OS_WIN) | 
|  | #include "base/strings/string_util.h" | 
|  | #endif  // defined(OS_WIN) | 
|  |  | 
|  | namespace switches { | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | // Switches enumerated here will be removed when a background instance of | 
|  | // Chrome restarts itself. If your key is designed to only be used once, | 
|  | // or if it does not make sense when restarting a background instance to | 
|  | // pick up an automatic update, be sure to add it to this list. | 
|  | constexpr const char* kSwitchesToRemoveOnAutorestart[] = { | 
|  | switches::kApp, | 
|  | switches::kAppId, | 
|  | switches::kForceFirstRun, | 
|  | #if defined(OS_WIN) | 
|  | switches::kFromInstaller, | 
|  | #endif | 
|  | switches::kGuest, | 
|  | switches::kIncognito, | 
|  | switches::kMakeDefaultBrowser, | 
|  | switches::kNoStartupWindow, | 
|  | switches::kRestoreLastSession, | 
|  | switches::kWinJumplistAction}; | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | void RemoveSwitchesForAutostart(base::CommandLine::SwitchMap* switch_list) { | 
|  | for (const char* switch_to_remove : kSwitchesToRemoveOnAutorestart) | 
|  | switch_list->erase(switch_to_remove); | 
|  |  | 
|  | #if defined(OS_WIN) | 
|  | // The relaunched browser process shouldn't reuse the /prefetch:# switch of | 
|  | // the current process because the process type can change (e.g. a process | 
|  | // initially launched in background can be relaunched in foreground). | 
|  | static const char kPrefetchSwitchPrefix[] = "prefetch:"; | 
|  | auto it = switch_list->lower_bound(kPrefetchSwitchPrefix); | 
|  | if (it != switch_list->end() && | 
|  | base::StartsWith(it->first, kPrefetchSwitchPrefix, | 
|  | base::CompareCase::SENSITIVE)) { | 
|  | switch_list->erase(it); | 
|  | } | 
|  | #endif  // defined(OS_WIN) | 
|  | } | 
|  |  | 
|  | }  // namespace switches |