1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROME_BROWSER_MAIN_H_
#define CHROME_BROWSER_CHROME_BROWSER_MAIN_H_
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "base/metrics/field_trial.h"
#include "base/tracked_objects.h"
#include "chrome/browser/chrome_browser_field_trials.h"
#include "chrome/browser/chrome_process_singleton.h"
#include "chrome/browser/first_run/first_run.h"
#include "chrome/browser/process_singleton.h"
#include "chrome/browser/task_profiler/auto_tracking.h"
#include "chrome/browser/ui/startup/startup_browser_creator.h"
#include "content/public/browser/browser_main_parts.h"
#include "content/public/common/main_function_params.h"
class BrowserProcessImpl;
class ChromeBrowserMainExtraParts;
class FieldTrialSynchronizer;
class MetricsService;
class PrefService;
class ProcessPowerCollector;
class Profile;
class StartupBrowserCreator;
class StartupTimeBomb;
class ShutdownWatcherHelper;
class ThreeDAPIObserver;
namespace chrome_browser {
// For use by ShowMissingLocaleMessageBox.
#if defined(OS_WIN)
extern const char kMissingLocaleDataTitle[];
#endif
#if defined(OS_WIN)
extern const char kMissingLocaleDataMessage[];
#endif
}
namespace metrics {
class TrackingSynchronizer;
}
class ChromeBrowserMainParts : public content::BrowserMainParts {
public:
~ChromeBrowserMainParts() override;
// Add additional ChromeBrowserMainExtraParts.
virtual void AddParts(ChromeBrowserMainExtraParts* parts);
protected:
explicit ChromeBrowserMainParts(
const content::MainFunctionParams& parameters);
// content::BrowserMainParts overrides.
// These are called in-order by content::BrowserMainLoop.
// Each stage calls the same stages in any ChromeBrowserMainExtraParts added
// with AddParts() from ChromeContentBrowserClient::CreateBrowserMainParts.
void PreEarlyInitialization() override;
void PostEarlyInitialization() override;
void ToolkitInitialized() override;
void PreMainMessageLoopStart() override;
void PostMainMessageLoopStart() override;
int PreCreateThreads() override;
void PreMainMessageLoopRun() override;
bool MainMessageLoopRun(int* result_code) override;
void PostMainMessageLoopRun() override;
void PostDestroyThreads() override;
// Additional stages for ChromeBrowserMainExtraParts. These stages are called
// in order from PreMainMessageLoopRun(). See implementation for details.
virtual void PreProfileInit();
virtual void PostProfileInit();
virtual void PreBrowserStart();
virtual void PostBrowserStart();
// Displays a warning message that we can't find any locale data files.
virtual void ShowMissingLocaleMessageBox() = 0;
const content::MainFunctionParams& parameters() const {
return parameters_;
}
const base::CommandLine& parsed_command_line() const {
return parsed_command_line_;
}
Profile* profile() { return profile_; }
const PrefService* local_state() const { return local_state_; }
private:
// Methods for |SetupMetricsAndFieldTrials()| --------------------------------
// Constructs metrics service and does related initialization, including
// creation of field trials. Call only after labs have been converted to
// switches.
void SetupMetricsAndFieldTrials();
// Starts recording of metrics. This can only be called after we have a file
// thread.
void StartMetricsRecording();
// Record time from process startup to present time in an UMA histogram.
void RecordBrowserStartupTime();
// Records a time value to an UMA histogram in the context of the
// PreReadExperiment field-trial. This also reports to the appropriate
// sub-histogram (_PreRead(Enabled|Disabled)).
void RecordPreReadExperimentTime(const char* name, base::TimeDelta time);
// Methods for Main Message Loop -------------------------------------------
int PreCreateThreadsImpl();
int PreMainMessageLoopRunImpl();
// Members initialized on construction ---------------------------------------
const content::MainFunctionParams parameters_;
const base::CommandLine& parsed_command_line_;
int result_code_;
// Create StartupTimeBomb object for watching jank during startup.
scoped_ptr<StartupTimeBomb> startup_watcher_;
// Create ShutdownWatcherHelper object for watching jank during shutdown.
// Please keep |shutdown_watcher| as the first object constructed, and hence
// it is destroyed last.
scoped_ptr<ShutdownWatcherHelper> shutdown_watcher_;
// Creating this object starts tracking the creation and deletion of Task
// instance. This MUST be done before main_message_loop, so that it is
// destroyed after the main_message_loop.
task_profiler::AutoTracking tracking_objects_;
// Statistical testing infrastructure for the entire browser. NULL until
// SetupMetricsAndFieldTrials is called.
scoped_ptr<base::FieldTrialList> field_trial_list_;
ChromeBrowserFieldTrials browser_field_trials_;
#if !defined(OS_ANDROID) && !defined(OS_IOS)
// A monitor for attributing power consumption to origins.
scoped_ptr<ProcessPowerCollector> process_power_collector_;
#endif
// Vector of additional ChromeBrowserMainExtraParts.
// Parts are deleted in the inverse order they are added.
std::vector<ChromeBrowserMainExtraParts*> chrome_extra_parts_;
// Members initialized after / released before main_message_loop_ ------------
scoped_ptr<BrowserProcessImpl> browser_process_;
scoped_refptr<metrics::TrackingSynchronizer> tracking_synchronizer_;
#if !defined(OS_ANDROID)
// Browser creation happens on the Java side in Android.
scoped_ptr<StartupBrowserCreator> browser_creator_;
// Android doesn't support multiple browser processes, so it doesn't implement
// ProcessSingleton.
scoped_ptr<ChromeProcessSingleton> process_singleton_;
// Android's first run is done in Java instead of native.
scoped_ptr<first_run::MasterPrefs> master_prefs_;
#endif
Profile* profile_;
bool run_message_loop_;
ProcessSingleton::NotifyResult notify_result_;
scoped_ptr<ThreeDAPIObserver> three_d_observer_;
// Initialized in SetupMetricsAndFieldTrials.
scoped_refptr<FieldTrialSynchronizer> field_trial_synchronizer_;
// Members initialized in PreMainMessageLoopRun, needed in
// PreMainMessageLoopRunThreadsCreated.
PrefService* local_state_;
base::FilePath user_data_dir_;
// Members needed across shutdown methods.
bool restart_last_session_;
// Tests can set this to true to disable restricting cookie access in the
// network stack, as this can only be done once.
static bool disable_enforcing_cookie_policies_for_tests_;
DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainParts);
};
#endif // CHROME_BROWSER_CHROME_BROWSER_MAIN_H_
|