// 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 "chrome/browser/sync/test/integration/wifi_credentials_helper_chromeos.h" #include #include "base/bind.h" #include "base/files/file_path.h" #include "base/logging.h" #include "base/memory/scoped_ptr.h" #include "base/message_loop/message_loop.h" #include "base/strings/stringprintf.h" #include "base/values.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/shill_profile_client.h" #include "chromeos/network/managed_network_configuration_handler.h" #include "chromeos/network/network_handler.h" #include "chromeos/network/network_state_handler.h" #include "components/onc/onc_constants.h" #include "components/wifi_sync/network_state_helper_chromeos.h" #include "components/wifi_sync/wifi_credential_syncable_service_factory.h" #include "content/public/browser/browser_context.h" using wifi_sync::WifiCredential; using WifiCredentialSet = wifi_sync::WifiCredential::CredentialSet; namespace wifi_credentials_helper { namespace { const char kProfilePrefix[] = "/profile/"; void LogCreateConfigurationFailure( const std::string& debug_hint, const std::string& /* network_config_error_message */, scoped_ptr /* network_config_error_data */) { LOG(FATAL) << debug_hint; } std::string ChromeOsUserHashForBrowserContext( const content::BrowserContext& context) { return context.GetPath().BaseName().value(); } // Return value is distinct per |context|, but otherwise arbitrary. std::string ShillProfilePathForBrowserContext( const content::BrowserContext& context) { return kProfilePrefix + ChromeOsUserHashForBrowserContext(context); } ::chromeos::ShillProfileClient::TestInterface* GetShillProfileClientTestInterface() { DCHECK(::chromeos::DBusThreadManager::Get()->GetShillProfileClient()); DCHECK(::chromeos::DBusThreadManager::Get()->GetShillProfileClient() ->GetTestInterface()); return ::chromeos::DBusThreadManager::Get()->GetShillProfileClient() ->GetTestInterface(); } ::chromeos::ManagedNetworkConfigurationHandler* GetManagedNetworkConfigurationHandler() { DCHECK(::chromeos::NetworkHandler::Get() ->managed_network_configuration_handler()); return ::chromeos::NetworkHandler::Get() ->managed_network_configuration_handler(); } ::chromeos::NetworkStateHandler* GetNetworkStateHandler() { DCHECK(::chromeos::NetworkHandler::Get()->network_state_handler()); return ::chromeos::NetworkHandler::Get()->network_state_handler(); } } // namespace namespace chromeos { void SetUpChromeOs() { wifi_sync::WifiCredentialSyncableServiceFactory::GetInstance() ->set_ignore_login_state_for_test(true); } void SetupClientForProfileChromeOs( const content::BrowserContext* browser_context) { DCHECK(browser_context); GetShillProfileClientTestInterface() ->AddProfile(ShillProfilePathForBrowserContext(*browser_context), ChromeOsUserHashForBrowserContext(*browser_context)); const base::ListValue policy_network_configs; const base::DictionaryValue policy_global_config; GetManagedNetworkConfigurationHandler() ->SetPolicy(onc::ONC_SOURCE_UNKNOWN, ChromeOsUserHashForBrowserContext(*browser_context), policy_network_configs, policy_global_config); } void AddWifiCredentialToProfileChromeOs( const content::BrowserContext* browser_context, const WifiCredential& credential) { DCHECK(browser_context); scoped_ptr onc_properties = credential.ToOncProperties(); CHECK(onc_properties) << "Failed to generate ONC properties for " << credential.ToString(); GetManagedNetworkConfigurationHandler() ->CreateConfiguration( ChromeOsUserHashForBrowserContext(*browser_context), *onc_properties, ::chromeos::network_handler::StringResultCallback(), base::Bind(LogCreateConfigurationFailure, base::StringPrintf("Failed to add credential %s", credential.ToString().c_str()))); base::MessageLoop::current()->RunUntilIdle(); } WifiCredentialSet GetWifiCredentialsForProfileChromeOs( const content::BrowserContext* browser_context) { DCHECK(browser_context); return wifi_sync::GetWifiCredentialsForShillProfile( GetNetworkStateHandler(), ShillProfilePathForBrowserContext(*browser_context)); } } // namespace chromeos } // namespace wifi_credentials_helper