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

Side by Side Diff: chrome/browser/chrome_browser_main.cc

Issue 8414020: Expose the sandbox related code through the content API. I did a bit of cleanup while I was doing... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month 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 "chrome/browser/chrome_browser_main.h" 5 #include "chrome/browser/chrome_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
11 #include "base/at_exit.h" 11 #include "base/at_exit.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/debug/trace_event.h" 14 #include "base/debug/trace_event.h"
15 #include "base/file_path.h" 15 #include "base/file_path.h"
16 #include "base/file_util.h" 16 #include "base/file_util.h"
17 #include "base/mac/scoped_nsautorelease_pool.h"
18 #include "base/metrics/field_trial.h" 17 #include "base/metrics/field_trial.h"
19 #include "base/metrics/histogram.h" 18 #include "base/metrics/histogram.h"
20 #include "base/path_service.h" 19 #include "base/path_service.h"
21 #include "base/process_util.h" 20 #include "base/process_util.h"
22 #include "base/string_number_conversions.h" 21 #include "base/string_number_conversions.h"
23 #include "base/string_piece.h" 22 #include "base/string_piece.h"
24 #include "base/string_split.h" 23 #include "base/string_split.h"
25 #include "base/string_util.h" 24 #include "base/string_util.h"
26 #include "base/sys_string_conversions.h" 25 #include "base/sys_string_conversions.h"
27 #include "base/threading/platform_thread.h" 26 #include "base/threading/platform_thread.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 #include "content/browser/user_metrics.h" 167 #include "content/browser/user_metrics.h"
169 #include "net/base/net_util.h" 168 #include "net/base/net_util.h"
170 #include "printing/printed_document.h" 169 #include "printing/printed_document.h"
171 #include "ui/base/l10n/l10n_util_win.h" 170 #include "ui/base/l10n/l10n_util_win.h"
172 #include "ui/gfx/platform_font_win.h" 171 #include "ui/gfx/platform_font_win.h"
173 #endif // defined(OS_WIN) 172 #endif // defined(OS_WIN)
174 173
175 #if defined(OS_MACOSX) 174 #if defined(OS_MACOSX)
176 #include <Security/Security.h> 175 #include <Security/Security.h>
177 176
177 #include "base/mac/scoped_nsautorelease_pool.h"
178 #include "chrome/browser/mac/install_from_dmg.h" 178 #include "chrome/browser/mac/install_from_dmg.h"
179 #include "chrome/browser/mac/keystone_glue.h" 179 #include "chrome/browser/mac/keystone_glue.h"
180 #endif 180 #endif
181 181
182 #if defined(TOOLKIT_VIEWS) 182 #if defined(TOOLKIT_VIEWS)
183 #include "chrome/browser/ui/views/chrome_views_delegate.h" 183 #include "chrome/browser/ui/views/chrome_views_delegate.h"
184 #include "views/desktop/desktop_window_view.h" 184 #include "views/desktop/desktop_window_view.h"
185 #include "views/focus/accelerator_handler.h" 185 #include "views/focus/accelerator_handler.h"
186 #include "views/widget/widget.h" 186 #include "views/widget/widget.h"
187 #if defined(TOOLKIT_USES_GTK) 187 #if defined(TOOLKIT_USES_GTK)
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 // tests the resources need to be reused as many places in the UI cache 444 // tests the resources need to be reused as many places in the UI cache
445 // SkBitmaps from the ResourceBundle. 445 // SkBitmaps from the ResourceBundle.
446 ResourceBundle::CleanupSharedInstance(); 446 ResourceBundle::CleanupSharedInstance();
447 } 447 }
448 448
449 if (!new_user_data_dir.empty()) { 449 if (!new_user_data_dir.empty()) {
450 // Because of the way CommandLine parses, it's sufficient to append a new 450 // Because of the way CommandLine parses, it's sufficient to append a new
451 // --user-data-dir switch. The last flag of the same name wins. 451 // --user-data-dir switch. The last flag of the same name wins.
452 // TODO(tc): It would be nice to remove the flag we don't want, but that 452 // TODO(tc): It would be nice to remove the flag we don't want, but that
453 // sounds risky if we parse differently than CommandLineToArgvW. 453 // sounds risky if we parse differently than CommandLineToArgvW.
454 CommandLine new_command_line = parameters.command_line_; 454 CommandLine new_command_line = parameters.command_line;
455 new_command_line.AppendSwitchPath(switches::kUserDataDir, 455 new_command_line.AppendSwitchPath(switches::kUserDataDir,
456 new_user_data_dir); 456 new_user_data_dir);
457 base::LaunchProcess(new_command_line, base::LaunchOptions(), NULL); 457 base::LaunchProcess(new_command_line, base::LaunchOptions(), NULL);
458 } 458 }
459 #endif 459 #endif
460 #else 460 #else
461 // TODO(port): fix this. See comments near the definition of 461 // TODO(port): fix this. See comments near the definition of
462 // user_data_dir. It is better to CHECK-fail here than it is to 462 // user_data_dir. It is better to CHECK-fail here than it is to
463 // silently exit because of missing code in the above test. 463 // silently exit because of missing code in the above test.
464 CHECK(profile) << "Cannot get default profile."; 464 CHECK(profile) << "Cannot get default profile.";
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 const char kMissingLocaleDataTitle[] = "Missing File Error"; 675 const char kMissingLocaleDataTitle[] = "Missing File Error";
676 const char kMissingLocaleDataMessage[] = 676 const char kMissingLocaleDataMessage[] =
677 "Unable to find locale data files. Please reinstall."; 677 "Unable to find locale data files. Please reinstall.";
678 } // namespace chrome_browser 678 } // namespace chrome_browser
679 679
680 // BrowserMainParts ------------------------------------------------------------ 680 // BrowserMainParts ------------------------------------------------------------
681 681
682 ChromeBrowserMainParts::ChromeBrowserMainParts( 682 ChromeBrowserMainParts::ChromeBrowserMainParts(
683 const MainFunctionParams& parameters) 683 const MainFunctionParams& parameters)
684 : parameters_(parameters), 684 : parameters_(parameters),
685 parsed_command_line_(parameters.command_line_), 685 parsed_command_line_(parameters.command_line),
686 result_code_(content::RESULT_CODE_NORMAL_EXIT), 686 result_code_(content::RESULT_CODE_NORMAL_EXIT),
687 shutdown_watcher_(new ShutdownWatcherHelper()), 687 shutdown_watcher_(new ShutdownWatcherHelper()),
688 record_search_engine_(false), 688 record_search_engine_(false),
689 translate_manager_(NULL), 689 translate_manager_(NULL),
690 profile_(NULL), 690 profile_(NULL),
691 run_message_loop_(true), 691 run_message_loop_(true),
692 notify_result_(ProcessSingleton::PROCESS_NONE) { 692 notify_result_(ProcessSingleton::PROCESS_NONE) {
693 // If we're running tests (ui_task is non-null). 693 // If we're running tests (ui_task is non-null).
694 if (parameters.ui_task) 694 if (parameters.ui_task)
695 browser_defaults::enable_help_app = false; 695 browser_defaults::enable_help_app = false;
(...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after
1655 #if defined(OS_MACOSX) 1655 #if defined(OS_MACOSX)
1656 if (!parsed_command_line().HasSwitch(switches::kNoFirstRun)) { 1656 if (!parsed_command_line().HasSwitch(switches::kNoFirstRun)) {
1657 // Disk image installation is sort of a first-run task, so it shares the 1657 // Disk image installation is sort of a first-run task, so it shares the
1658 // kNoFirstRun switch. 1658 // kNoFirstRun switch.
1659 if (MaybeInstallFromDiskImage()) { 1659 if (MaybeInstallFromDiskImage()) {
1660 // The application was installed and the installed copy has been 1660 // The application was installed and the installed copy has been
1661 // launched. This process is now obsolete. Exit. 1661 // launched. This process is now obsolete. Exit.
1662 return content::RESULT_CODE_NORMAL_EXIT; 1662 return content::RESULT_CODE_NORMAL_EXIT;
1663 } 1663 }
1664 } 1664 }
1665 base::mac::ScopedNSAutoreleasePool* pool = parameters().autorelease_pool;
1665 #endif 1666 #endif
1666 1667
1667 // Show the First Run UI if this is the first time Chrome has been run on 1668 // Show the First Run UI if this is the first time Chrome has been run on
1668 // this computer, or we're being compelled to do so by a command line flag. 1669 // this computer, or we're being compelled to do so by a command line flag.
1669 // Note that this be done _after_ the PrefService is initialized and all 1670 // Note that this be done _after_ the PrefService is initialized and all
1670 // preferences are registered, since some of the code that the importer 1671 // preferences are registered, since some of the code that the importer
1671 // touches reads preferences. 1672 // touches reads preferences.
1672 if (is_first_run) { 1673 if (is_first_run) {
1673 if (!first_run_ui_bypass) { 1674 if (!first_run_ui_bypass) {
1674 FirstRun::AutoImport(profile_, 1675 FirstRun::AutoImport(profile_,
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1878 // Initialize GpuDataManager and collect preliminary gpu info on FILE thread. 1879 // Initialize GpuDataManager and collect preliminary gpu info on FILE thread.
1879 // Upon completion, it posts GpuBlacklist auto update task on UI thread. 1880 // Upon completion, it posts GpuBlacklist auto update task on UI thread.
1880 BrowserThread::PostTask( 1881 BrowserThread::PostTask(
1881 BrowserThread::FILE, FROM_HERE, 1882 BrowserThread::FILE, FROM_HERE,
1882 base::Bind(&GpuBlacklistUpdater::SetupOnFileThread)); 1883 base::Bind(&GpuBlacklistUpdater::SetupOnFileThread));
1883 1884
1884 // Start watching all browser threads for responsiveness. 1885 // Start watching all browser threads for responsiveness.
1885 ThreadWatcherList::StartWatchingAll(parsed_command_line()); 1886 ThreadWatcherList::StartWatchingAll(parsed_command_line());
1886 1887
1887 int result_code = content::RESULT_CODE_NORMAL_EXIT; 1888 int result_code = content::RESULT_CODE_NORMAL_EXIT;
1888 base::mac::ScopedNSAutoreleasePool* pool = parameters().autorelease_pool_;
1889 if (parameters().ui_task) { 1889 if (parameters().ui_task) {
1890 // We are in test mode. Run one task and enter the main message loop. 1890 // We are in test mode. Run one task and enter the main message loop.
1891 #if defined(OS_MACOSX)
1891 if (pool) 1892 if (pool)
1892 pool->Recycle(); 1893 pool->Recycle();
1894 #endif
1893 parameters().ui_task->Run(); 1895 parameters().ui_task->Run();
1894 delete parameters().ui_task; 1896 delete parameters().ui_task;
1895 } else { 1897 } else {
1896 // Most general initialization is behind us, but opening a 1898 // Most general initialization is behind us, but opening a
1897 // tab and/or session restore and such is still to be done. 1899 // tab and/or session restore and such is still to be done.
1898 base::TimeTicks browser_open_start = base::TimeTicks::Now(); 1900 base::TimeTicks browser_open_start = base::TimeTicks::Now();
1899 1901
1900 // We are in regular browser boot sequence. Open initial tabs and enter the 1902 // We are in regular browser boot sequence. Open initial tabs and enter the
1901 // main message loop. 1903 // main message loop.
1902 if (browser_init.Start(parsed_command_line(), FilePath(), profile_, 1904 if (browser_init.Start(parsed_command_line(), FilePath(), profile_,
1903 &result_code)) { 1905 &result_code)) {
1904 #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) 1906 #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
1905 // Initialize autoupdate timer. Timer callback costs basically nothing 1907 // Initialize autoupdate timer. Timer callback costs basically nothing
1906 // when browser is not in persistent mode, so it's OK to let it ride on 1908 // when browser is not in persistent mode, so it's OK to let it ride on
1907 // the main thread. This needs to be done here because we don't want 1909 // the main thread. This needs to be done here because we don't want
1908 // to start the timer when Chrome is run inside a test harness. 1910 // to start the timer when Chrome is run inside a test harness.
1909 g_browser_process->StartAutoupdateTimer(); 1911 g_browser_process->StartAutoupdateTimer();
1910 #endif 1912 #endif
1911 1913
1912 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 1914 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
1913 // On Linux, the running exe will be updated if an upgrade becomes 1915 // On Linux, the running exe will be updated if an upgrade becomes
1914 // available while the browser is running. We need to save the last 1916 // available while the browser is running. We need to save the last
1915 // modified time of the exe, so we can compare to determine if there is 1917 // modified time of the exe, so we can compare to determine if there is
1916 // an upgrade while the browser is kept alive by a persistent extension. 1918 // an upgrade while the browser is kept alive by a persistent extension.
1917 upgrade_util::SaveLastModifiedTimeOfExe(); 1919 upgrade_util::SaveLastModifiedTimeOfExe();
1918 #endif 1920 #endif
1919 1921
1920 // Record now as the last successful chrome start. 1922 // Record now as the last successful chrome start.
1921 GoogleUpdateSettings::SetLastRunTime(); 1923 GoogleUpdateSettings::SetLastRunTime();
1924
1925 #if defined(OS_MACOSX)
1922 // Call Recycle() here as late as possible, before going into the loop 1926 // Call Recycle() here as late as possible, before going into the loop
1923 // because Start() will add things to it while creating the main window. 1927 // because Start() will add things to it while creating the main window.
1924 if (pool) 1928 if (pool)
1925 pool->Recycle(); 1929 pool->Recycle();
1930 #endif
1926 1931
1927 RecordPreReadExperimentTime("Startup.BrowserOpenTabs", 1932 RecordPreReadExperimentTime("Startup.BrowserOpenTabs",
1928 base::TimeTicks::Now() - browser_open_start); 1933 base::TimeTicks::Now() - browser_open_start);
1929 1934
1930 // TODO(mad): Move this call in a proper place on CrOS. 1935 // TODO(mad): Move this call in a proper place on CrOS.
1931 // http://crosbug.com/17687 1936 // http://crosbug.com/17687
1932 #if !defined(OS_CHROMEOS) 1937 #if !defined(OS_CHROMEOS)
1933 // If we're running tests (ui_task is non-null), then we don't want to 1938 // If we're running tests (ui_task is non-null), then we don't want to
1934 // call FetchLanguageListFromTranslateServer 1939 // call FetchLanguageListFromTranslateServer
1935 if (parameters().ui_task == NULL && translate_manager_ != NULL) { 1940 if (parameters().ui_task == NULL && translate_manager_ != NULL) {
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
2077 } 2082 }
2078 2083
2079 void ChromeBrowserMainParts::ToolkitInitialized() { 2084 void ChromeBrowserMainParts::ToolkitInitialized() {
2080 #if defined(TOOLKIT_VIEWS) 2085 #if defined(TOOLKIT_VIEWS)
2081 // The delegate needs to be set before any UI is created so that windows 2086 // The delegate needs to be set before any UI is created so that windows
2082 // display the correct icon. 2087 // display the correct icon.
2083 if (!views::ViewsDelegate::views_delegate) 2088 if (!views::ViewsDelegate::views_delegate)
2084 views::ViewsDelegate::views_delegate = new ChromeViewsDelegate; 2089 views::ViewsDelegate::views_delegate = new ChromeViewsDelegate;
2085 2090
2086 // TODO(beng): Move to WidgetImpl and implement on Windows too! 2091 // TODO(beng): Move to WidgetImpl and implement on Windows too!
2087 if (parameters().command_line_.HasSwitch(switches::kDebugViewsPaint)) 2092 if (parameters().command_line.HasSwitch(switches::kDebugViewsPaint))
2088 views::Widget::SetDebugPaintEnabled(true); 2093 views::Widget::SetDebugPaintEnabled(true);
2089 #endif 2094 #endif
2090 2095
2091 #if defined(OS_WIN) 2096 #if defined(OS_WIN)
2092 gfx::PlatformFontWin::adjust_font_callback = &AdjustUIFont; 2097 gfx::PlatformFontWin::adjust_font_callback = &AdjustUIFont;
2093 gfx::PlatformFontWin::get_minimum_font_size_callback = &GetMinimumFontSize; 2098 gfx::PlatformFontWin::get_minimum_font_size_callback = &GetMinimumFontSize;
2094 #endif 2099 #endif
2095 } 2100 }
2096 2101
2097 // This code is specific to the Windows-only PreReadExperiment field-trial. 2102 // This code is specific to the Windows-only PreReadExperiment field-trial.
(...skipping 16 matching lines...) Expand all
2114 if (env->GetVar(chrome::kPreReadEnvironmentVariable, &pre_read) && 2119 if (env->GetVar(chrome::kPreReadEnvironmentVariable, &pre_read) &&
2115 (pre_read == "0" || pre_read == "1")) { 2120 (pre_read == "0" || pre_read == "1")) {
2116 std::string uma_name(name); 2121 std::string uma_name(name);
2117 uma_name += "_PreRead"; 2122 uma_name += "_PreRead";
2118 uma_name += pre_read == "1" ? "Enabled" : "Disabled"; 2123 uma_name += pre_read == "1" ? "Enabled" : "Disabled";
2119 AddPreReadHistogramTime(uma_name.c_str(), time); 2124 AddPreReadHistogramTime(uma_name.c_str(), time);
2120 } 2125 }
2121 #endif 2126 #endif
2122 #endif 2127 #endif
2123 } 2128 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698