| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #ifndef CHROME_BROWSER_BROWSER_MAIN_H_ | 5 #ifndef CHROME_BROWSER_BROWSER_MAIN_H_ |
| 6 #define CHROME_BROWSER_BROWSER_MAIN_H_ | 6 #define CHROME_BROWSER_BROWSER_MAIN_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/field_trial.h" | 10 #include "base/field_trial.h" |
| 11 #include "base/scoped_ptr.h" |
| 11 #include "base/tracked_objects.h" | 12 #include "base/tracked_objects.h" |
| 12 | 13 |
| 14 class ChromeThread; |
| 13 class CommandLine; | 15 class CommandLine; |
| 16 class HighResolutionTimerManager; |
| 14 struct MainFunctionParams; | 17 struct MainFunctionParams; |
| 18 class MessageLoop; |
| 15 class MetricsService; | 19 class MetricsService; |
| 20 class SystemMonitor; |
| 21 |
| 22 namespace net { |
| 23 class NetworkChangeNotifier; |
| 24 } |
| 16 | 25 |
| 17 // BrowserMainParts: | 26 // BrowserMainParts: |
| 18 // This class contains different "stages" to be executed in |BrowserMain()|, | 27 // This class contains different "stages" to be executed in |BrowserMain()|, |
| 19 // mostly initialization. This is made into a class rather than just functions | 28 // mostly initialization. This is made into a class rather than just functions |
| 20 // so each stage can create and maintain state. Each part is represented by a | 29 // so each stage can create and maintain state. Each part is represented by a |
| 21 // single method (e.g., "EarlyInitialization()"), which does the following: | 30 // single method (e.g., "EarlyInitialization()"), which does the following: |
| 22 // - calls a method (e.g., "PreEarlyInitialization()") which individual | 31 // - calls a method (e.g., "PreEarlyInitialization()") which individual |
| 23 // platforms can override to provide platform-specific code which is to be | 32 // platforms can override to provide platform-specific code which is to be |
| 24 // executed before the common code; | 33 // executed before the common code; |
| 25 // - calls various methods for things common to all platforms (for that given | 34 // - calls various methods for things common to all platforms (for that given |
| 26 // stage); and | 35 // stage); and |
| 27 // - calls a method (e.g., "PostEarlyInitialization()") for platform-specific | 36 // - calls a method (e.g., "PostEarlyInitialization()") for platform-specific |
| 28 // code to be called after the common code. | 37 // code to be called after the common code. |
| 29 // As indicated above, platforms should override the default "Pre...()" and | 38 // As indicated above, platforms should override the default "Pre...()" and |
| 30 // "Post...()" methods when necessary; they need not call the superclass's | 39 // "Post...()" methods when necessary; they need not call the superclass's |
| 31 // implementation (which is empty). | 40 // implementation (which is empty). |
| 32 // | 41 // |
| 33 // Parts: | 42 // Parts: |
| 34 // - EarlyInitialization: things which should be done as soon as possible on | 43 // - EarlyInitialization: things which should be done as soon as possible on |
| 35 // program start (such as setting up signal handlers) and things to be done | 44 // program start (such as setting up signal handlers) and things to be done |
| 36 // at some generic time before the start of the main message loop. | 45 // at some generic time before the start of the main message loop. |
| 46 // - MainMessageLoopStart: things beginning with the start of the main message |
| 47 // loop and ending with initialization of the main thread; platform-specific |
| 48 // things which should be done immediately before the start of the main |
| 49 // message loop should go in |PreMainMessageLoopStart()|. |
| 37 // - (more to come) | 50 // - (more to come) |
| 38 class BrowserMainParts { | 51 class BrowserMainParts { |
| 39 public: | 52 public: |
| 40 // This static method is to be implemented by each platform and should | 53 // This static method is to be implemented by each platform and should |
| 41 // instantiate the appropriate subclass. | 54 // instantiate the appropriate subclass. |
| 42 static BrowserMainParts* CreateBrowserMainParts( | 55 static BrowserMainParts* CreateBrowserMainParts( |
| 43 const MainFunctionParams& parameters); | 56 const MainFunctionParams& parameters); |
| 44 | 57 |
| 58 virtual ~BrowserMainParts(); |
| 59 |
| 45 // Parts to be called by |BrowserMain()|. | 60 // Parts to be called by |BrowserMain()|. |
| 46 void EarlyInitialization(); | 61 void EarlyInitialization(); |
| 47 | 62 void MainMessageLoopStart(); |
| 48 // TODO(viettrungluu): This currently contains (POSIX) initialization done | |
| 49 // later than "EarlyInitialization()" but dependent on it. Once the | |
| 50 // refactoring includes that later stage, this should be put in some more | |
| 51 // generic platform-dependent method. | |
| 52 virtual void TemporaryPosix_1() {} | |
| 53 | 63 |
| 54 protected: | 64 protected: |
| 55 explicit BrowserMainParts(const MainFunctionParams& parameters); | 65 explicit BrowserMainParts(const MainFunctionParams& parameters); |
| 56 | 66 |
| 57 // Accessors for data members (below) ---------------------------------------- | 67 // Accessors for data members (below) ---------------------------------------- |
| 58 const MainFunctionParams& parameters() const { | 68 const MainFunctionParams& parameters() const { |
| 59 return parameters_; | 69 return parameters_; |
| 60 } | 70 } |
| 61 const CommandLine& parsed_command_line() const { | 71 const CommandLine& parsed_command_line() const { |
| 62 return parsed_command_line_; | 72 return parsed_command_line_; |
| 63 } | 73 } |
| 74 MessageLoop& main_message_loop() const { |
| 75 return *main_message_loop_; |
| 76 } |
| 64 | 77 |
| 65 private: | |
| 66 // Methods to be overridden to provide platform-specific code; these | 78 // Methods to be overridden to provide platform-specific code; these |
| 67 // correspond to the "parts" above. | 79 // correspond to the "parts" above. |
| 68 virtual void PreEarlyInitialization() {} | 80 virtual void PreEarlyInitialization() {} |
| 69 virtual void PostEarlyInitialization() {} | 81 virtual void PostEarlyInitialization() {} |
| 82 virtual void PreMainMessageLoopStart() {} |
| 83 virtual void PostMainMessageLoopStart() {} |
| 70 | 84 |
| 85 private: |
| 71 // Methods for |EarlyInitialization()| --------------------------------------- | 86 // Methods for |EarlyInitialization()| --------------------------------------- |
| 72 | 87 |
| 73 // A/B test for the maximum number of persistent connections per host. | 88 // A/B test for the maximum number of persistent connections per host. |
| 74 void ConnectionFieldTrial(); | 89 void ConnectionFieldTrial(); |
| 75 | 90 |
| 76 // A/B test for determining a value for unused socket timeout. | 91 // A/B test for determining a value for unused socket timeout. |
| 77 void SocketTimeoutFieldTrial(); | 92 void SocketTimeoutFieldTrial(); |
| 78 | 93 |
| 79 // A/B test for spdy when --use-spdy not set. | 94 // A/B test for spdy when --use-spdy not set. |
| 80 void SpdyFieldTrial(); | 95 void SpdyFieldTrial(); |
| 81 | 96 |
| 82 // Used to initialize NSPR where appropriate. | 97 // Used to initialize NSPR where appropriate. |
| 83 void InitializeSSL(); | 98 void InitializeSSL(); |
| 84 | 99 |
| 100 // Methods for |MainMessageLoopStart()| -------------------------------------- |
| 101 |
| 102 void InitializeMainThread(); |
| 103 |
| 85 // Members initialized on construction --------------------------------------- | 104 // Members initialized on construction --------------------------------------- |
| 86 | 105 |
| 87 const MainFunctionParams& parameters_; | 106 const MainFunctionParams& parameters_; |
| 88 const CommandLine& parsed_command_line_; | 107 const CommandLine& parsed_command_line_; |
| 89 | 108 |
| 90 #if defined(TRACK_ALL_TASK_OBJECTS) | 109 #if defined(TRACK_ALL_TASK_OBJECTS) |
| 91 // Creating this object starts tracking the creation and deletion of Task | 110 // Creating this object starts tracking the creation and deletion of Task |
| 92 // instance. This MUST be done before main_message_loop, so that it is | 111 // instance. This MUST be done before main_message_loop, so that it is |
| 93 // destroyed after the main_message_loop. | 112 // destroyed after the main_message_loop. |
| 94 tracked_objects::AutoTracking tracking_objects_; | 113 tracked_objects::AutoTracking tracking_objects_; |
| 95 #endif | 114 #endif |
| 96 | 115 |
| 97 // Statistical testing infrastructure for the entire browser. | 116 // Statistical testing infrastructure for the entire browser. |
| 98 FieldTrialList field_trial_; | 117 FieldTrialList field_trial_; |
| 99 | 118 |
| 119 // Members initialized in |MainMessageLoopStart()| --------------------------- |
| 120 scoped_ptr<MessageLoop> main_message_loop_; |
| 121 scoped_ptr<SystemMonitor> system_monitor_; |
| 122 scoped_ptr<HighResolutionTimerManager> hi_res_timer_manager_; |
| 123 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; |
| 124 scoped_ptr<ChromeThread> main_thread_; |
| 125 |
| 100 DISALLOW_COPY_AND_ASSIGN(BrowserMainParts); | 126 DISALLOW_COPY_AND_ASSIGN(BrowserMainParts); |
| 101 }; | 127 }; |
| 102 | 128 |
| 103 | 129 |
| 104 // Perform platform-specific work that needs to be done before the main | |
| 105 // message loop is created, initialized, and entered. | |
| 106 void WillInitializeMainMessageLoop(const MainFunctionParams& parameters); | |
| 107 | |
| 108 // Perform platform-specific work that needs to be done after the main event | 130 // Perform platform-specific work that needs to be done after the main event |
| 109 // loop has ended. | 131 // loop has ended. |
| 110 void DidEndMainMessageLoop(); | 132 void DidEndMainMessageLoop(); |
| 111 | 133 |
| 112 // Records the conditions that can prevent Breakpad from generating and | 134 // Records the conditions that can prevent Breakpad from generating and |
| 113 // sending crash reports. The presence of a Breakpad handler (after | 135 // sending crash reports. The presence of a Breakpad handler (after |
| 114 // attempting to initialize crash reporting) and the presence of a debugger | 136 // attempting to initialize crash reporting) and the presence of a debugger |
| 115 // are registered with the UMA metrics service. | 137 // are registered with the UMA metrics service. |
| 116 void RecordBreakpadStatusUMA(MetricsService* metrics); | 138 void RecordBreakpadStatusUMA(MetricsService* metrics); |
| 117 | 139 |
| 118 // Displays a warning message if some minimum level of OS support is not | 140 // Displays a warning message if some minimum level of OS support is not |
| 119 // present on the current platform. | 141 // present on the current platform. |
| 120 void WarnAboutMinimumSystemRequirements(); | 142 void WarnAboutMinimumSystemRequirements(); |
| 121 | 143 |
| 122 #endif // CHROME_BROWSER_BROWSER_MAIN_H_ | 144 #endif // CHROME_BROWSER_BROWSER_MAIN_H_ |
| OLD | NEW |