Index: chrome/common/switch_utils.cc |
diff --git a/chrome/common/switch_utils.cc b/chrome/common/switch_utils.cc |
index 1b0f6c6cf752ad8612a4f923fdaa60a227167e8e..29acd4e7fbe68a06c91c9661ba49437812bbff35 100644 |
--- a/chrome/common/switch_utils.cc |
+++ b/chrome/common/switch_utils.cc |
@@ -7,10 +7,17 @@ |
#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 |
@@ -26,10 +33,25 @@ const char* const kSwitchesToRemoveOnAutorestart[] = { |
switches::kWinJumplistAction |
}; |
+} // namespace |
+ |
void RemoveSwitchesForAutostart( |
std::map<std::string, base::CommandLine::StringType>* switch_list) { |
for (size_t i = 0; i < arraysize(kSwitchesToRemoveOnAutorestart); ++i) |
switch_list->erase(kSwitchesToRemoveOnAutorestart[i]); |
+ |
+#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 |