Index: components/proximity_auth/webui/proximity_auth_webui_handler.cc |
diff --git a/components/proximity_auth/webui/proximity_auth_webui_handler.cc b/components/proximity_auth/webui/proximity_auth_webui_handler.cc |
index eef4bea958e19860b06399671f10ba79ee7032ad..905840fc9030a0b8f0e3ec373194ef8870a4adfa 100644 |
--- a/components/proximity_auth/webui/proximity_auth_webui_handler.cc |
+++ b/components/proximity_auth/webui/proximity_auth_webui_handler.cc |
@@ -22,15 +22,12 @@ |
#include "components/proximity_auth/client_impl.h" |
#include "components/proximity_auth/cryptauth/base64url.h" |
#include "components/proximity_auth/cryptauth/cryptauth_enrollment_manager.h" |
-#include "components/proximity_auth/cryptauth/cryptauth_gcm_manager_impl.h" |
#include "components/proximity_auth/cryptauth/proto/cryptauth_api.pb.h" |
#include "components/proximity_auth/cryptauth/secure_message_delegate.h" |
#include "components/proximity_auth/device_to_device_authenticator.h" |
#include "components/proximity_auth/logging/logging.h" |
#include "components/proximity_auth/remote_status_update.h" |
#include "components/proximity_auth/secure_context.h" |
-#include "components/proximity_auth/webui/cryptauth_enroller_factory_impl.h" |
-#include "components/proximity_auth/webui/proximity_auth_ui_delegate.h" |
#include "components/proximity_auth/webui/reachable_phone_flow.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/web_ui.h" |
@@ -119,10 +116,12 @@ scoped_ptr<base::DictionaryValue> CreateSyncStateDictionary( |
} // namespace |
ProximityAuthWebUIHandler::ProximityAuthWebUIHandler( |
- ProximityAuthUIDelegate* delegate) |
- : delegate_(delegate), |
+ ProximityAuthClient* proximity_auth_client) |
+ : proximity_auth_client_(proximity_auth_client), |
+ web_contents_initialized_(false), |
weak_ptr_factory_(this) { |
- cryptauth_client_factory_ = delegate_->CreateCryptAuthClientFactory(); |
+ cryptauth_client_factory_ = |
+ proximity_auth_client_->CreateCryptAuthClientFactory(); |
} |
ProximityAuthWebUIHandler::~ProximityAuthWebUIHandler() { |
@@ -230,11 +229,20 @@ void ProximityAuthWebUIHandler::OnSyncFinished( |
void ProximityAuthWebUIHandler::OnWebContentsInitialized( |
const base::ListValue* args) { |
- if (!gcm_manager_ || !enrollment_manager_ || !device_manager_) { |
- InitGCMManager(); |
- InitEnrollmentManager(); |
- InitDeviceManager(); |
+ if (!web_contents_initialized_) { |
+ CryptAuthEnrollmentManager* enrollment_manager = |
+ proximity_auth_client_->GetCryptAuthEnrollmentManager(); |
+ if (enrollment_manager) |
+ enrollment_manager->AddObserver(this); |
+ |
+ CryptAuthDeviceManager* device_manager = |
+ proximity_auth_client_->GetCryptAuthDeviceManager(); |
+ if (device_manager) |
+ device_manager->AddObserver(this); |
+ |
LogBuffer::GetInstance()->AddObserver(this); |
+ |
+ web_contents_initialized_ = true; |
} |
} |
@@ -266,7 +274,8 @@ void ProximityAuthWebUIHandler::ToggleUnlockKey(const base::ListValue* args) { |
cryptauth::ToggleEasyUnlockRequest request; |
request.set_enable(make_unlock_key); |
request.set_public_key(public_key); |
- *(request.mutable_device_classifier()) = delegate_->GetDeviceClassifier(); |
+ *(request.mutable_device_classifier()) = |
+ proximity_auth_client_->GetDeviceClassifier(); |
PA_LOG(INFO) << "Toggling unlock key:\n" |
<< " public_key: " << public_key_b64 << "\n" |
@@ -284,7 +293,8 @@ void ProximityAuthWebUIHandler::FindEligibleUnlockDevices( |
cryptauth_client_ = cryptauth_client_factory_->CreateInstance(); |
cryptauth::FindEligibleUnlockDevicesRequest request; |
- *(request.mutable_device_classifier()) = delegate_->GetDeviceClassifier(); |
+ *(request.mutable_device_classifier()) = |
+ proximity_auth_client_->GetDeviceClassifier(); |
cryptauth_client_->FindEligibleUnlockDevices( |
request, |
base::Bind(&ProximityAuthWebUIHandler::OnFoundEligibleUnlockDevices, |
@@ -308,28 +318,38 @@ void ProximityAuthWebUIHandler::FindReachableDevices( |
} |
void ProximityAuthWebUIHandler::ForceEnrollment(const base::ListValue* args) { |
- if (enrollment_manager_) { |
- enrollment_manager_->ForceEnrollmentNow( |
- cryptauth::INVOCATION_REASON_MANUAL); |
+ CryptAuthEnrollmentManager* enrollment_manager = |
+ proximity_auth_client_->GetCryptAuthEnrollmentManager(); |
+ if (enrollment_manager) { |
+ enrollment_manager->ForceEnrollmentNow(cryptauth::INVOCATION_REASON_MANUAL); |
} |
} |
void ProximityAuthWebUIHandler::ForceDeviceSync(const base::ListValue* args) { |
- if (device_manager_) |
- device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); |
+ CryptAuthDeviceManager* device_manager = |
+ proximity_auth_client_->GetCryptAuthDeviceManager(); |
+ if (device_manager) |
+ device_manager->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); |
} |
void ProximityAuthWebUIHandler::ToggleConnection(const base::ListValue* args) { |
+ CryptAuthEnrollmentManager* enrollment_manager = |
+ proximity_auth_client_->GetCryptAuthEnrollmentManager(); |
+ CryptAuthDeviceManager* device_manager = |
+ proximity_auth_client_->GetCryptAuthDeviceManager(); |
+ if (!enrollment_manager || !device_manager) |
+ return; |
+ |
std::string b64_public_key; |
std::string public_key; |
- if (!enrollment_manager_ || !device_manager_ || !args->GetSize() || |
+ if (!enrollment_manager || !device_manager || !args->GetSize() || |
!args->GetString(0, &b64_public_key) || |
!Base64UrlDecode(b64_public_key, &public_key)) { |
return; |
} |
Connection* connection = GetConnection(); |
- for (const auto& unlock_key : device_manager_->unlock_keys()) { |
+ for (const auto& unlock_key : device_manager->unlock_keys()) { |
if (unlock_key.public_key() == public_key) { |
// Check if there is an existing connection to disconnect from first. |
if (connection && connection->IsConnected() && |
@@ -344,9 +364,10 @@ void ProximityAuthWebUIHandler::ToggleConnection(const base::ListValue* args) { |
// Derive the PSK before connecting to the device. |
PA_LOG(INFO) << "Deriving PSK before connecting to " |
<< unlock_key.friendly_device_name(); |
- secure_message_delegate_ = delegate_->CreateSecureMessageDelegate(); |
+ secure_message_delegate_ = |
+ proximity_auth_client_->CreateSecureMessageDelegate(); |
secure_message_delegate_->DeriveKey( |
- enrollment_manager_->GetUserPrivateKey(), unlock_key.public_key(), |
+ enrollment_manager->GetUserPrivateKey(), unlock_key.public_key(), |
base::Bind(&ProximityAuthWebUIHandler::OnPSKDerived, |
weak_ptr_factory_.GetWeakPtr(), unlock_key)); |
@@ -357,66 +378,6 @@ void ProximityAuthWebUIHandler::ToggleConnection(const base::ListValue* args) { |
PA_LOG(ERROR) << "Unlock key (" << b64_public_key << ") not found"; |
} |
-void ProximityAuthWebUIHandler::InitGCMManager() { |
- gcm_manager_.reset(new CryptAuthGCMManagerImpl(delegate_->GetGCMDriver(), |
- delegate_->GetPrefService())); |
- gcm_manager_->StartListening(); |
-} |
- |
-void ProximityAuthWebUIHandler::InitEnrollmentManager() { |
-#if defined(OS_CHROMEOS) |
- // TODO(tengs): We initialize a CryptAuthEnrollmentManager here for |
- // development and testing purposes until it is ready to be moved into Chrome. |
- // The public/private key pair has been generated and serialized in a previous |
- // session. |
- // This serialized DeviceInfo proto was previously captured from a real |
- // CryptAuth enrollment, and is replayed here for testing purposes. |
- std::string serialized_device_info; |
- Base64UrlDecode( |
- "IkoIARJGCiEAX_ZjLSq73EVcrarX-7l7No7nSP86GEC322ocSZKqUKwSIQDbEDu9KN7AgLM" |
- "v_lzZZNui9zSOgXCeDpLhS2tgrYVXijoEbGlua0IFZW4tVVNKSggBEkYKIQBf9mMtKrvcRV" |
- "ytqtf7uXs2judI_zoYQLfbahxJkqpQrBIhANsQO70o3sCAsy_-XNlk26L3NI6BcJ4OkuFLa" |
- "2CthVeKam9Nb3ppbGxhLzUuMCAoWDExOyBDck9TIHg4Nl82NCA3MTM0LjAuMCkgQXBwbGVX" |
- "ZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQ1LjAuMjQyMi4wIFN" |
- "hZmFyaS81MzcuMzZwLYoBAzEuMJABAZoBIG1rYWVtaWdob2xlYmNnY2hsa2JhbmttaWhrbm" |
- "9qZWFrsAHDPuoBHEJLZEluZWxFZk05VG1adGV3eTRGb19RV1Vicz2AAgKyBqIBQVBBOTFiS" |
- "FZDdlJJNGJFSXppMmFXOTBlZ044eHFBYkhWYnJwSVFuMTk3bWltd3RWWTZYN0JEcEI4Szg3" |
- "RjRubkJnejdLX1BQV2xkcUtDRVhiZkFiMGwyN1VaQXgtVjBWbEE4WlFwdkhETmpHVlh4RlV" |
- "WRDFNY1AzNTgtYTZ3eHRpVG5LQnpMTEVIT1F6Ujdpb0lUMzRtWWY1VmNhbmhPZDh3ugYgs9" |
- "7-c7qNUzzLeEqVCDXb_EaJ8wC3iie_Lpid44iuAh3CPo0CCugBCiMIARACGgi5wHHa82avM" |
- "ioQ7y8xhiUBs7Um73ZC1vQlzzIBABLAAeCqGnWF7RwtnmdfIQJoEqXoXrH1qLw4yqUAA1TW" |
- "M1qxTepJOdDHrh54eiejobW0SKpHqTlZIyiK3ObHAPdfzFum1l640RFdFGZTTTksZFqfD9O" |
- "dftoi0pMrApob4gXj8Pv2g22ArX55BiH56TkTIcDcEE3KKnA_2G0INT1y_clZvZfDw1n0WP" |
- "0Xdg1PLLCOb46WfDWUhHvUk3GzUce8xyxsjOkiZUNh8yvhFXaP2wJgVKVWInf0inuofo9Za" |
- "7p44hIgHgKJIr_4fuVs9Ojf0KcMzxoJTbFUGg58jglUAKFfJBLKPpMBeWEyOS5pQUdTNFZ1" |
- "bF9JVWY4YTJDSmJNbXFqaWpYUFYzaVV5dmJXSVRrR3d1bFRaVUs3RGVZczJtT0h5ZkQ1NWR" |
- "HRXEtdnJTdVc4VEZ2Z1haa2xhVEZTN0dqM2xCVUktSHd5Z0h6bHZHX2NGLWtzQmw0dXdveG" |
- "VPWE1hRlJ3WGJHVUU1Tm9sLS1mdkRIcGVZVnJR", |
- &serialized_device_info); |
- cryptauth::GcmDeviceInfo device_info; |
- device_info.ParseFromString(serialized_device_info); |
- |
- enrollment_manager_.reset(new CryptAuthEnrollmentManager( |
- make_scoped_ptr(new base::DefaultClock()), |
- make_scoped_ptr(new CryptAuthEnrollerFactoryImpl(delegate_)), |
- delegate_->CreateSecureMessageDelegate(), device_info, gcm_manager_.get(), |
- delegate_->GetPrefService())); |
- enrollment_manager_->AddObserver(this); |
- enrollment_manager_->Start(); |
-#endif |
-} |
- |
-void ProximityAuthWebUIHandler::InitDeviceManager() { |
- // TODO(tengs): We initialize a CryptAuthDeviceManager here for |
- // development and testing purposes until it is ready to be moved into Chrome. |
- device_manager_.reset(new CryptAuthDeviceManager( |
- make_scoped_ptr(new base::DefaultClock()), |
- delegate_->CreateCryptAuthClientFactory(), gcm_manager_.get(), |
- delegate_->GetPrefService())); |
- device_manager_->AddObserver(this); |
- device_manager_->Start(); |
-} |
- |
void ProximityAuthWebUIHandler::OnCryptAuthClientError( |
const std::string& error_message) { |
PA_LOG(WARNING) << "CryptAuth request failed: " << error_message; |
@@ -478,34 +439,40 @@ void ProximityAuthWebUIHandler::GetLocalState(const base::ListValue* args) { |
scoped_ptr<base::DictionaryValue> |
ProximityAuthWebUIHandler::GetEnrollmentStateDictionary() { |
- if (!enrollment_manager_) |
+ CryptAuthEnrollmentManager* enrollment_manager = |
+ proximity_auth_client_->GetCryptAuthEnrollmentManager(); |
+ if (!enrollment_manager) |
return make_scoped_ptr(new base::DictionaryValue()); |
return CreateSyncStateDictionary( |
- enrollment_manager_->GetLastEnrollmentTime().ToJsTime(), |
- enrollment_manager_->GetTimeToNextAttempt().InMillisecondsF(), |
- enrollment_manager_->IsRecoveringFromFailure(), |
- enrollment_manager_->IsEnrollmentInProgress()); |
+ enrollment_manager->GetLastEnrollmentTime().ToJsTime(), |
+ enrollment_manager->GetTimeToNextAttempt().InMillisecondsF(), |
+ enrollment_manager->IsRecoveringFromFailure(), |
+ enrollment_manager->IsEnrollmentInProgress()); |
} |
scoped_ptr<base::DictionaryValue> |
ProximityAuthWebUIHandler::GetDeviceSyncStateDictionary() { |
- if (!device_manager_) |
+ CryptAuthDeviceManager* device_manager = |
+ proximity_auth_client_->GetCryptAuthDeviceManager(); |
+ if (!device_manager) |
return make_scoped_ptr(new base::DictionaryValue()); |
return CreateSyncStateDictionary( |
- device_manager_->GetLastSyncTime().ToJsTime(), |
- device_manager_->GetTimeToNextAttempt().InMillisecondsF(), |
- device_manager_->IsRecoveringFromFailure(), |
- device_manager_->IsSyncInProgress()); |
+ device_manager->GetLastSyncTime().ToJsTime(), |
+ device_manager->GetTimeToNextAttempt().InMillisecondsF(), |
+ device_manager->IsRecoveringFromFailure(), |
+ device_manager->IsSyncInProgress()); |
} |
scoped_ptr<base::ListValue> ProximityAuthWebUIHandler::GetUnlockKeysList() { |
scoped_ptr<base::ListValue> unlock_keys(new base::ListValue()); |
- if (!device_manager_) |
+ CryptAuthDeviceManager* device_manager = |
+ proximity_auth_client_->GetCryptAuthDeviceManager(); |
+ if (!device_manager) |
return unlock_keys; |
- for (const auto& unlock_key : device_manager_->unlock_keys()) { |
+ for (const auto& unlock_key : device_manager->unlock_keys()) { |
unlock_keys->Append(ExternalDeviceInfoToDictionary(unlock_key)); |
} |
@@ -561,7 +528,7 @@ void ProximityAuthWebUIHandler::FindBluetoothClassicConnection( |
void ProximityAuthWebUIHandler::FindBluetoothLowEnergyConnection( |
const RemoteDevice& remote_device) { |
- PrefService* pref_service = delegate_->GetPrefService(); |
+ PrefService* pref_service = proximity_auth_client_->GetPrefService(); |
if (!pref_service->FindPreference( |
prefs::kBluetoothLowEnergyDeviceWhitelist)) { |
PA_LOG(ERROR) << "Please enable the BLE experiment in chrome://flags."; |
@@ -574,8 +541,8 @@ void ProximityAuthWebUIHandler::FindBluetoothLowEnergyConnection( |
make_scoped_ptr(new base::DefaultTickClock()))); |
} |
- ble_device_whitelist_.reset( |
- new BluetoothLowEnergyDeviceWhitelist(delegate_->GetPrefService())); |
+ ble_device_whitelist_.reset(new BluetoothLowEnergyDeviceWhitelist( |
+ proximity_auth_client_->GetPrefService())); |
// TODO(tengs): Set a timeout to stop the connection finder eventually. |
connection_finder_.reset(new BluetoothLowEnergyConnectionFinder( |
@@ -618,8 +585,8 @@ void ProximityAuthWebUIHandler::OnConnectionFound( |
return; |
authenticator_.reset(new DeviceToDeviceAuthenticator( |
- connection_.get(), delegate_->GetAccountId(), |
- delegate_->CreateSecureMessageDelegate())); |
+ connection_.get(), proximity_auth_client_->GetAccountId(), |
+ proximity_auth_client_->CreateSecureMessageDelegate())); |
authenticator_->Authenticate( |
base::Bind(&ProximityAuthWebUIHandler::OnAuthenticationResult, |
weak_ptr_factory_.GetWeakPtr())); |
@@ -647,7 +614,9 @@ ProximityAuthWebUIHandler::ExternalDeviceInfoToDictionary( |
dictionary->SetString(kExternalDeviceConnectionStatus, |
kExternalDeviceDisconnected); |
- if (!device_manager_) |
+ CryptAuthDeviceManager* device_manager = |
+ proximity_auth_client_->GetCryptAuthDeviceManager(); |
+ if (!device_manager) |
return dictionary; |
// If |device_info| is a known unlock key, then combine the proto data with |
@@ -655,13 +624,13 @@ ProximityAuthWebUIHandler::ExternalDeviceInfoToDictionary( |
// status updates). |
std::string public_key = device_info.public_key(); |
auto iterator = std::find_if( |
- device_manager_->unlock_keys().begin(), |
- device_manager_->unlock_keys().end(), |
+ device_manager->unlock_keys().begin(), |
+ device_manager->unlock_keys().end(), |
[&public_key](const cryptauth::ExternalDeviceInfo& unlock_key) { |
return unlock_key.public_key() == public_key; |
}); |
- if (iterator == device_manager_->unlock_keys().end() || |
+ if (iterator == device_manager->unlock_keys().end() || |
selected_remote_device_.public_key != device_info.public_key()) |
return dictionary; |