| 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 "content/public/app/content_main_runner.h" | 5 #include "content/public/app/content_main_runner.h" |
| 6 | 6 |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 | 8 |
| 9 #include "base/allocator/allocator_extension.h" | 9 #include "base/allocator/allocator_extension.h" |
| 10 #include "base/at_exit.h" | 10 #include "base/at_exit.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 #include "ipc/ipc_switches.h" | 46 #include "ipc/ipc_switches.h" |
| 47 #include "media/base/media.h" | 47 #include "media/base/media.h" |
| 48 #include "sandbox/win/src/sandbox_types.h" | 48 #include "sandbox/win/src/sandbox_types.h" |
| 49 #include "ui/base/ui_base_paths.h" | 49 #include "ui/base/ui_base_paths.h" |
| 50 #include "ui/base/ui_base_switches.h" | 50 #include "ui/base/ui_base_switches.h" |
| 51 | 51 |
| 52 #ifdef V8_USE_EXTERNAL_STARTUP_DATA | 52 #ifdef V8_USE_EXTERNAL_STARTUP_DATA |
| 53 #include "gin/public/isolate_holder.h" | 53 #include "gin/public/isolate_holder.h" |
| 54 #endif | 54 #endif |
| 55 | 55 |
| 56 #if defined(OS_ANDROID) | |
| 57 #include "content/public/common/content_descriptors.h" | |
| 58 #endif | |
| 59 | |
| 60 #if defined(USE_TCMALLOC) | 56 #if defined(USE_TCMALLOC) |
| 61 #include "third_party/tcmalloc/chromium/src/gperftools/malloc_extension.h" | 57 #include "third_party/tcmalloc/chromium/src/gperftools/malloc_extension.h" |
| 62 #if defined(TYPE_PROFILING) | 58 #if defined(TYPE_PROFILING) |
| 63 #include "base/allocator/type_profiler.h" | 59 #include "base/allocator/type_profiler.h" |
| 64 #include "base/allocator/type_profiler_tcmalloc.h" | 60 #include "base/allocator/type_profiler_tcmalloc.h" |
| 65 #endif | 61 #endif |
| 66 #endif | 62 #endif |
| 67 | 63 |
| 68 #if !defined(OS_IOS) | 64 #if !defined(OS_IOS) |
| 69 #include "content/app/mojo/mojo_init.h" | 65 #include "content/app/mojo/mojo_init.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 91 #endif // !OS_IOS | 87 #endif // !OS_IOS |
| 92 #endif // OS_WIN | 88 #endif // OS_WIN |
| 93 | 89 |
| 94 #if defined(OS_POSIX) | 90 #if defined(OS_POSIX) |
| 95 #include <signal.h> | 91 #include <signal.h> |
| 96 | 92 |
| 97 #include "base/posix/global_descriptors.h" | 93 #include "base/posix/global_descriptors.h" |
| 98 #include "content/public/common/content_descriptors.h" | 94 #include "content/public/common/content_descriptors.h" |
| 99 | 95 |
| 100 #if !defined(OS_MACOSX) | 96 #if !defined(OS_MACOSX) |
| 97 #include "content/public/common/content_descriptors.h" |
| 101 #include "content/public/common/zygote_fork_delegate_linux.h" | 98 #include "content/public/common/zygote_fork_delegate_linux.h" |
| 102 #endif | 99 #endif |
| 103 #if !defined(OS_MACOSX) && !defined(OS_ANDROID) | 100 #if !defined(OS_MACOSX) && !defined(OS_ANDROID) |
| 104 #include "content/zygote/zygote_main.h" | 101 #include "content/zygote/zygote_main.h" |
| 105 #endif | 102 #endif |
| 106 | 103 |
| 107 #endif // OS_POSIX | 104 #endif // OS_POSIX |
| 108 | 105 |
| 109 #if !defined(OS_MACOSX) && defined(USE_TCMALLOC) | 106 #if !defined(OS_MACOSX) && defined(USE_TCMALLOC) |
| 110 extern "C" { | 107 extern "C" { |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 // needs to be enabled. | 488 // needs to be enabled. |
| 492 const char* profiling = getenv(tracked_objects::kAlternateProfilerTime); | 489 const char* profiling = getenv(tracked_objects::kAlternateProfilerTime); |
| 493 if (profiling && | 490 if (profiling && |
| 494 (atoi(profiling) == tracked_objects::TIME_SOURCE_TYPE_TCMALLOC)) { | 491 (atoi(profiling) == tracked_objects::TIME_SOURCE_TYPE_TCMALLOC)) { |
| 495 tracked_objects::SetAlternateTimeSource( | 492 tracked_objects::SetAlternateTimeSource( |
| 496 MallocExtension::GetBytesAllocatedOnCurrentThread, | 493 MallocExtension::GetBytesAllocatedOnCurrentThread, |
| 497 tracked_objects::TIME_SOURCE_TYPE_TCMALLOC); | 494 tracked_objects::TIME_SOURCE_TYPE_TCMALLOC); |
| 498 } | 495 } |
| 499 #endif // !OS_MACOSX && USE_TCMALLOC | 496 #endif // !OS_MACOSX && USE_TCMALLOC |
| 500 | 497 |
| 498 #if !defined(OS_IOS) |
| 499 base::GlobalDescriptors* g_fds = base::GlobalDescriptors::GetInstance(); |
| 500 #endif |
| 501 |
| 501 // On Android, | 502 // On Android, |
| 502 // - setlocale() is not supported. | 503 // - setlocale() is not supported. |
| 503 // - We do not override the signal handlers so that we can get | 504 // - We do not override the signal handlers so that we can get |
| 504 // stack trace when crashing. | 505 // stack trace when crashing. |
| 505 // - The ipc_fd is passed through the Java service. | 506 // - The ipc_fd is passed through the Java service. |
| 506 // Thus, these are all disabled. | 507 // Thus, these are all disabled. |
| 507 #if !defined(OS_ANDROID) && !defined(OS_IOS) | 508 #if !defined(OS_ANDROID) && !defined(OS_IOS) |
| 508 // Set C library locale to make sure CommandLine can parse argument values | 509 // Set C library locale to make sure CommandLine can parse argument values |
| 509 // in correct encoding. | 510 // in correct encoding. |
| 510 setlocale(LC_ALL, ""); | 511 setlocale(LC_ALL, ""); |
| 511 | 512 |
| 512 SetupSignalHandlers(); | 513 SetupSignalHandlers(); |
| 513 | |
| 514 base::GlobalDescriptors* g_fds = base::GlobalDescriptors::GetInstance(); | |
| 515 g_fds->Set(kPrimaryIPCChannel, | 514 g_fds->Set(kPrimaryIPCChannel, |
| 516 kPrimaryIPCChannel + base::GlobalDescriptors::kBaseDescriptor); | 515 kPrimaryIPCChannel + base::GlobalDescriptors::kBaseDescriptor); |
| 517 #endif // !OS_ANDROID && !OS_IOS | 516 #endif // !OS_ANDROID && !OS_IOS |
| 518 | 517 |
| 519 #if defined(OS_LINUX) || defined(OS_OPENBSD) | 518 #if defined(OS_LINUX) || defined(OS_OPENBSD) |
| 520 g_fds->Set(kCrashDumpSignal, | 519 g_fds->Set(kCrashDumpSignal, |
| 521 kCrashDumpSignal + base::GlobalDescriptors::kBaseDescriptor); | 520 kCrashDumpSignal + base::GlobalDescriptors::kBaseDescriptor); |
| 522 #endif | 521 #endif // OS_LINUX || OS_OPENBSD |
| 522 |
| 523 | 523 |
| 524 #endif // !OS_WIN | 524 #endif // !OS_WIN |
| 525 | 525 |
| 526 is_initialized_ = true; | 526 is_initialized_ = true; |
| 527 delegate_ = params.delegate; | 527 delegate_ = params.delegate; |
| 528 | 528 |
| 529 // The exit manager is in charge of calling the dtors of singleton objects. | 529 // The exit manager is in charge of calling the dtors of singleton objects. |
| 530 // On Android, AtExitManager is set up when library is loaded. | 530 // On Android, AtExitManager is set up when library is loaded. |
| 531 // On iOS, it's set up in main(), which can't call directly through to here. | 531 // On iOS, it's set up in main(), which can't call directly through to here. |
| 532 // A consequence of this is that you can't use the ctor/dtor-based | 532 // A consequence of this is that you can't use the ctor/dtor-based |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 672 | 672 |
| 673 #if defined(USE_NSS) | 673 #if defined(USE_NSS) |
| 674 crypto::EarlySetupForNSSInit(); | 674 crypto::EarlySetupForNSSInit(); |
| 675 #endif | 675 #endif |
| 676 | 676 |
| 677 ui::RegisterPathProvider(); | 677 ui::RegisterPathProvider(); |
| 678 RegisterPathProvider(); | 678 RegisterPathProvider(); |
| 679 RegisterContentSchemes(true); | 679 RegisterContentSchemes(true); |
| 680 | 680 |
| 681 #if defined(OS_ANDROID) | 681 #if defined(OS_ANDROID) |
| 682 int icudata_fd = base::GlobalDescriptors::GetInstance()->MaybeGet( | 682 int icudata_fd = g_fds->MaybeGet(kAndroidICUDataDescriptor); |
| 683 kAndroidICUDataDescriptor); | |
| 684 if (icudata_fd != -1) { | 683 if (icudata_fd != -1) { |
| 685 auto icudata_region = base::GlobalDescriptors::GetInstance()->GetRegion( | 684 auto icudata_region = g_fds->GetRegion(kAndroidICUDataDescriptor); |
| 686 kAndroidICUDataDescriptor); | |
| 687 CHECK(base::i18n::InitializeICUWithFileDescriptor(icudata_fd, | 685 CHECK(base::i18n::InitializeICUWithFileDescriptor(icudata_fd, |
| 688 icudata_region)); | 686 icudata_region)); |
| 689 } else { | 687 } else { |
| 690 CHECK(base::i18n::InitializeICU()); | 688 CHECK(base::i18n::InitializeICU()); |
| 691 } | 689 } |
| 690 #else |
| 691 CHECK(base::i18n::InitializeICU()); |
| 692 #endif // OS_ANDROID |
| 692 | 693 |
| 693 #if defined(V8_USE_EXTERNAL_STARTUP_DATA) | 694 #if defined(V8_USE_EXTERNAL_STARTUP_DATA) |
| 694 int v8_natives_fd = base::GlobalDescriptors::GetInstance()->MaybeGet( | 695 #if defined(OS_POSIX) && !defined(OS_MACOSX) |
| 695 kV8NativesDataDescriptor); | 696 #if !defined(OS_ANDROID) |
| 696 int v8_snapshot_fd = base::GlobalDescriptors::GetInstance()->MaybeGet( | 697 // kV8NativesDataDescriptor and kV8SnapshotDataDescriptor are shared with |
| 697 kV8SnapshotDataDescriptor); | 698 // child processes. On Android they are set in |
| 699 // ChildProcessService::InternalInitChildProcess, otherwise set them here. |
| 700 if (!process_type.empty() && process_type != switches::kZygoteProcess) { |
| 701 g_fds->Set( |
| 702 kV8NativesDataDescriptor, |
| 703 kV8NativesDataDescriptor + base::GlobalDescriptors::kBaseDescriptor); |
| 704 g_fds->Set( |
| 705 kV8SnapshotDataDescriptor, |
| 706 kV8SnapshotDataDescriptor + base::GlobalDescriptors::kBaseDescriptor); |
| 707 } |
| 708 #endif // !OS_ANDROID |
| 709 int v8_natives_fd = g_fds->MaybeGet(kV8NativesDataDescriptor); |
| 710 int v8_snapshot_fd = g_fds->MaybeGet(kV8SnapshotDataDescriptor); |
| 698 if (v8_natives_fd != -1 && v8_snapshot_fd != -1) { | 711 if (v8_natives_fd != -1 && v8_snapshot_fd != -1) { |
| 699 auto v8_natives_region = | 712 auto v8_natives_region = g_fds->GetRegion(kV8NativesDataDescriptor); |
| 700 base::GlobalDescriptors::GetInstance()->GetRegion( | 713 auto v8_snapshot_region = g_fds->GetRegion(kV8SnapshotDataDescriptor); |
| 701 kV8NativesDataDescriptor); | |
| 702 auto v8_snapshot_region = | |
| 703 base::GlobalDescriptors::GetInstance()->GetRegion( | |
| 704 kV8SnapshotDataDescriptor); | |
| 705 CHECK(gin::IsolateHolder::LoadV8SnapshotFd( | 714 CHECK(gin::IsolateHolder::LoadV8SnapshotFd( |
| 706 v8_natives_fd, v8_natives_region.offset, v8_natives_region.size, | 715 v8_natives_fd, v8_natives_region.offset, v8_natives_region.size, |
| 707 v8_snapshot_fd, v8_snapshot_region.offset, v8_snapshot_region.size)); | 716 v8_snapshot_fd, v8_snapshot_region.offset, v8_snapshot_region.size)); |
| 708 } else { | 717 } else { |
| 709 CHECK(gin::IsolateHolder::LoadV8Snapshot()); | 718 CHECK(gin::IsolateHolder::LoadV8Snapshot()); |
| 710 } | 719 } |
| 711 #endif // V8_USE_EXTERNAL_STARTUP_DATA | |
| 712 | |
| 713 #else | 720 #else |
| 714 CHECK(base::i18n::InitializeICU()); | |
| 715 #if defined(V8_USE_EXTERNAL_STARTUP_DATA) | |
| 716 CHECK(gin::IsolateHolder::LoadV8Snapshot()); | 721 CHECK(gin::IsolateHolder::LoadV8Snapshot()); |
| 722 #endif // OS_POSIX && !OS_MACOSX |
| 717 #endif // V8_USE_EXTERNAL_STARTUP_DATA | 723 #endif // V8_USE_EXTERNAL_STARTUP_DATA |
| 718 #endif // OS_ANDROID | |
| 719 | 724 |
| 720 if (delegate_) | 725 if (delegate_) |
| 721 delegate_->PreSandboxStartup(); | 726 delegate_->PreSandboxStartup(); |
| 722 | 727 |
| 723 if (!process_type.empty()) | 728 if (!process_type.empty()) |
| 724 CommonSubprocessInit(process_type); | 729 CommonSubprocessInit(process_type); |
| 725 | 730 |
| 726 #if defined(OS_WIN) | 731 #if defined(OS_WIN) |
| 727 CHECK(InitializeSandbox(params.sandbox_info)); | 732 CHECK(InitializeSandbox(params.sandbox_info)); |
| 728 #elif defined(OS_MACOSX) && !defined(OS_IOS) | 733 #elif defined(OS_MACOSX) && !defined(OS_IOS) |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 | 827 |
| 823 DISALLOW_COPY_AND_ASSIGN(ContentMainRunnerImpl); | 828 DISALLOW_COPY_AND_ASSIGN(ContentMainRunnerImpl); |
| 824 }; | 829 }; |
| 825 | 830 |
| 826 // static | 831 // static |
| 827 ContentMainRunner* ContentMainRunner::Create() { | 832 ContentMainRunner* ContentMainRunner::Create() { |
| 828 return new ContentMainRunnerImpl(); | 833 return new ContentMainRunnerImpl(); |
| 829 } | 834 } |
| 830 | 835 |
| 831 } // namespace content | 836 } // namespace content |
| OLD | NEW |