| 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/app/chrome_main_delegate.h" | 5 #include "chrome/app/chrome_main_delegate.h" |
| 6 | 6 |
| 7 #include "base/base_paths.h" | 7 #include "base/base_paths.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/cpu.h" | 9 #include "base/cpu.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 #include "chrome/common/chrome_version_info.h" | 28 #include "chrome/common/chrome_version_info.h" |
| 29 #include "chrome/common/crash_keys.h" | 29 #include "chrome/common/crash_keys.h" |
| 30 #include "chrome/common/logging_chrome.h" | 30 #include "chrome/common/logging_chrome.h" |
| 31 #include "chrome/common/profiling.h" | 31 #include "chrome/common/profiling.h" |
| 32 #include "chrome/common/switch_utils.h" | 32 #include "chrome/common/switch_utils.h" |
| 33 #include "chrome/common/url_constants.h" | 33 #include "chrome/common/url_constants.h" |
| 34 #include "chrome/plugin/chrome_content_plugin_client.h" | 34 #include "chrome/plugin/chrome_content_plugin_client.h" |
| 35 #include "chrome/renderer/chrome_content_renderer_client.h" | 35 #include "chrome/renderer/chrome_content_renderer_client.h" |
| 36 #include "chrome/utility/chrome_content_utility_client.h" | 36 #include "chrome/utility/chrome_content_utility_client.h" |
| 37 #include "components/component_updater/component_updater_paths.h" | 37 #include "components/component_updater/component_updater_paths.h" |
| 38 #include "components/nacl/common/nacl_switches.h" | |
| 39 #include "components/startup_metric_utils/startup_metric_utils.h" | 38 #include "components/startup_metric_utils/startup_metric_utils.h" |
| 40 #include "content/public/common/content_client.h" | 39 #include "content/public/common/content_client.h" |
| 41 #include "content/public/common/content_paths.h" | 40 #include "content/public/common/content_paths.h" |
| 42 #include "ui/base/ui_base_switches.h" | 41 #include "ui/base/ui_base_switches.h" |
| 43 | 42 |
| 44 #if defined(OS_WIN) | 43 #if defined(OS_WIN) |
| 45 #include <atlbase.h> | 44 #include <atlbase.h> |
| 46 #include <malloc.h> | 45 #include <malloc.h> |
| 47 #include <algorithm> | 46 #include <algorithm> |
| 48 #include "base/strings/string_util.h" | 47 #include "base/strings/string_util.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 #endif | 101 #endif |
| 103 | 102 |
| 104 #if defined(OS_LINUX) | 103 #if defined(OS_LINUX) |
| 105 #include "base/environment.h" | 104 #include "base/environment.h" |
| 106 #endif | 105 #endif |
| 107 | 106 |
| 108 #if defined(OS_MACOSX) || defined(OS_WIN) | 107 #if defined(OS_MACOSX) || defined(OS_WIN) |
| 109 #include "chrome/browser/policy/policy_path_parser.h" | 108 #include "chrome/browser/policy/policy_path_parser.h" |
| 110 #endif | 109 #endif |
| 111 | 110 |
| 111 #if !defined(DISABLE_NACL) |
| 112 #include "components/nacl/common/nacl_switches.h" |
| 113 #endif |
| 114 |
| 112 #if !defined(CHROME_MULTIPLE_DLL_CHILD) | 115 #if !defined(CHROME_MULTIPLE_DLL_CHILD) |
| 113 base::LazyInstance<chrome::ChromeContentBrowserClient> | 116 base::LazyInstance<chrome::ChromeContentBrowserClient> |
| 114 g_chrome_content_browser_client = LAZY_INSTANCE_INITIALIZER; | 117 g_chrome_content_browser_client = LAZY_INSTANCE_INITIALIZER; |
| 115 #endif | 118 #endif |
| 116 | 119 |
| 117 #if !defined(CHROME_MULTIPLE_DLL_BROWSER) | 120 #if !defined(CHROME_MULTIPLE_DLL_BROWSER) |
| 118 base::LazyInstance<ChromeContentRendererClient> | 121 base::LazyInstance<ChromeContentRendererClient> |
| 119 g_chrome_content_renderer_client = LAZY_INSTANCE_INITIALIZER; | 122 g_chrome_content_renderer_client = LAZY_INSTANCE_INITIALIZER; |
| 120 base::LazyInstance<ChromeContentUtilityClient> | 123 base::LazyInstance<ChromeContentUtilityClient> |
| 121 g_chrome_content_utility_client = LAZY_INSTANCE_INITIALIZER; | 124 g_chrome_content_utility_client = LAZY_INSTANCE_INITIALIZER; |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 // Needed for scrollbar related images. | 230 // Needed for scrollbar related images. |
| 228 process_type == switches::kWorkerProcess || | 231 process_type == switches::kWorkerProcess || |
| 229 #endif | 232 #endif |
| 230 #if defined(OS_POSIX) && !defined(OS_MACOSX) | 233 #if defined(OS_POSIX) && !defined(OS_MACOSX) |
| 231 // The zygote process opens the resources for the renderers. | 234 // The zygote process opens the resources for the renderers. |
| 232 process_type == switches::kZygoteProcess || | 235 process_type == switches::kZygoteProcess || |
| 233 #endif | 236 #endif |
| 234 #if defined(OS_MACOSX) | 237 #if defined(OS_MACOSX) |
| 235 // Mac needs them too for scrollbar related images and for sandbox | 238 // Mac needs them too for scrollbar related images and for sandbox |
| 236 // profiles. | 239 // profiles. |
| 240 #if !defined(DISABLE_NACL) |
| 237 process_type == switches::kNaClLoaderProcess || | 241 process_type == switches::kNaClLoaderProcess || |
| 242 #endif |
| 238 process_type == switches::kPpapiPluginProcess || | 243 process_type == switches::kPpapiPluginProcess || |
| 239 process_type == switches::kPpapiBrokerProcess || | 244 process_type == switches::kPpapiBrokerProcess || |
| 240 process_type == switches::kGpuProcess || | 245 process_type == switches::kGpuProcess || |
| 241 #endif | 246 #endif |
| 242 process_type == switches::kRendererProcess || | 247 process_type == switches::kRendererProcess || |
| 243 process_type == switches::kUtilityProcess; | 248 process_type == switches::kUtilityProcess; |
| 244 } | 249 } |
| 245 | 250 |
| 246 #if defined(OS_POSIX) | 251 #if defined(OS_POSIX) |
| 247 // Check for --version and --product-version; return true if we encountered | 252 // Check for --version and --product-version; return true if we encountered |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 std::string last_three = | 596 std::string last_three = |
| 592 executable.value().substr(executable.value().size() - 3); | 597 executable.value().substr(executable.value().size() - 3); |
| 593 | 598 |
| 594 if (last_three == " EH") { | 599 if (last_three == " EH") { |
| 595 CHECK(process_type == switches::kPluginProcess || | 600 CHECK(process_type == switches::kPluginProcess || |
| 596 process_type == switches::kUtilityProcess) | 601 process_type == switches::kUtilityProcess) |
| 597 << "Executable-heap process requires --type=" | 602 << "Executable-heap process requires --type=" |
| 598 << switches::kPluginProcess << " or " | 603 << switches::kPluginProcess << " or " |
| 599 << switches::kUtilityProcess << ", saw " << process_type; | 604 << switches::kUtilityProcess << ", saw " << process_type; |
| 600 } else if (last_three == " NP") { | 605 } else if (last_three == " NP") { |
| 606 #if !defined(DISABLE_NACL) |
| 601 CHECK_EQ(switches::kNaClLoaderProcess, process_type) | 607 CHECK_EQ(switches::kNaClLoaderProcess, process_type) |
| 602 << "Non-PIE process requires --type=" | 608 << "Non-PIE process requires --type=" |
| 603 << switches::kNaClLoaderProcess << ", saw " << process_type; | 609 << switches::kNaClLoaderProcess << ", saw " << process_type; |
| 610 #endif |
| 604 } else { | 611 } else { |
| 612 #if defined(DISABLE_NACL) |
| 613 CHECK(process_type != switches::kPluginProcess) |
| 614 << "Non-executable-heap PIE process is intolerant of --type=" |
| 615 << switches::kPluginProcess; |
| 616 #else |
| 605 CHECK(process_type != switches::kPluginProcess && | 617 CHECK(process_type != switches::kPluginProcess && |
| 606 process_type != switches::kNaClLoaderProcess) | 618 process_type != switches::kNaClLoaderProcess) |
| 607 << "Non-executable-heap PIE process is intolerant of --type=" | 619 << "Non-executable-heap PIE process is intolerant of --type=" |
| 608 << switches::kPluginProcess << " and " | 620 << switches::kPluginProcess << " and " |
| 609 << switches::kNaClLoaderProcess << ", saw " << process_type; | 621 << switches::kNaClLoaderProcess << ", saw " << process_type; |
| 622 #endif |
| 610 } | 623 } |
| 611 } | 624 } |
| 612 } else { | 625 } else { |
| 613 CHECK(!command_line.HasSwitch(switches::kProcessType) && | 626 CHECK(!command_line.HasSwitch(switches::kProcessType) && |
| 614 process_type.empty()) | 627 process_type.empty()) |
| 615 << "Main application forbids --type, saw " << process_type; | 628 << "Main application forbids --type, saw " << process_type; |
| 616 } | 629 } |
| 617 | 630 |
| 618 if (breakpad::IsCrashReporterEnabled()) | 631 if (breakpad::IsCrashReporterEnabled()) |
| 619 breakpad::InitCrashProcessInfo(process_type); | 632 breakpad::InitCrashProcessInfo(process_type); |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 logging::CleanupChromeLogging(); | 835 logging::CleanupChromeLogging(); |
| 823 #else | 836 #else |
| 824 // Android doesn't use InitChromeLogging, so we close the log file manually. | 837 // Android doesn't use InitChromeLogging, so we close the log file manually. |
| 825 logging::CloseLogFile(); | 838 logging::CloseLogFile(); |
| 826 #endif // !defined(OS_ANDROID) | 839 #endif // !defined(OS_ANDROID) |
| 827 } | 840 } |
| 828 | 841 |
| 829 #if defined(OS_MACOSX) | 842 #if defined(OS_MACOSX) |
| 830 bool ChromeMainDelegate::ProcessRegistersWithSystemProcess( | 843 bool ChromeMainDelegate::ProcessRegistersWithSystemProcess( |
| 831 const std::string& process_type) { | 844 const std::string& process_type) { |
| 845 #if defined(DISABLE_NACL) |
| 846 return false; |
| 847 #else |
| 832 return process_type == switches::kNaClLoaderProcess; | 848 return process_type == switches::kNaClLoaderProcess; |
| 849 #endif |
| 833 } | 850 } |
| 834 | 851 |
| 835 bool ChromeMainDelegate::ShouldSendMachPort(const std::string& process_type) { | 852 bool ChromeMainDelegate::ShouldSendMachPort(const std::string& process_type) { |
| 836 return process_type != switches::kRelauncherProcess && | 853 return process_type != switches::kRelauncherProcess && |
| 837 process_type != switches::kServiceProcess; | 854 process_type != switches::kServiceProcess; |
| 838 } | 855 } |
| 839 | 856 |
| 840 bool ChromeMainDelegate::DelaySandboxInitialization( | 857 bool ChromeMainDelegate::DelaySandboxInitialization( |
| 841 const std::string& process_type) { | 858 const std::string& process_type) { |
| 859 #if !defined(DISABLE_NACL) |
| 842 // NaClLoader does this in NaClMainPlatformDelegate::EnableSandbox(). | 860 // NaClLoader does this in NaClMainPlatformDelegate::EnableSandbox(). |
| 843 // No sandbox needed for relauncher. | 861 // No sandbox needed for relauncher. |
| 844 return process_type == switches::kNaClLoaderProcess || | 862 if (process_type == switches::kNaClLoaderProcess) |
| 845 process_type == switches::kRelauncherProcess; | 863 return true; |
| 864 #endif |
| 865 return process_type == switches::kRelauncherProcess; |
| 846 } | 866 } |
| 847 #elif defined(OS_POSIX) && !defined(OS_ANDROID) | 867 #elif defined(OS_POSIX) && !defined(OS_ANDROID) |
| 848 void ChromeMainDelegate::ZygoteStarting( | 868 void ChromeMainDelegate::ZygoteStarting( |
| 849 ScopedVector<content::ZygoteForkDelegate>* delegates) { | 869 ScopedVector<content::ZygoteForkDelegate>* delegates) { |
| 850 #if !defined(DISABLE_NACL) | 870 #if !defined(DISABLE_NACL) |
| 851 nacl::AddNaClZygoteForkDelegates(delegates); | 871 nacl::AddNaClZygoteForkDelegates(delegates); |
| 852 #endif | 872 #endif |
| 853 } | 873 } |
| 854 | 874 |
| 855 void ChromeMainDelegate::ZygoteForked() { | 875 void ChromeMainDelegate::ZygoteForked() { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 899 } | 919 } |
| 900 | 920 |
| 901 content::ContentUtilityClient* | 921 content::ContentUtilityClient* |
| 902 ChromeMainDelegate::CreateContentUtilityClient() { | 922 ChromeMainDelegate::CreateContentUtilityClient() { |
| 903 #if defined(CHROME_MULTIPLE_DLL_BROWSER) | 923 #if defined(CHROME_MULTIPLE_DLL_BROWSER) |
| 904 return NULL; | 924 return NULL; |
| 905 #else | 925 #else |
| 906 return g_chrome_content_utility_client.Pointer(); | 926 return g_chrome_content_utility_client.Pointer(); |
| 907 #endif | 927 #endif |
| 908 } | 928 } |
| OLD | NEW |