| // 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.h" |
| |
| #include "base/logging.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "build/build_config.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" |
| #include "chrome/browser/sync/test/integration/sync_test.h" |
| #include "components/wifi_sync/wifi_credential_syncable_service.h" |
| #include "components/wifi_sync/wifi_credential_syncable_service_factory.h" |
| |
| #if defined(OS_CHROMEOS) |
| #include "chrome/browser/sync/test/integration/wifi_credentials_helper_chromeos.h" |
| #endif |
| |
| using wifi_sync::WifiCredential; |
| using wifi_sync::WifiCredentialSyncableService; |
| using wifi_sync::WifiCredentialSyncableServiceFactory; |
| using wifi_sync::WifiSecurityClass; |
| using sync_datatype_helper::test; |
| |
| using WifiCredentialSet = wifi_sync::WifiCredential::CredentialSet; |
| |
| namespace wifi_credentials_helper { |
| |
| namespace { |
| |
| void SetupClientForProfile(Profile* profile) { |
| #if defined(OS_CHROMEOS) |
| wifi_credentials_helper::chromeos::SetupClientForProfileChromeOs(profile); |
| #else |
| NOTREACHED(); |
| #endif |
| } |
| |
| WifiCredentialSyncableService* GetServiceForBrowserContext( |
| content::BrowserContext* context) { |
| return WifiCredentialSyncableServiceFactory::GetForBrowserContext( |
| context); |
| } |
| |
| WifiCredentialSyncableService* GetServiceForProfile(int profile_index) { |
| return GetServiceForBrowserContext(test()->GetProfile(profile_index)); |
| } |
| |
| void AddWifiCredentialToProfile( |
| Profile* profile, const WifiCredential& credential) { |
| #if defined(OS_CHROMEOS) |
| wifi_credentials_helper::chromeos::AddWifiCredentialToProfileChromeOs( |
| profile, credential); |
| #else |
| NOTREACHED(); |
| #endif |
| } |
| |
| bool CredentialsMatch(const WifiCredentialSet& a_credentials, |
| const WifiCredentialSet& b_credentials) { |
| if (a_credentials.size() != b_credentials.size()) { |
| LOG(ERROR) << "CredentialSets a and b do not match in size: " |
| << a_credentials.size() |
| << " vs " << b_credentials.size() << " respectively."; |
| return false; |
| } |
| |
| for (const WifiCredential& credential : a_credentials) { |
| if (b_credentials.find(credential) == b_credentials.end()) { |
| LOG(ERROR) |
| << "Network from a not found in b. " |
| << "SSID (hex): " |
| << base::HexEncode(credential.ssid().data(), |
| credential.ssid().size()).c_str() |
| << " SecurityClass: " << credential.security_class() |
| << " Passphrase: " << credential.passphrase(); |
| return false; |
| } |
| } |
| |
| return true; |
| } |
| |
| } // namespace |
| |
| void SetUp() { |
| #if defined(OS_CHROMEOS) |
| wifi_credentials_helper::chromeos::SetUpChromeOs(); |
| #else |
| NOTREACHED(); |
| #endif |
| } |
| |
| void SetupClients() { |
| SetupClientForProfile(test()->verifier()); |
| for (int i = 0; i < test()->num_clients(); ++i) |
| SetupClientForProfile(test()->GetProfile(i)); |
| } |
| |
| bool VerifierIsEmpty() { |
| return GetWifiCredentialsForProfile(test()->verifier()).empty(); |
| } |
| |
| bool ProfileMatchesVerifier(int profile_index) { |
| WifiCredentialSet verifier_credentials = |
| GetWifiCredentialsForProfile(test()->verifier()); |
| WifiCredentialSet other_credentials = |
| GetWifiCredentialsForProfile(test()->GetProfile(profile_index)); |
| return CredentialsMatch(verifier_credentials, other_credentials); |
| } |
| |
| bool AllProfilesMatch() { |
| if (test()->use_verifier() && !ProfileMatchesVerifier(0)) { |
| LOG(ERROR) << "Profile 0 does not match verifier."; |
| return false; |
| } |
| |
| WifiCredentialSet profile0_credentials = |
| GetWifiCredentialsForProfile(test()->GetProfile(0)); |
| for (int i = 1; i < test()->num_clients(); ++i) { |
| WifiCredentialSet other_profile_credentials = |
| GetWifiCredentialsForProfile(test()->GetProfile(i)); |
| if (!CredentialsMatch(profile0_credentials, other_profile_credentials)) { |
| LOG(ERROR) << "Profile " << i << " " << "does not match with profile 0."; |
| return false; |
| } |
| } |
| return true; |
| } |
| |
| scoped_ptr<WifiCredential> MakeWifiCredential(const std::string& ssid, |
| WifiSecurityClass security_class, |
| const std::string& passphrase) { |
| return WifiCredential::Create(WifiCredential::MakeSsidBytesForTest(ssid), |
| security_class, |
| passphrase); |
| } |
| |
| void AddWifiCredential(int profile_index, |
| const std::string& sync_id, |
| const WifiCredential& credential) { |
| AddWifiCredentialToProfile(test()->GetProfile(profile_index), credential); |
| if (test()->use_verifier()) |
| AddWifiCredentialToProfile(test()->verifier(), credential); |
| |
| // TODO(quiche): Remove this, once we have plumbing to route |
| // NetworkConfigurationObserver events to |
| // WifiCredentialSyncableService instances. |
| GetServiceForProfile(profile_index) |
| ->AddToSyncedNetworks(sync_id, credential); |
| } |
| |
| WifiCredentialSet GetWifiCredentialsForProfile(const Profile* profile) { |
| #if defined(OS_CHROMEOS) |
| return wifi_credentials_helper::chromeos:: |
| GetWifiCredentialsForProfileChromeOs(profile); |
| #else |
| NOTREACHED(); |
| return WifiCredential::MakeSet(); |
| #endif |
| } |
| |
| } // namespace wifi_credentials_helper |