Commit 62a29063 authored by David Roger's avatar David Roger Committed by Commit Bot

[signin] Dont delete DiceTurnSyncOnHelper from its constructor

This seems to be undefined behavior and is caught by the ASAN bot.

Bug: 816372
Change-Id: I16435111c860115bf288798b0c88ea9e37daf147
Reviewed-on: https://chromium-review.googlesource.com/948843Reviewed-by: default avatarMihai Sardarescu <msarda@chromium.org>
Commit-Queue: David Roger <droger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#541061}
parent 2b0c7b40
...@@ -5,11 +5,13 @@ ...@@ -5,11 +5,13 @@
#include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h" #include "chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h"
#include "base/bind.h" #include "base/bind.h"
#include "base/location.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics.h"
#include "base/metrics/user_metrics_action.h" #include "base/metrics/user_metrics_action.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/threading/sequenced_task_runner_handle.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/policy/cloud/user_policy_signin_service.h" #include "chrome/browser/policy/cloud/user_policy_signin_service.h"
#include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" #include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h"
...@@ -71,7 +73,10 @@ DiceTurnSyncOnHelper::DiceTurnSyncOnHelper( ...@@ -71,7 +73,10 @@ DiceTurnSyncOnHelper::DiceTurnSyncOnHelper(
DCHECK(!signin_util::IsForceSigninEnabled()); DCHECK(!signin_util::IsForceSigninEnabled());
if (HasCanOfferSigninError()) { if (HasCanOfferSigninError()) {
AbortAndDelete(); // Do not self-destruct synchronously in the constructor.
base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&DiceTurnSyncOnHelper::AbortAndDelete,
base::Unretained(this)));
return; return;
} }
......
...@@ -428,6 +428,7 @@ TEST_F(DiceTurnSyncOnHelperTest, CanOfferSigninErrorKeepAccount) { ...@@ -428,6 +428,7 @@ TEST_F(DiceTurnSyncOnHelperTest, CanOfferSigninErrorKeepAccount) {
// Signin flow. // Signin flow.
CreateDiceTurnOnSyncHelper( CreateDiceTurnOnSyncHelper(
DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); DiceTurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT);
base::RunLoop().RunUntilIdle();
// Check expectations. // Check expectations.
EXPECT_FALSE(signin_manager()->IsAuthenticated()); EXPECT_FALSE(signin_manager()->IsAuthenticated());
EXPECT_TRUE(token_service()->RefreshTokenIsAvailable(account_id())); EXPECT_TRUE(token_service()->RefreshTokenIsAvailable(account_id()));
...@@ -443,6 +444,7 @@ TEST_F(DiceTurnSyncOnHelperTest, CanOfferSigninErrorRemoveAccount) { ...@@ -443,6 +444,7 @@ TEST_F(DiceTurnSyncOnHelperTest, CanOfferSigninErrorRemoveAccount) {
// Signin flow. // Signin flow.
CreateDiceTurnOnSyncHelper( CreateDiceTurnOnSyncHelper(
DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT);
base::RunLoop().RunUntilIdle();
// Check expectations. // Check expectations.
EXPECT_FALSE(signin_manager()->IsAuthenticated()); EXPECT_FALSE(signin_manager()->IsAuthenticated());
EXPECT_FALSE(token_service()->RefreshTokenIsAvailable(account_id())); EXPECT_FALSE(token_service()->RefreshTokenIsAvailable(account_id()));
......
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