summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-16 17:21:46 +0000
committerstevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-16 17:21:46 +0000
commitbadba1ad344a4854a5b78112e1b83934c3dd7781 (patch)
treefd064978d492aa49f8e0859858d40b5902a94cdb
parent21aac7ca45e56ae51b50840b5d1fbd7c97b01af4 (diff)
downloadchromium_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.grd6
-rw-r--r--chrome/browser/about_flags.cc10
-rw-r--r--chrome/browser/chromeos/chrome_browser_main_chromeos.cc85
-rw-r--r--chrome/browser/chromeos/chrome_browser_main_chromeos.h2
-rw-r--r--chrome/browser/chromeos/login/login_utils.cc1
-rw-r--r--chromeos/chromeos_switches.cc9
-rw-r--r--chromeos/chromeos_switches.h3
-rw-r--r--chromeos/network/network_state_handler.cc27
-rw-r--r--chromeos/network/network_state_handler.h22
-rw-r--r--chromeos/network/network_state_handler_unittest.cc2
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: