diff options
author | stevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-16 17:21:46 +0000 |
---|---|---|
committer | stevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-16 17:21:46 +0000 |
commit | badba1ad344a4854a5b78112e1b83934c3dd7781 (patch) | |
tree | fd064978d492aa49f8e0859858d40b5902a94cdb | |
parent | 21aac7ca45e56ae51b50840b5d1fbd7c97b01af4 (diff) | |
download | chromium_src-badba1ad344a4854a5b78112e1b83934c3dd7781.zip chromium_src-badba1ad344a4854a5b78112e1b83934c3dd7781.tar.gz chromium_src-badba1ad344a4854a5b78112e1b83934c3dd7781.tar.bz2 |
Add --enable-network-state-handler flag
Adds static Initialize() and Shutdown() metgods for NetworkStateHandler.
BUG=none
For about_flags:
TBR=ben@chromium.org
Review URL: https://codereview.chromium.org/11316032
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@168232 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/app/generated_resources.grd | 6 | ||||
-rw-r--r-- | chrome/browser/about_flags.cc | 10 | ||||
-rw-r--r-- | chrome/browser/chromeos/chrome_browser_main_chromeos.cc | 85 | ||||
-rw-r--r-- | chrome/browser/chromeos/chrome_browser_main_chromeos.h | 2 | ||||
-rw-r--r-- | chrome/browser/chromeos/login/login_utils.cc | 1 | ||||
-rw-r--r-- | chromeos/chromeos_switches.cc | 9 | ||||
-rw-r--r-- | chromeos/chromeos_switches.h | 3 | ||||
-rw-r--r-- | chromeos/network/network_state_handler.cc | 27 | ||||
-rw-r--r-- | chromeos/network/network_state_handler.h | 22 | ||||
-rw-r--r-- | chromeos/network/network_state_handler_unittest.cc | 2 |
10 files changed, 122 insertions, 45 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index f41cd28..d67af2e 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -6580,6 +6580,12 @@ Keep your key file in a safe place. You will need it to create new versions of y <message name="IDS_FLAGS_ENABLE_MEMORY_MONITOR_DESCRIPTION" desc="Title for the flag to enable advanced gestures."> Enables visual memory monitor in status area. </message> + <message name="IDS_FLAGS_ENABLE_NEW_NETWORK_HANDLERS_NAME" desc="Title for the flag to enable using the new network handlers."> + Enable new network handlers + </message> + <message name="IDS_FLAGS_ENABLE_NEW_NETWORK_HANDLERS_DESCRIPTION" desc="Title for the flag to enable using the new Network State Handler."> + Enables the new network handlers which handle Shill communication without using NetworkLibrary. + </message> <message name="IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT" desc="Generic 'Default' experiment choice option name. E.G. shown in multi value options in about:flags."> Default diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 22862e3..2fe7ca8 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc @@ -39,6 +39,10 @@ #include "ui/aura/aura_switches.h" #endif +#if defined(OS_CHROMEOS) +#include "chromeos/chromeos_switches.h" +#endif + using content::UserMetricsAction; namespace about_flags { @@ -1010,6 +1014,12 @@ const Experiment kExperiments[] = { #endif #endif #if defined(OS_CHROMEOS) + { "enable-new-network-handlers", + IDS_FLAGS_ENABLE_NEW_NETWORK_HANDLERS_NAME, + IDS_FLAGS_ENABLE_NEW_NETWORK_HANDLERS_DESCRIPTION, + kOsCrOS, + SINGLE_VALUE_TYPE(chromeos::switches::kEnableNewNetworkHandlers), + }, { "enable-carrier-switching", IDS_FLAGS_ENABLE_CARRIER_SWITCHING, diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index 6699779..7fbffab 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc @@ -73,12 +73,14 @@ #include "chrome/common/chrome_version_info.h" #include "chrome/common/logging_chrome.h" #include "chrome/common/pref_names.h" +#include "chromeos/chromeos_switches.h" #include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power_manager_client.h" #include "chromeos/dbus/session_manager_client.h" #include "chromeos/disks/disk_mount_manager.h" #include "chromeos/display/output_configurator.h" +#include "chromeos/network/network_state_handler.h" #include "chromeos/power/power_state_override.h" #include "content/public/browser/notification_service.h" #include "content/public/common/main_function_params.h" @@ -166,12 +168,12 @@ class StubLogin : public LoginStatusConsumer, void OptionallyRunChromeOSLoginManager(const CommandLine& parsed_command_line, Profile* profile) { - if (parsed_command_line.HasSwitch(switches::kLoginManager)) { + if (parsed_command_line.HasSwitch(::switches::kLoginManager)) { std::string first_screen = - parsed_command_line.GetSwitchValueASCII(switches::kLoginScreen); + parsed_command_line.GetSwitchValueASCII(::switches::kLoginScreen); std::string size_arg = parsed_command_line.GetSwitchValueASCII( - switches::kLoginScreenSize); + ::switches::kLoginScreenSize); gfx::Size size(0, 0); // Allow the size of the login window to be set explicitly. If not set, // default to the entire screen. This is mostly useful for testing. @@ -190,14 +192,14 @@ void OptionallyRunChromeOSLoginManager(const CommandLine& parsed_command_line, if (KioskModeSettings::Get()->IsKioskModeEnabled()) InitializeKioskModeScreensaver(); - } else if (parsed_command_line.HasSwitch(switches::kLoginUser) && - parsed_command_line.HasSwitch(switches::kLoginPassword)) { + } else if (parsed_command_line.HasSwitch(::switches::kLoginUser) && + parsed_command_line.HasSwitch(::switches::kLoginPassword)) { BootTimesLoader::Get()->RecordLoginAttempted(); new StubLogin( - parsed_command_line.GetSwitchValueASCII(switches::kLoginUser), - parsed_command_line.GetSwitchValueASCII(switches::kLoginPassword)); + parsed_command_line.GetSwitchValueASCII(::switches::kLoginUser), + parsed_command_line.GetSwitchValueASCII(::switches::kLoginPassword)); } else { - if (!parsed_command_line.HasSwitch(switches::kTestName)) { + if (!parsed_command_line.HasSwitch(::switches::kTestName)) { // We did not log in (we crashed or are debugging), so we need to // restore Sync. LoginUtils::Get()->RestoreAuthenticationSession(profile); @@ -215,7 +217,8 @@ namespace internal { class DBusServices { public: explicit DBusServices(const content::MainFunctionParams& parameters) - : cros_initialized_(false) { + : cros_initialized_(false), + network_handlers_initialized_(false) { // Initialize CrosLibrary only for the browser, unless running tests // (which do their own CrosLibrary setup). if (!parameters.ui_task) { @@ -228,6 +231,7 @@ class DBusServices { // the main message loop is started, as it uses the message loop. DBusThreadManager::Initialize(); CrosDBusService::Initialize(); + // This function and SystemKeyEventListener use InputMethodManager. input_method::InputMethodManager::Initialize(); disks::DiskMountManager::Initialize(); @@ -258,6 +262,17 @@ class DBusServices { WallpaperManager::Get()->AddObservers(); } + // TODO(stevenjb): Move this into DBusServices() once the switch is no + // longer required. (Switch is set in about_flags.cc and not applied until + // after DBusServices() is called). + void InitializeNetworkHandlers() { + if (!CommandLine::ForCurrentProcess()->HasSwitch( + chromeos::switches::kEnableNewNetworkHandlers)) + return; + chromeos::NetworkStateHandler::Initialize(); + network_handlers_initialized_ = true; + } + ~DBusServices() { // CrosLibrary is shut down before DBusThreadManager even though it // is initialized first becuase some of its libraries depend on DBus @@ -266,6 +281,10 @@ class DBusServices { // (crosbug.com/26160) if (cros_initialized_ && CrosLibrary::Get()) CrosLibrary::Shutdown(); + + if (network_handlers_initialized_) + chromeos::NetworkStateHandler::Shutdown(); + cryptohome::AsyncMethodCaller::Shutdown(); disks::DiskMountManager::Shutdown(); input_method::InputMethodManager::Shutdown(); @@ -276,6 +295,7 @@ class DBusServices { private: bool cros_initialized_; + bool network_handlers_initialized_; DISALLOW_COPY_AND_ASSIGN(DBusServices); }; @@ -286,8 +306,7 @@ class DBusServices { ChromeBrowserMainPartsChromeos::ChromeBrowserMainPartsChromeos( const content::MainFunctionParams& parameters) - : ChromeBrowserMainPartsLinux(parameters), - did_post_main_message_loop_start_(false) { + : ChromeBrowserMainPartsLinux(parameters) { } ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() { @@ -307,10 +326,10 @@ ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() { void ChromeBrowserMainPartsChromeos::PreEarlyInitialization() { CommandLine* singleton_command_line = CommandLine::ForCurrentProcess(); - if (parsed_command_line().HasSwitch(switches::kGuestSession)) { + if (parsed_command_line().HasSwitch(::switches::kGuestSession)) { // Disable sync and extensions if we're in "browse without sign-in" mode. - singleton_command_line->AppendSwitch(switches::kDisableSync); - singleton_command_line->AppendSwitch(switches::kDisableExtensions); + singleton_command_line->AppendSwitch(::switches::kDisableSync); + singleton_command_line->AppendSwitch(::switches::kDisableExtensions); browser_defaults::bookmarks_enabled = false; } @@ -318,19 +337,19 @@ void ChromeBrowserMainPartsChromeos::PreEarlyInitialization() { // showing the login manager or attempting a command line login, login with a // stub user. if (!base::chromeos::IsRunningOnChromeOS() && - !parsed_command_line().HasSwitch(switches::kLoginManager) && - !parsed_command_line().HasSwitch(switches::kLoginUser) && - !parsed_command_line().HasSwitch(switches::kGuestSession)) { + !parsed_command_line().HasSwitch(::switches::kLoginManager) && + !parsed_command_line().HasSwitch(::switches::kLoginUser) && + !parsed_command_line().HasSwitch(::switches::kGuestSession)) { singleton_command_line->AppendSwitchASCII( - switches::kLoginUser, UserManager::kStubUser); - if (!parsed_command_line().HasSwitch(switches::kLoginProfile)) { + ::switches::kLoginUser, UserManager::kStubUser); + if (!parsed_command_line().HasSwitch(::switches::kLoginProfile)) { // This must be kept in sync with TestingProfile::kTestUserProfileDir. singleton_command_line->AppendSwitchASCII( - switches::kLoginProfile, "test-user"); + ::switches::kLoginProfile, "test-user"); } LOG(INFO) << "Running as stub user with profile dir: " << singleton_command_line->GetSwitchValuePath( - switches::kLoginProfile).value(); + ::switches::kLoginProfile).value(); } ChromeBrowserMainPartsLinux::PreEarlyInitialization(); @@ -352,14 +371,16 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopStart() { dbus_services_.reset(new internal::DBusServices(parameters())); - did_post_main_message_loop_start_ = true; - ChromeBrowserMainPartsLinux::PostMainMessageLoopStart(); } -// Threads are initialized MainMessageLoopStart and MainMessageLoopRun. +// Threads are initialized between MainMessageLoopStart and MainMessageLoopRun. +// about_flags settings are applied in ChromeBrowserMainParts::PreCreateThreads. void ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun() { + // Must be called after about_flags settings are applied (see note above). + dbus_services_->InitializeNetworkHandlers(); + AudioHandler::Initialize(); imageburner::BurnManager::Initialize(); @@ -402,10 +423,10 @@ void ChromeBrowserMainPartsChromeos::PreProfileInit() { // TODO(abarth): Should this move to InitializeNetworkOptions()? // Allow access to file:// on ChromeOS for tests. - if (parsed_command_line().HasSwitch(switches::kAllowFileAccess)) + if (parsed_command_line().HasSwitch(::switches::kAllowFileAccess)) ChromeNetworkDelegate::AllowAccessToAllFiles(); - if (parsed_command_line().HasSwitch(switches::kEnableContacts)) { + if (parsed_command_line().HasSwitch(::switches::kEnableContacts)) { contact_manager_.reset(new contacts::ContactManager()); contact_manager_->Init(); } @@ -415,10 +436,10 @@ void ChromeBrowserMainPartsChromeos::PreProfileInit() { // 2) if passed alone, to signal that the indicated user has already // logged in and we should behave accordingly. // This handles case 2. - if (parsed_command_line().HasSwitch(switches::kLoginUser) && - !parsed_command_line().HasSwitch(switches::kLoginPassword)) { + if (parsed_command_line().HasSwitch(::switches::kLoginUser) && + !parsed_command_line().HasSwitch(::switches::kLoginPassword)) { std::string username = - parsed_command_line().GetSwitchValueASCII(switches::kLoginUser); + parsed_command_line().GetSwitchValueASCII(::switches::kLoginUser); VLOG(1) << "Relaunching browser for user: " << username; UserManager::Get()->UserLoggedIn(username, true); @@ -456,8 +477,8 @@ void ChromeBrowserMainPartsChromeos::PostProfileInit() { policy::BrowserPolicyConnector* connector = g_browser_process->browser_policy_connector(); - if (parsed_command_line().HasSwitch(switches::kLoginUser) && - !parsed_command_line().HasSwitch(switches::kLoginPassword)) { + if (parsed_command_line().HasSwitch(::switches::kLoginUser) && + !parsed_command_line().HasSwitch(::switches::kLoginPassword)) { // Pass the TokenService pointer to the policy connector so user policy can // grab a token and register with the policy server. // TODO(mnissler): Remove once OAuth is the only authentication mechanism. @@ -479,7 +500,7 @@ void ChromeBrowserMainPartsChromeos::PostProfileInit() { // Make sure that wallpaper boot transition and other delays in OOBE // are disabled for tests by default. // Individual tests may enable them if they want. - if (parsed_command_line().HasSwitch(switches::kTestType)) + if (parsed_command_line().HasSwitch(::switches::kTestType)) WizardController::SetZeroDelays(); // Tests should be able to tune login manager before showing it. diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.h b/chrome/browser/chromeos/chrome_browser_main_chromeos.h index 8d856dd..c47e21d 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.h +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.h @@ -80,8 +80,6 @@ class ChromeBrowserMainPartsChromeos : public ChromeBrowserMainPartsLinux { scoped_ptr<internal::DBusServices> dbus_services_; - bool did_post_main_message_loop_start_; - DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainPartsChromeos); }; diff --git a/chrome/browser/chromeos/login/login_utils.cc b/chrome/browser/chromeos/login/login_utils.cc index 59e96b0..c1f4598 100644 --- a/chrome/browser/chromeos/login/login_utils.cc +++ b/chrome/browser/chromeos/login/login_utils.cc @@ -815,6 +815,7 @@ std::string LoginUtilsImpl::GetOffTheRecordCommandLine( cc::switches::kEnablePartialSwap, cc::switches::kEnablePinchInCompositor, chromeos::switches::kDbusStub, + chromeos::switches::kEnableNewNetworkHandlers, gfx::switches::kEnableBrowserTextSubpixelPositioning, gfx::switches::kEnableWebkitTextSubpixelPositioning, }; diff --git a/chromeos/chromeos_switches.cc b/chromeos/chromeos_switches.cc index 8cb93ae..69f1c5f 100644 --- a/chromeos/chromeos_switches.cc +++ b/chromeos/chromeos_switches.cc @@ -7,14 +7,17 @@ namespace chromeos { namespace switches { +// Enables overriding the Chrome OS board type when running on Linux. +const char kChromeOSReleaseBoard[] = "chromeos-release-board"; + // Forces the stub implementation of dbus clients. const char kDbusStub[] = "dbus-stub"; +// Enables the new NetworkStateHandler class. +const char kEnableNewNetworkHandlers[] = "enable-new-network-handlers"; + // Sends test messages on first call to RequestUpdate (stub only). const char kSmsTestMessages[] = "sms-test-messages"; -// Enables overriding the Chrome OS board type when running on Linux. -const char kChromeOSReleaseBoard[] = "chromeos-release-board"; - } // namespace switches } // namespace chromeos diff --git a/chromeos/chromeos_switches.h b/chromeos/chromeos_switches.h index 4a7e9f6..565121d 100644 --- a/chromeos/chromeos_switches.h +++ b/chromeos/chromeos_switches.h @@ -20,9 +20,10 @@ namespace switches { // see chromeos::LoginUtil::GetOffTheRecordCommandLine().) // Please keep alphabetized. +CHROMEOS_EXPORT extern const char kChromeOSReleaseBoard[]; CHROMEOS_EXPORT extern const char kDbusStub[]; +CHROMEOS_EXPORT extern const char kEnableNewNetworkHandlers[]; CHROMEOS_EXPORT extern const char kSmsTestMessages[]; -CHROMEOS_EXPORT extern const char kChromeOSReleaseBoard[]; } // namespace switches } // namespace chromeos diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc index 7caf2f7..738d328 100644 --- a/chromeos/network/network_state_handler.cc +++ b/chromeos/network/network_state_handler.cc @@ -16,6 +16,8 @@ namespace chromeos { +static NetworkStateHandler* g_network_state_handler = NULL; + NetworkStateHandler::NetworkStateHandler() { } @@ -24,11 +26,32 @@ NetworkStateHandler::~NetworkStateHandler() { STLDeleteContainerPointers(device_list_.begin(), device_list_.end()); } -void NetworkStateHandler::Init() { +void NetworkStateHandler::InitShillPropertyHandler() { shill_property_handler_.reset(new internal::ShillPropertyHandler(this)); shill_property_handler_->Init(); } +// static +void NetworkStateHandler::Initialize() { + CHECK(!g_network_state_handler); + g_network_state_handler = new NetworkStateHandler(); + g_network_state_handler->InitShillPropertyHandler(); +} + +// static +void NetworkStateHandler::Shutdown() { + CHECK(g_network_state_handler); + delete g_network_state_handler; + g_network_state_handler = NULL; +} + +// static +NetworkStateHandler* NetworkStateHandler::Get() { + CHECK(g_network_state_handler) + << "NetworkStateHandler::Get() called before Initialize()"; + return g_network_state_handler; +} + void NetworkStateHandler::AddObserver(NetworkStateHandlerObserver* observer) { observers_.AddObserver(observer); } @@ -348,7 +371,7 @@ ManagedState* NetworkStateHandler::GetModifiableManagedState( NetworkStateHandler::ManagedStateList* NetworkStateHandler::GetManagedList( ManagedState::ManagedType type) { - switch(type) { + switch (type) { case ManagedState::MANAGED_TYPE_NETWORK: return &network_list_; case ManagedState::MANAGED_TYPE_DEVICE: diff --git a/chromeos/network/network_state_handler.h b/chromeos/network/network_state_handler.h index 91d54bf..d8c2d3d 100644 --- a/chromeos/network/network_state_handler.h +++ b/chromeos/network/network_state_handler.h @@ -28,6 +28,7 @@ namespace chromeos { class DeviceState; class NetworkState; class NetworkStateHandlerObserver; +class NetworkStateHandlerTest; // Class for tracking the list of visible networks and their state. // @@ -45,11 +46,16 @@ class CHROMEOS_EXPORT NetworkStateHandler typedef std::vector<ManagedState*> ManagedStateList; typedef std::vector<const NetworkState*> NetworkStateList; - NetworkStateHandler(); virtual ~NetworkStateHandler(); - // Initialize ShillPropertyHandler. - void Init(); + // Sets the global instance. Must be called before any calls to Get(). + static void Initialize(); + + // Destroys the global instance. + static void Shutdown(); + + // Gets the global instance. Initialize() must be called first. + static NetworkStateHandler* Get(); // Add/remove observers. void AddObserver(NetworkStateHandlerObserver* observer); @@ -145,7 +151,15 @@ class CHROMEOS_EXPORT NetworkStateHandler virtual void ManagedStateListChanged( ManagedState::ManagedType type) OVERRIDE; -private: + protected: + NetworkStateHandler(); + + // Called in Initialize(). Called explicitly by tests after adding + // test observers. + void InitShillPropertyHandler(); + + private: + friend class NetworkStateHandlerTest; FRIEND_TEST_ALL_PREFIXES(NetworkStateHandlerTest, NetworkStateHandlerStub); // Non-const getters for managed entries. These are const so that they can diff --git a/chromeos/network/network_state_handler_unittest.cc b/chromeos/network/network_state_handler_unittest.cc index fa68dac..915a187 100644 --- a/chromeos/network/network_state_handler_unittest.cc +++ b/chromeos/network/network_state_handler_unittest.cc @@ -115,7 +115,7 @@ class NetworkStateHandlerTest : public testing::Test { test_observer_.reset(new TestObserver); network_state_handler_.reset(new NetworkStateHandler); network_state_handler_->AddObserver(test_observer_.get()); - network_state_handler_->Init(); + network_state_handler_->InitShillPropertyHandler(); } protected: |