Commit 11e5d13c authored by Sarah Hu's avatar Sarah Hu Committed by Commit Bot

cros: Fix crash in lock screen when fingerprint unlock is available.

Make session observer to be ScopedObserver so it remove itself when out
of scope.
Also add AllowJavascript in some JS call hander.

Bug: 876467
Change-Id: If7cd1c2fe42024708027bee5f87855244c7a4ea9
Reviewed-on: https://chromium-review.googlesource.com/1183590Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Commit-Queue: Xiaoyin Hu <xiaoyinh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#585094}
parent 04f531f5
...@@ -55,7 +55,10 @@ std::unique_ptr<base::DictionaryValue> GetFingerprintsInfo( ...@@ -55,7 +55,10 @@ std::unique_ptr<base::DictionaryValue> GetFingerprintsInfo(
} // namespace } // namespace
FingerprintHandler::FingerprintHandler(Profile* profile) FingerprintHandler::FingerprintHandler(Profile* profile)
: profile_(profile), binding_(this), weak_ptr_factory_(this) { : profile_(profile),
binding_(this),
session_observer_(this),
weak_ptr_factory_(this) {
service_manager::Connector* connector = service_manager::Connector* connector =
content::ServiceManagerConnection::GetForProcess()->GetConnector(); content::ServiceManagerConnection::GetForProcess()->GetConnector();
connector->BindInterface(device::mojom::kServiceName, &fp_service_); connector->BindInterface(device::mojom::kServiceName, &fp_service_);
...@@ -110,12 +113,11 @@ void FingerprintHandler::RegisterMessages() { ...@@ -110,12 +113,11 @@ void FingerprintHandler::RegisterMessages() {
void FingerprintHandler::OnJavascriptAllowed() { void FingerprintHandler::OnJavascriptAllowed() {
// SessionManager may not exist in some tests. // SessionManager may not exist in some tests.
if (SessionManager::Get()) if (SessionManager::Get())
SessionManager::Get()->AddObserver(this); session_observer_.Add(SessionManager::Get());
} }
void FingerprintHandler::OnJavascriptDisallowed() { void FingerprintHandler::OnJavascriptDisallowed() {
if (SessionManager::Get()) session_observer_.RemoveAll();
SessionManager::Get()->RemoveObserver(this);
} }
void FingerprintHandler::OnRestarted() {} void FingerprintHandler::OnRestarted() {}
...@@ -214,6 +216,8 @@ void FingerprintHandler::HandleGetNumFingerprints(const base::ListValue* args) { ...@@ -214,6 +216,8 @@ void FingerprintHandler::HandleGetNumFingerprints(const base::ListValue* args) {
} }
void FingerprintHandler::HandleStartEnroll(const base::ListValue* args) { void FingerprintHandler::HandleStartEnroll(const base::ListValue* args) {
AllowJavascript();
// Determines what the newly added fingerprint's name should be. // Determines what the newly added fingerprint's name should be.
for (int i = 1; i <= kMaxAllowedFingerprints; ++i) { for (int i = 1; i <= kMaxAllowedFingerprints; ++i) {
std::string fingerprint_name = l10n_util::GetStringFUTF8( std::string fingerprint_name = l10n_util::GetStringFUTF8(
...@@ -228,6 +232,7 @@ void FingerprintHandler::HandleStartEnroll(const base::ListValue* args) { ...@@ -228,6 +232,7 @@ void FingerprintHandler::HandleStartEnroll(const base::ListValue* args) {
void FingerprintHandler::HandleCancelCurrentEnroll( void FingerprintHandler::HandleCancelCurrentEnroll(
const base::ListValue* args) { const base::ListValue* args) {
AllowJavascript();
fp_service_->CancelCurrentEnrollSession( fp_service_->CancelCurrentEnrollSession(
base::Bind(&FingerprintHandler::OnCancelCurrentEnrollSession, base::Bind(&FingerprintHandler::OnCancelCurrentEnrollSession,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
...@@ -307,11 +312,13 @@ void FingerprintHandler::OnSetRecordLabel(const std::string& callback_id, ...@@ -307,11 +312,13 @@ void FingerprintHandler::OnSetRecordLabel(const std::string& callback_id,
void FingerprintHandler::HandleStartAuthentication( void FingerprintHandler::HandleStartAuthentication(
const base::ListValue* args) { const base::ListValue* args) {
AllowJavascript();
fp_service_->StartAuthSession(); fp_service_->StartAuthSession();
} }
void FingerprintHandler::HandleEndCurrentAuthentication( void FingerprintHandler::HandleEndCurrentAuthentication(
const base::ListValue* args) { const base::ListValue* args) {
AllowJavascript();
fp_service_->EndCurrentAuthSession( fp_service_->EndCurrentAuthSession(
base::Bind(&FingerprintHandler::OnEndCurrentAuthSession, base::Bind(&FingerprintHandler::OnEndCurrentAuthSession,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_FINGERPRINT_HANDLER_H_ #define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_FINGERPRINT_HANDLER_H_
#include "base/containers/flat_map.h" #include "base/containers/flat_map.h"
#include "base/scoped_observer.h"
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
#include "components/session_manager/core/session_manager_observer.h" #include "components/session_manager/core/session_manager_observer.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
...@@ -17,6 +18,10 @@ namespace base { ...@@ -17,6 +18,10 @@ namespace base {
class ListValue; class ListValue;
} // namespace base } // namespace base
namespace session_manager {
class SessionManager;
} // namespace session_manager
namespace chromeos { namespace chromeos {
namespace settings { namespace settings {
...@@ -76,6 +81,9 @@ class FingerprintHandler : public ::settings::SettingsPageUIHandler, ...@@ -76,6 +81,9 @@ class FingerprintHandler : public ::settings::SettingsPageUIHandler,
device::mojom::FingerprintPtr fp_service_; device::mojom::FingerprintPtr fp_service_;
mojo::Binding<device::mojom::FingerprintObserver> binding_; mojo::Binding<device::mojom::FingerprintObserver> binding_;
ScopedObserver<session_manager::SessionManager,
session_manager::SessionManagerObserver>
session_observer_;
base::WeakPtrFactory<FingerprintHandler> weak_ptr_factory_; base::WeakPtrFactory<FingerprintHandler> weak_ptr_factory_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment