| Index: components/wifi_sync/wifi_config_delegate_factory_chromeos.cc
|
| diff --git a/components/wifi_sync/wifi_config_delegate_factory_chromeos.cc b/components/wifi_sync/wifi_config_delegate_factory_chromeos.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..50f7a05724637eacd4bc0450fc4a58a167c0a032
|
| --- /dev/null
|
| +++ b/components/wifi_sync/wifi_config_delegate_factory_chromeos.cc
|
| @@ -0,0 +1,75 @@
|
| +// Copyright 2014 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.
|
| +
|
| +#include "components/wifi_sync/wifi_config_delegate_factory_chromeos.h"
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/files/file_path.h"
|
| +#include "base/logging.h"
|
| +#include "base/memory/singleton.h"
|
| +#include "chromeos/login/login_state.h"
|
| +#include "chromeos/network/network_handler.h"
|
| +#include "components/wifi_sync/wifi_config_delegate_chromeos.h"
|
| +#include "content/public/browser/browser_context.h"
|
| +
|
| +namespace wifi_sync {
|
| +
|
| +namespace {
|
| +
|
| +std::string GetChromeOsUserHash(
|
| + content::BrowserContext* context, bool use_login_state) {
|
| + if (use_login_state) {
|
| + auto login_state = chromeos::LoginState::Get();
|
| + DCHECK(login_state->IsUserLoggedIn());
|
| + DCHECK(!login_state->primary_user_hash().empty());
|
| + // TODO(quiche): verify that |context| is the primary user's
|
| + // context.
|
| + return login_state->primary_user_hash();
|
| + } else {
|
| + return context->GetPath().BaseName().value();
|
| + }
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +// static
|
| +WifiConfigDelegateFactoryChromeOs*
|
| +WifiConfigDelegateFactoryChromeOs::GetInstance() {
|
| + return Singleton<WifiConfigDelegateFactoryChromeOs>::get();
|
| +}
|
| +
|
| +void WifiConfigDelegateFactoryChromeOs::SetUseLoginState(bool use_login_state) {
|
| + use_login_state_ = use_login_state;
|
| +}
|
| +
|
| +scoped_ptr<WifiConfigDelegate>
|
| +WifiConfigDelegateFactoryChromeOs::BuildInstanceFor(
|
| + content::BrowserContext* context) {
|
| + // It is safe to pass the WifiConfigDelegate a bare pointer to the
|
| + // managed_network_configuration_handler, as long as the
|
| + // WifiConfigDelegate is owned by a KeyedService. The reasoning is
|
| + // as follows: a) |managed_network_configuration_handler| is owned
|
| + // by the chromeos::NetworkHandler singleton, b) the
|
| + // chromeos::NetworkHandler singleton is owned by the
|
| + // chromeos::internal::DBusServices singleton, c) the
|
| + // chromeos::internal::DBusServices singleton is guaranteed to
|
| + // outlive all KeyedServices.
|
| + auto network_handler = chromeos::NetworkHandler::Get();
|
| + return make_scoped_ptr(
|
| + new WifiConfigDelegateChromeOs(
|
| + GetChromeOsUserHash(context, use_login_state_),
|
| + network_handler->managed_network_configuration_handler()));
|
| +}
|
| +
|
| +// Private methods.
|
| +
|
| +WifiConfigDelegateFactoryChromeOs::WifiConfigDelegateFactoryChromeOs()
|
| + : use_login_state_(true) {
|
| +}
|
| +
|
| +WifiConfigDelegateFactoryChromeOs::~WifiConfigDelegateFactoryChromeOs() {
|
| +}
|
| +
|
| +} // namespace wifi_sync
|
|
|