Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(275)

Side by Side Diff: content/browser/browser_main.cc

Issue 8302016: Make GTK and Aura parts orthogonal to OS parts (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compile errors Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "content/browser/browser_main.h" 5 #include "content/browser/browser_main.h"
6 6
7 #include "base/allocator/allocator_shim.h" 7 #include "base/allocator/allocator_shim.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 GLibLogHandler, 160 GLibLogHandler,
161 NULL); 161 NULL);
162 } 162 }
163 } 163 }
164 #endif 164 #endif
165 165
166 } // namespace 166 } // namespace
167 167
168 namespace content { 168 namespace content {
169 169
170 // BrowserParts
171
172 BrowserParts::~BrowserParts() {
173 }
174
175 void BrowserParts::PreEarlyInitialization() {
176 }
177
178 void BrowserParts::PostEarlyInitialization() {
179 }
180
181 void BrowserParts::PreMainMessageLoopStart() {
182 }
183
184 void BrowserParts::PostMainMessageLoopStart() {
185 }
186
187 void BrowserParts::PreMainMessageLoopRun() {
188 }
189
190 void BrowserParts::PostMainMessageLoopRun() {
191 }
192
193 // BrowserMainParts
194
170 BrowserMainParts::BrowserMainParts(const MainFunctionParams& parameters) 195 BrowserMainParts::BrowserMainParts(const MainFunctionParams& parameters)
171 : parameters_(parameters), 196 : parameters_(parameters),
172 parsed_command_line_(parameters.command_line_), 197 parsed_command_line_(parameters.command_line_),
173 result_code_(content::RESULT_CODE_NORMAL_EXIT) { 198 result_code_(content::RESULT_CODE_NORMAL_EXIT) {
174 #if defined(OS_WIN) 199 #if defined(OS_WIN)
175 OleInitialize(NULL); 200 OleInitialize(NULL);
176 #endif 201 #endif
177 } 202 }
178 203
179 BrowserMainParts::~BrowserMainParts() { 204 BrowserMainParts::~BrowserMainParts() {
205 // Destroy added parts in reverse order.
206 for (PartsList::reverse_iterator riter = added_parts_.rbegin();
207 riter != added_parts_.rend(); ++riter) {
208 delete *riter;
209 }
210 added_parts_.clear();
211
180 #if defined(OS_WIN) 212 #if defined(OS_WIN)
181 OleUninitialize(); 213 OleUninitialize();
182 #endif 214 #endif
183 } 215 }
184 216
217 void BrowserMainParts::AddParts(BrowserParts* parts) {
218 added_parts_.push_back(parts);
219 }
220
185 void BrowserMainParts::EarlyInitialization() { 221 void BrowserMainParts::EarlyInitialization() {
186 PreEarlyInitialization(); 222 PreEarlyInitialization();
223 for (PartsList::iterator iter = added_parts_.begin();
224 iter != added_parts_.end(); ++iter) {
225 (*iter)->PreEarlyInitialization();
226 }
227
228 // Start watching for jank during shutdown. It gets disarmed when
187 229
188 #if defined(OS_WIN) 230 #if defined(OS_WIN)
189 net::EnsureWinsockInit(); 231 net::EnsureWinsockInit();
190 #endif 232 #endif
191 233
192 // Use NSS for SSL by default. 234 // Use NSS for SSL by default.
193 // The default client socket factory uses NSS for SSL by default on 235 // The default client socket factory uses NSS for SSL by default on
194 // Windows and Mac. 236 // Windows and Mac.
195 #if defined(OS_WIN) || defined(OS_MACOSX) 237 #if defined(OS_WIN) || defined(OS_MACOSX)
196 if (parsed_command_line().HasSwitch(switches::kUseSystemSSL)) { 238 if (parsed_command_line().HasSwitch(switches::kUseSystemSSL)) {
(...skipping 22 matching lines...) Expand all
219 switches::kEnableDNSCertProvenanceChecking)) { 261 switches::kEnableDNSCertProvenanceChecking)) {
220 net::SSLConfigService::EnableDNSCertProvenanceChecking(); 262 net::SSLConfigService::EnableDNSCertProvenanceChecking();
221 } 263 }
222 264
223 // TODO(abarth): Should this move to InitializeNetworkOptions? This doesn't 265 // TODO(abarth): Should this move to InitializeNetworkOptions? This doesn't
224 // seem dependent on SSL initialization(). 266 // seem dependent on SSL initialization().
225 if (parsed_command_line().HasSwitch(switches::kEnableTcpFastOpen)) 267 if (parsed_command_line().HasSwitch(switches::kEnableTcpFastOpen))
226 net::set_tcp_fastopen_enabled(true); 268 net::set_tcp_fastopen_enabled(true);
227 269
228 PostEarlyInitialization(); 270 PostEarlyInitialization();
271 for (PartsList::iterator iter = added_parts_.begin();
272 iter != added_parts_.end(); ++iter) {
273 (*iter)->PostEarlyInitialization();
274 }
229 } 275 }
230 276
231 void BrowserMainParts::MainMessageLoopStart() { 277 void BrowserMainParts::MainMessageLoopStart() {
232 PreMainMessageLoopStart(); 278 PreMainMessageLoopStart();
279 for (PartsList::iterator iter = added_parts_.begin();
280 iter != added_parts_.end(); ++iter) {
281 (*iter)->PreMainMessageLoopStart();
282 }
233 283
234 #if defined(OS_WIN) 284 #if defined(OS_WIN)
235 // If we're running tests (ui_task is non-null), then the ResourceBundle 285 // If we're running tests (ui_task is non-null), then the ResourceBundle
236 // has already been initialized. 286 // has already been initialized.
237 if (!parameters().ui_task) { 287 if (!parameters().ui_task) {
238 // Override the configured locale with the user's preferred UI language. 288 // Override the configured locale with the user's preferred UI language.
239 l10n_util::OverrideLocaleWithUILanguageList(); 289 l10n_util::OverrideLocaleWithUILanguageList();
240 } 290 }
241 #endif 291 #endif
242 292
243 main_message_loop_.reset(new MessageLoop(MessageLoop::TYPE_UI)); 293 main_message_loop_.reset(new MessageLoop(MessageLoop::TYPE_UI));
244 294
245 InitializeMainThread(); 295 InitializeMainThread();
246 296
247 system_monitor_.reset(new base::SystemMonitor); 297 system_monitor_.reset(new base::SystemMonitor);
248 hi_res_timer_manager_.reset(new HighResolutionTimerManager); 298 hi_res_timer_manager_.reset(new HighResolutionTimerManager);
249 299
250 network_change_notifier_.reset(net::NetworkChangeNotifier::Create()); 300 network_change_notifier_.reset(net::NetworkChangeNotifier::Create());
251 301
252 PostMainMessageLoopStart(); 302 PostMainMessageLoopStart();
303 for (PartsList::iterator iter = added_parts_.begin();
304 iter != added_parts_.end(); ++iter) {
305 (*iter)->PostMainMessageLoopStart();
306 }
253 } 307 }
254 308
255 static bool g_exited_main_message_loop = false; 309 static bool g_exited_main_message_loop = false;
256 310
257 void BrowserMainParts::RunMainMessageLoopParts() { 311 void BrowserMainParts::RunMainMessageLoopParts() {
258 PreMainMessageLoopRun(); 312 PreMainMessageLoopRun();
313 for (PartsList::iterator iter = added_parts_.begin();
314 iter != added_parts_.end(); ++iter) {
315 (*iter)->PreMainMessageLoopRun();
316 }
259 317
260 TRACE_EVENT_BEGIN_ETW("BrowserMain:MESSAGE_LOOP", 0, ""); 318 TRACE_EVENT_BEGIN_ETW("BrowserMain:MESSAGE_LOOP", 0, "");
261 // If the UI thread blocks, the whole UI is unresponsive. 319 // If the UI thread blocks, the whole UI is unresponsive.
262 // Do not allow disk IO from the UI thread. 320 // Do not allow disk IO from the UI thread.
263 base::ThreadRestrictions::SetIOAllowed(false); 321 base::ThreadRestrictions::SetIOAllowed(false);
264 MainMessageLoopRun(); 322 MainMessageLoopRun();
265 TRACE_EVENT_END_ETW("BrowserMain:MESSAGE_LOOP", 0, ""); 323 TRACE_EVENT_END_ETW("BrowserMain:MESSAGE_LOOP", 0, "");
266 324
267 g_exited_main_message_loop = true; 325 g_exited_main_message_loop = true;
268 326
269 PostMainMessageLoopRun(); 327 PostMainMessageLoopRun();
328 for (PartsList::iterator iter = added_parts_.begin();
329 iter != added_parts_.end(); ++iter) {
330 (*iter)->PostMainMessageLoopRun();
331 }
270 } 332 }
271 333
272 void BrowserMainParts::InitializeMainThread() { 334 void BrowserMainParts::InitializeMainThread() {
273 const char* kThreadName = "CrBrowserMain"; 335 const char* kThreadName = "CrBrowserMain";
274 base::PlatformThread::SetName(kThreadName); 336 base::PlatformThread::SetName(kThreadName);
275 main_message_loop().set_thread_name(kThreadName); 337 main_message_loop().set_thread_name(kThreadName);
276 338
277 #if defined(TRACK_ALL_TASK_OBJECTS) 339 #if defined(TRACK_ALL_TASK_OBJECTS)
278 tracked_objects::ThreadData::InitializeThreadContext(kThreadName); 340 tracked_objects::ThreadData::InitializeThreadContext(kThreadName);
279 #endif // TRACK_ALL_TASK_OBJECTS 341 #endif // TRACK_ALL_TASK_OBJECTS
280 342
281 // Register the main thread by instantiating it, but don't call any methods. 343 // Register the main thread by instantiating it, but don't call any methods.
282 main_thread_.reset(new BrowserThread(BrowserThread::UI, 344 main_thread_.reset(new BrowserThread(BrowserThread::UI,
283 MessageLoop::current())); 345 MessageLoop::current()));
284 } 346 }
285 347
286 void BrowserMainParts::InitializeToolkit() { 348 void BrowserMainParts::InitializeToolkit() {
287 // TODO(evan): this function is rather subtle, due to the variety 349 // TODO(evan): this function is rather subtle, due to the variety
288 // of intersecting ifdefs we have. To keep it easy to follow, there 350 // of intersecting ifdefs we have. To keep it easy to follow, there
289 // are no #else branches on any #ifs. 351 // are no #else branches on any #ifs.
290 352 // TODO(stevenjb): Move platform specific code into platform specific Parts
353 // (Need to add InitializeToolkit stage to BrowserParts).
291 #if defined(OS_LINUX) 354 #if defined(OS_LINUX)
292 // We want to call g_thread_init(), but in some codepaths (tests) it 355 // We want to call g_thread_init(), but in some codepaths (tests) it
293 // is possible it has already been called. In older versions of 356 // is possible it has already been called. In older versions of
294 // GTK, it is an error to call g_thread_init twice; unfortunately, 357 // GTK, it is an error to call g_thread_init twice; unfortunately,
295 // the API to tell whether it has been called already was also only 358 // the API to tell whether it has been called already was also only
296 // added in a newer version of GTK! Thankfully, this non-intuitive 359 // added in a newer version of GTK! Thankfully, this non-intuitive
297 // check is actually equivalent and sufficient to work around the 360 // check is actually equivalent and sufficient to work around the
298 // error. 361 // error.
299 if (!g_thread_supported()) 362 if (!g_thread_supported())
300 g_thread_init(NULL); 363 g_thread_init(NULL);
(...skipping 25 matching lines...) Expand all
326 INITCOMMONCONTROLSEX config; 389 INITCOMMONCONTROLSEX config;
327 config.dwSize = sizeof(config); 390 config.dwSize = sizeof(config);
328 config.dwICC = ICC_WIN95_CLASSES; 391 config.dwICC = ICC_WIN95_CLASSES;
329 if (!InitCommonControlsEx(&config)) 392 if (!InitCommonControlsEx(&config))
330 LOG_GETLASTERROR(FATAL); 393 LOG_GETLASTERROR(FATAL);
331 #endif 394 #endif
332 395
333 ToolkitInitialized(); 396 ToolkitInitialized();
334 } 397 }
335 398
336 void BrowserMainParts::PreEarlyInitialization() { 399 // BrowserMainParts implementation
337 }
338
339 void BrowserMainParts::PostEarlyInitialization() {
340 }
341
342 void BrowserMainParts::PreMainMessageLoopStart() {
343 }
344
345 void BrowserMainParts::PostMainMessageLoopStart() {
346 }
347
348 void BrowserMainParts::PreMainMessageLoopRun() {
349 }
350 400
351 void BrowserMainParts::MainMessageLoopRun() { 401 void BrowserMainParts::MainMessageLoopRun() {
352 if (parameters().ui_task) 402 if (parameters().ui_task)
353 MessageLoopForUI::current()->PostTask(FROM_HERE, parameters().ui_task); 403 MessageLoopForUI::current()->PostTask(FROM_HERE, parameters().ui_task);
354 404
355 #if defined(OS_MACOSX) 405 #if defined(OS_MACOSX)
356 MessageLoopForUI::current()->Run(); 406 MessageLoopForUI::current()->Run();
357 #else 407 #else
358 MessageLoopForUI::current()->Run(NULL); 408 MessageLoopForUI::current()->Run(NULL);
359 #endif 409 #endif
360 } 410 }
361 411
362 void BrowserMainParts::PostMainMessageLoopRun() {
363 }
364
365 void BrowserMainParts::ToolkitInitialized() { 412 void BrowserMainParts::ToolkitInitialized() {
366 } 413 }
367 414
368 bool ExitedMainMessageLoop() { 415 bool ExitedMainMessageLoop() {
369 return g_exited_main_message_loop; 416 return g_exited_main_message_loop;
370 } 417 }
371 418
372 } // namespace content 419 } // namespace content
373 420
374 // Main routine for running as the Browser process. 421 // Main routine for running as the Browser process.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 base::win::ScopedCOMInitializer com_initializer; 479 base::win::ScopedCOMInitializer com_initializer;
433 #endif // OS_WIN 480 #endif // OS_WIN
434 481
435 base::StatisticsRecorder statistics; 482 base::StatisticsRecorder statistics;
436 483
437 parts->RunMainMessageLoopParts(); 484 parts->RunMainMessageLoopParts();
438 485
439 TRACE_EVENT_END_ETW("BrowserMain", 0, 0); 486 TRACE_EVENT_END_ETW("BrowserMain", 0, 0);
440 return parts->result_code(); 487 return parts->result_code();
441 } 488 }
OLDNEW
« content/browser/browser_main.h ('K') | « content/browser/browser_main.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698