| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/startup/startup_browser_creator_impl.h" | 5 #include "chrome/browser/ui/startup/startup_browser_creator_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 | 126 |
| 127 using content::ChildProcessSecurityPolicy; | 127 using content::ChildProcessSecurityPolicy; |
| 128 using content::WebContents; | 128 using content::WebContents; |
| 129 using extensions::Extension; | 129 using extensions::Extension; |
| 130 | 130 |
| 131 namespace { | 131 namespace { |
| 132 | 132 |
| 133 // Utility functions ---------------------------------------------------------- | 133 // Utility functions ---------------------------------------------------------- |
| 134 | 134 |
| 135 enum LaunchMode { | 135 enum LaunchMode { |
| 136 LM_TO_BE_DECIDED = 0, // Possibly direct launch or via a shortcut. | 136 LM_TO_BE_DECIDED = 0, // Possibly direct launch or via a shortcut. |
| 137 LM_AS_WEBAPP, // Launched as a installed web application. | 137 LM_AS_WEBAPP, // Launched as a installed web application. |
| 138 LM_WITH_URLS, // Launched with urls in the cmd line. | 138 LM_WITH_URLS, // Launched with urls in the cmd line. |
| 139 LM_SHORTCUT_NONE, // Not launched from a shortcut. | 139 LM_OTHER, // Not launched from a shortcut. |
| 140 LM_SHORTCUT_NONAME, // Launched from shortcut but no name available. | 140 LM_SHORTCUT_NONAME, // Launched from shortcut but no name available. |
| 141 LM_SHORTCUT_UNKNOWN, // Launched from user-defined shortcut. | 141 LM_SHORTCUT_UNKNOWN, // Launched from user-defined shortcut. |
| 142 LM_SHORTCUT_QUICKLAUNCH, // Launched from the quick launch bar. | 142 LM_SHORTCUT_QUICKLAUNCH, // Launched from the quick launch bar. |
| 143 LM_SHORTCUT_DESKTOP, // Launched from a desktop shortcut. | 143 LM_SHORTCUT_DESKTOP, // Launched from a desktop shortcut. |
| 144 LM_SHORTCUT_TASKBAR, // Launched from the taskbar. | 144 LM_SHORTCUT_TASKBAR, // Launched from the taskbar. |
| 145 LM_LINUX_MAC_BEOS // Other OS buckets start here. | 145 LM_USER_EXPERIMENT, // Launched after acceptance of a user experiment. |
| 146 LM_LINUX_MAC_BEOS // Other OS buckets start here. |
| 146 }; | 147 }; |
| 147 | 148 |
| 148 #if defined(OS_WIN) | 149 #if defined(OS_WIN) |
| 149 // Undocumented flag in the startup info structure tells us what shortcut was | 150 // Undocumented flag in the startup info structure tells us what shortcut was |
| 150 // used to launch the browser. See http://www.catch22.net/tuts/undoc01 for | 151 // used to launch the browser. See http://www.catch22.net/tuts/undoc01 for |
| 151 // more information. Confirmed to work on XP, Vista and Win7. | 152 // more information. Confirmed to work on XP, Vista and Win7. |
| 152 LaunchMode GetLaunchShortcutKind() { | 153 LaunchMode GetLaunchShortcutKind() { |
| 153 STARTUPINFOW si = { sizeof(si) }; | 154 STARTUPINFOW si = { sizeof(si) }; |
| 154 GetStartupInfoW(&si); | 155 GetStartupInfoW(&si); |
| 155 if (si.dwFlags & 0x800) { | 156 if (si.dwFlags & 0x800) { |
| 156 if (!si.lpTitle) | 157 if (!si.lpTitle) |
| 157 return LM_SHORTCUT_NONAME; | 158 return LM_SHORTCUT_NONAME; |
| 158 base::string16 shortcut(si.lpTitle); | 159 base::string16 shortcut(si.lpTitle); |
| 159 // The windows quick launch path is not localized. | 160 // The windows quick launch path is not localized. |
| 160 if (shortcut.find(L"\\Quick Launch\\") != base::string16::npos) { | 161 if (shortcut.find(L"\\Quick Launch\\") != base::string16::npos) { |
| 161 if (base::win::GetVersion() >= base::win::VERSION_WIN7) | 162 if (base::win::GetVersion() >= base::win::VERSION_WIN7) |
| 162 return LM_SHORTCUT_TASKBAR; | 163 return LM_SHORTCUT_TASKBAR; |
| 163 else | 164 else |
| 164 return LM_SHORTCUT_QUICKLAUNCH; | 165 return LM_SHORTCUT_QUICKLAUNCH; |
| 165 } | 166 } |
| 166 std::unique_ptr<base::Environment> env(base::Environment::Create()); | 167 std::unique_ptr<base::Environment> env(base::Environment::Create()); |
| 167 std::string appdata_path; | 168 std::string appdata_path; |
| 168 env->GetVar("USERPROFILE", &appdata_path); | 169 env->GetVar("USERPROFILE", &appdata_path); |
| 169 if (!appdata_path.empty() && | 170 if (!appdata_path.empty() && |
| 170 shortcut.find(base::UTF8ToUTF16(appdata_path)) != base::string16::npos) | 171 shortcut.find(base::UTF8ToUTF16(appdata_path)) != base::string16::npos) |
| 171 return LM_SHORTCUT_DESKTOP; | 172 return LM_SHORTCUT_DESKTOP; |
| 172 return LM_SHORTCUT_UNKNOWN; | 173 return LM_SHORTCUT_UNKNOWN; |
| 173 } | 174 } |
| 174 return LM_SHORTCUT_NONE; | 175 return LM_OTHER; |
| 175 } | 176 } |
| 176 #else | 177 #else |
| 177 // TODO(cpu): Port to other platforms. | 178 // TODO(cpu): Port to other platforms. |
| 178 LaunchMode GetLaunchShortcutKind() { | 179 LaunchMode GetLaunchShortcutKind() { |
| 179 return LM_LINUX_MAC_BEOS; | 180 return LM_LINUX_MAC_BEOS; |
| 180 } | 181 } |
| 181 #endif | 182 #endif |
| 182 | 183 |
| 183 // Log in a histogram the frequency of launching by the different methods. See | 184 // Log in a histogram the frequency of launching by the different methods. See |
| 184 // LaunchMode enum for the actual values of the buckets. | 185 // LaunchMode enum for the actual values of the buckets. |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 is_first_run_(is_first_run == chrome::startup::IS_FIRST_RUN), | 334 is_first_run_(is_first_run == chrome::startup::IS_FIRST_RUN), |
| 334 welcome_run_type_(WelcomeRunType::NONE) { | 335 welcome_run_type_(WelcomeRunType::NONE) { |
| 335 } | 336 } |
| 336 | 337 |
| 337 StartupBrowserCreatorImpl::~StartupBrowserCreatorImpl() { | 338 StartupBrowserCreatorImpl::~StartupBrowserCreatorImpl() { |
| 338 } | 339 } |
| 339 | 340 |
| 340 bool StartupBrowserCreatorImpl::Launch(Profile* profile, | 341 bool StartupBrowserCreatorImpl::Launch(Profile* profile, |
| 341 const std::vector<GURL>& urls_to_open, | 342 const std::vector<GURL>& urls_to_open, |
| 342 bool process_startup) { | 343 bool process_startup) { |
| 343 UMA_HISTOGRAM_COUNTS_100("Startup.BrowserLaunchURLCount", | 344 UMA_HISTOGRAM_COUNTS_100( |
| 345 "Startup.BrowserLaunchURLCount", |
| 344 static_cast<base::HistogramBase::Sample>(urls_to_open.size())); | 346 static_cast<base::HistogramBase::Sample>(urls_to_open.size())); |
| 345 RecordRapporOnStartupURLs(urls_to_open); | 347 RecordRapporOnStartupURLs(urls_to_open); |
| 346 | 348 |
| 347 DCHECK(profile); | 349 DCHECK(profile); |
| 348 profile_ = profile; | 350 profile_ = profile; |
| 349 | 351 |
| 350 if (AppListService::HandleLaunchCommandLine(command_line_, profile)) | 352 if (AppListService::HandleLaunchCommandLine(command_line_, profile)) |
| 351 return true; | 353 return true; |
| 352 | 354 |
| 353 if (command_line_.HasSwitch(switches::kAppId)) { | 355 if (command_line_.HasSwitch(switches::kAppId)) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 370 // Open the required browser windows and tabs. First, see if | 372 // Open the required browser windows and tabs. First, see if |
| 371 // we're being run as an application window. If so, the user | 373 // we're being run as an application window. If so, the user |
| 372 // opened an app shortcut. Don't restore tabs or open initial | 374 // opened an app shortcut. Don't restore tabs or open initial |
| 373 // URLs in that case. The user should see the window as an app, | 375 // URLs in that case. The user should see the window as an app, |
| 374 // not as chrome. | 376 // not as chrome. |
| 375 // Special case is when app switches are passed but we do want to restore | 377 // Special case is when app switches are passed but we do want to restore |
| 376 // session. In that case open app window + focus it after session is restored. | 378 // session. In that case open app window + focus it after session is restored. |
| 377 if (OpenApplicationWindow(profile)) { | 379 if (OpenApplicationWindow(profile)) { |
| 378 RecordLaunchModeHistogram(LM_AS_WEBAPP); | 380 RecordLaunchModeHistogram(LM_AS_WEBAPP); |
| 379 } else { | 381 } else { |
| 380 RecordLaunchModeHistogram(urls_to_open.empty() ? | 382 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 381 LM_TO_BE_DECIDED : LM_WITH_URLS); | 383 switches::kTryChromeAgain)) { |
| 384 RecordLaunchModeHistogram(LM_USER_EXPERIMENT); |
| 385 } else { |
| 386 RecordLaunchModeHistogram(urls_to_open.empty() ? LM_TO_BE_DECIDED |
| 387 : LM_WITH_URLS); |
| 388 } |
| 382 | 389 |
| 383 if (StartupBrowserCreator::UseConsolidatedFlow()) | 390 if (StartupBrowserCreator::UseConsolidatedFlow()) |
| 384 ProcessLaunchUrlsUsingConsolidatedFlow(process_startup, urls_to_open); | 391 ProcessLaunchUrlsUsingConsolidatedFlow(process_startup, urls_to_open); |
| 385 else | 392 else |
| 386 ProcessLaunchURLs(process_startup, urls_to_open); | 393 ProcessLaunchURLs(process_startup, urls_to_open); |
| 387 | 394 |
| 388 if (command_line_.HasSwitch(switches::kInstallChromeApp)) { | 395 if (command_line_.HasSwitch(switches::kInstallChromeApp)) { |
| 389 install_chrome_app::InstallChromeApp( | 396 install_chrome_app::InstallChromeApp( |
| 390 command_line_.GetSwitchValueASCII(switches::kInstallChromeApp)); | 397 command_line_.GetSwitchValueASCII(switches::kInstallChromeApp)); |
| 391 } | 398 } |
| (...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1255 #if defined(OS_WIN) | 1262 #if defined(OS_WIN) |
| 1256 TriggeredProfileResetter* triggered_profile_resetter = | 1263 TriggeredProfileResetter* triggered_profile_resetter = |
| 1257 TriggeredProfileResetterFactory::GetForBrowserContext(profile_); | 1264 TriggeredProfileResetterFactory::GetForBrowserContext(profile_); |
| 1258 // TriggeredProfileResetter instance will be nullptr for incognito profiles. | 1265 // TriggeredProfileResetter instance will be nullptr for incognito profiles. |
| 1259 if (triggered_profile_resetter) { | 1266 if (triggered_profile_resetter) { |
| 1260 has_reset_trigger = triggered_profile_resetter->HasResetTrigger(); | 1267 has_reset_trigger = triggered_profile_resetter->HasResetTrigger(); |
| 1261 } | 1268 } |
| 1262 #endif // defined(OS_WIN) | 1269 #endif // defined(OS_WIN) |
| 1263 return has_reset_trigger; | 1270 return has_reset_trigger; |
| 1264 } | 1271 } |
| OLD | NEW |