OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/browser_main.h" | 5 #include "chrome/browser/browser_main.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 #include "chrome/browser/rlz/rlz.h" | 114 #include "chrome/browser/rlz/rlz.h" |
115 #include "chrome/browser/views/user_data_dir_dialog.h" | 115 #include "chrome/browser/views/user_data_dir_dialog.h" |
116 #include "chrome/common/env_vars.h" | 116 #include "chrome/common/env_vars.h" |
117 #include "chrome/common/sandbox_policy.h" | 117 #include "chrome/common/sandbox_policy.h" |
118 #include "chrome/installer/util/helper.h" | 118 #include "chrome/installer/util/helper.h" |
119 #include "chrome/installer/util/install_util.h" | 119 #include "chrome/installer/util/install_util.h" |
120 #include "chrome/installer/util/shell_util.h" | 120 #include "chrome/installer/util/shell_util.h" |
121 #include "chrome/installer/util/version.h" | 121 #include "chrome/installer/util/version.h" |
122 #include "net/base/net_util.h" | 122 #include "net/base/net_util.h" |
123 #include "net/base/sdch_manager.h" | 123 #include "net/base/sdch_manager.h" |
124 #include "net/socket/ssl_client_socket_nss_factory.h" | |
125 #include "printing/printed_document.h" | 124 #include "printing/printed_document.h" |
126 #include "sandbox/src/sandbox.h" | 125 #include "sandbox/src/sandbox.h" |
127 #endif // defined(OS_WIN) | 126 #endif // defined(OS_WIN) |
128 | 127 |
129 #if defined(OS_MACOSX) | 128 #if defined(OS_MACOSX) |
130 #include <Security/Security.h> | 129 #include <Security/Security.h> |
131 #include "chrome/browser/cocoa/install_from_dmg.h" | 130 #include "chrome/browser/cocoa/install_from_dmg.h" |
132 #include "net/socket/ssl_client_socket_mac_factory.h" | |
133 #endif | |
134 | |
135 #if defined(OS_MACOSX) || defined(OS_WIN) | |
136 #include "base/nss_util.h" | |
137 #endif | 131 #endif |
138 | 132 |
139 #if defined(TOOLKIT_VIEWS) | 133 #if defined(TOOLKIT_VIEWS) |
140 #include "chrome/browser/views/chrome_views_delegate.h" | 134 #include "chrome/browser/views/chrome_views_delegate.h" |
141 #include "views/focus/accelerator_handler.h" | 135 #include "views/focus/accelerator_handler.h" |
142 #endif | 136 #endif |
143 | 137 |
144 #if defined(OS_CHROMEOS) | 138 #if defined(OS_CHROMEOS) |
145 #include "chrome/browser/chromeos/cros/cros_library.h" | 139 #include "chrome/browser/chromeos/cros/cros_library.h" |
146 #include "chrome/browser/chromeos/cros/screen_lock_library.h" | 140 #include "chrome/browser/chromeos/cros/screen_lock_library.h" |
(...skipping 15 matching lines...) Expand all Loading... |
162 } | 156 } |
163 | 157 |
164 // BrowserMainParts: |EarlyInitialization()| and related ----------------------- | 158 // BrowserMainParts: |EarlyInitialization()| and related ----------------------- |
165 | 159 |
166 void BrowserMainParts::EarlyInitialization() { | 160 void BrowserMainParts::EarlyInitialization() { |
167 PreEarlyInitialization(); | 161 PreEarlyInitialization(); |
168 | 162 |
169 ConnectionFieldTrial(); | 163 ConnectionFieldTrial(); |
170 SocketTimeoutFieldTrial(); | 164 SocketTimeoutFieldTrial(); |
171 SpdyFieldTrial(); | 165 SpdyFieldTrial(); |
172 InitializeSSL(); // TODO(viettrungluu): move to platform-specific method(s) | 166 InitializeSSL(); |
173 | 167 |
174 PostEarlyInitialization(); | 168 PostEarlyInitialization(); |
175 } | 169 } |
176 | 170 |
177 // This is an A/B test for the maximum number of persistent connections per | 171 // This is an A/B test for the maximum number of persistent connections per |
178 // host. Currently Chrome, Firefox, and IE8 have this value set at 6. Safari | 172 // host. Currently Chrome, Firefox, and IE8 have this value set at 6. Safari |
179 // uses 4, and Fasterfox (a plugin for Firefox that supposedly configures it to | 173 // uses 4, and Fasterfox (a plugin for Firefox that supposedly configures it to |
180 // run faster) uses 8. We would like to see how much of an effect this value has | 174 // run faster) uses 8. We would like to see how much of an effect this value has |
181 // on browsing. Too large a value might cause us to run into SYN flood detection | 175 // on browsing. Too large a value might cause us to run into SYN flood detection |
182 // mechanisms. | 176 // mechanisms. |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 net::HttpNetworkLayer::EnableSpdy("npn-http"); | 299 net::HttpNetworkLayer::EnableSpdy("npn-http"); |
306 } else if (trial_grp == npn_spdy_grp) { | 300 } else if (trial_grp == npn_spdy_grp) { |
307 is_spdy_trial = true; | 301 is_spdy_trial = true; |
308 net::HttpNetworkLayer::EnableSpdy("npn"); | 302 net::HttpNetworkLayer::EnableSpdy("npn"); |
309 } else { | 303 } else { |
310 CHECK(!is_spdy_trial); | 304 CHECK(!is_spdy_trial); |
311 } | 305 } |
312 } | 306 } |
313 } | 307 } |
314 | 308 |
315 // TODO(viettrungluu): move to platform-specific methods | |
316 void BrowserMainParts::InitializeSSL() { | |
317 // Use NSS for SSL by default. | |
318 #if defined(OS_MACOSX) | |
319 // The default client socket factory uses NSS for SSL by default on Mac. | |
320 if (parsed_command_line().HasSwitch(switches::kUseSystemSSL)) { | |
321 net::ClientSocketFactory::SetSSLClientSocketFactory( | |
322 net::SSLClientSocketMacFactory); | |
323 } else { | |
324 // We want to be sure to init NSPR on the main thread. | |
325 base::EnsureNSPRInit(); | |
326 } | |
327 #elif defined(OS_WIN) | |
328 // Because of a build system issue (http://crbug.com/43461), the default | |
329 // client socket factory uses SChannel (the system SSL library) for SSL by | |
330 // default on Windows. | |
331 if (!parsed_command_line().HasSwitch(switches::kUseSystemSSL)) { | |
332 net::ClientSocketFactory::SetSSLClientSocketFactory( | |
333 net::SSLClientSocketNSSFactory); | |
334 // We want to be sure to init NSPR on the main thread. | |
335 base::EnsureNSPRInit(); | |
336 } | |
337 #endif | |
338 } | |
339 | |
340 // BrowserMainParts: |MainMessageLoopStart()| and related ---------------------- | 309 // BrowserMainParts: |MainMessageLoopStart()| and related ---------------------- |
341 | 310 |
342 void BrowserMainParts::MainMessageLoopStart() { | 311 void BrowserMainParts::MainMessageLoopStart() { |
343 PreMainMessageLoopStart(); | 312 PreMainMessageLoopStart(); |
344 | 313 |
345 main_message_loop_.reset(new MessageLoop(MessageLoop::TYPE_UI)); | 314 main_message_loop_.reset(new MessageLoop(MessageLoop::TYPE_UI)); |
346 | 315 |
347 // TODO(viettrungluu): should these really go before setting the thread name? | 316 // TODO(viettrungluu): should these really go before setting the thread name? |
348 system_monitor_.reset(new SystemMonitor); | 317 system_monitor_.reset(new SystemMonitor); |
349 hi_res_timer_manager_.reset(new HighResolutionTimerManager); | 318 hi_res_timer_manager_.reset(new HighResolutionTimerManager); |
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 scoped_ptr<BrowserMainParts> | 685 scoped_ptr<BrowserMainParts> |
717 parts(BrowserMainParts::CreateBrowserMainParts(parameters)); | 686 parts(BrowserMainParts::CreateBrowserMainParts(parameters)); |
718 | 687 |
719 parts->EarlyInitialization(); | 688 parts->EarlyInitialization(); |
720 parts->MainMessageLoopStart(); | 689 parts->MainMessageLoopStart(); |
721 | 690 |
722 // WARNING: If we get a WM_ENDSESSION, objects created on the stack here | 691 // WARNING: If we get a WM_ENDSESSION, objects created on the stack here |
723 // are NOT deleted. If you need something to run during WM_ENDSESSION add it | 692 // are NOT deleted. If you need something to run during WM_ENDSESSION add it |
724 // to browser_shutdown::Shutdown or BrowserProcess::EndSession. | 693 // to browser_shutdown::Shutdown or BrowserProcess::EndSession. |
725 | 694 |
726 // TODO(beng, brettw): someday, break this out into sub functions with well | 695 // !!!!!!!!!! READ ME !!!!!!!!!! |
727 // defined roles (e.g. pre/post-profile startup, etc). | 696 // I (viettrungluu) am in the process of refactoring |BrowserMain()|. If you |
| 697 // need to add something above this comment, read the documentation in |
| 698 // browser_main.h. If you need to add something below, please do the |
| 699 // following: |
| 700 // - Figure out where you should add your code. Do NOT just pick a random |
| 701 // location "which works". |
| 702 // - Document the dependencies apart from compile-time-checkable ones. What |
| 703 // must happen before your new code is executed? Does your new code need to |
| 704 // run before something else? Are there performance reasons for executing |
| 705 // your code at that point? |
| 706 // - If you need to create a (persistent) object, heap allocate it and keep a |
| 707 // |scoped_ptr| to it rather than allocating it on the stack. Otherwise |
| 708 // I'll have to convert your code when I refactor. |
| 709 // - Unless your new code is just a couple of lines, factor it out into a |
| 710 // function with a well-defined purpose. Do NOT just add it inline in |
| 711 // |BrowserMain()|. |
| 712 // Thanks! |
728 | 713 |
729 // TODO(viettrungluu): put the remainder into BrowserMainParts | 714 // TODO(viettrungluu): put the remainder into BrowserMainParts |
730 const CommandLine& parsed_command_line = parameters.command_line_; | 715 const CommandLine& parsed_command_line = parameters.command_line_; |
731 base::ScopedNSAutoreleasePool* pool = parameters.autorelease_pool_; | 716 base::ScopedNSAutoreleasePool* pool = parameters.autorelease_pool_; |
732 | 717 |
733 FilePath user_data_dir; | 718 FilePath user_data_dir; |
734 #if defined(OS_WIN) | 719 #if defined(OS_WIN) |
735 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); | 720 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); |
736 #else | 721 #else |
737 // Getting the user data dir can fail if the directory isn't | 722 // Getting the user data dir can fail if the directory isn't |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1280 | 1265 |
1281 metrics->Stop(); | 1266 metrics->Stop(); |
1282 | 1267 |
1283 // browser_shutdown takes care of deleting browser_process, so we need to | 1268 // browser_shutdown takes care of deleting browser_process, so we need to |
1284 // release it. | 1269 // release it. |
1285 ignore_result(browser_process.release()); | 1270 ignore_result(browser_process.release()); |
1286 browser_shutdown::Shutdown(); | 1271 browser_shutdown::Shutdown(); |
1287 | 1272 |
1288 return result_code; | 1273 return result_code; |
1289 } | 1274 } |
OLD | NEW |