Commit 177cca3a authored by Owen Min's avatar Owen Min Committed by Commit Bot

Fixup DCHECK failure for enterprise reporting private API

In chrome.enterprisePrivate APIs, we use base::ThreadPool::PostTask in
few places. Unlike PostTaskAndReply, the callback is not posted on the
original thread. It causes CalledOnValidSequence check failure as we
returns the extension APIs on a different thread.

Fix the issue by remembering the original task runner to make sure the
extension APIs are responded in the main thread.

Change-Id: If3b69d56a0d8afc4c89da8104ddb24cceb07173e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2429544
Commit-Queue: Owen Min <zmin@chromium.org>
Reviewed-by: default avatarJulian Pastarmov <pastarmovj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#810623}
parent d7a2ebf5
...@@ -69,11 +69,22 @@ EnterpriseReportingPrivateGetPersistentSecretFunction::Run() { ...@@ -69,11 +69,22 @@ EnterpriseReportingPrivateGetPersistentSecretFunction::Run() {
base::BindOnce( base::BindOnce(
&EnterpriseReportingPrivateGetPersistentSecretFunction:: &EnterpriseReportingPrivateGetPersistentSecretFunction::
OnDataRetrieved, OnDataRetrieved,
this))); this, base::ThreadTaskRunnerHandle::Get())));
return RespondLater(); return RespondLater();
} }
void EnterpriseReportingPrivateGetPersistentSecretFunction::OnDataRetrieved( void EnterpriseReportingPrivateGetPersistentSecretFunction::OnDataRetrieved(
scoped_refptr<base::SequencedTaskRunner> task_runner,
const std::string& data,
long int status) {
task_runner->PostTask(
FROM_HERE,
base::BindOnce(
&EnterpriseReportingPrivateGetPersistentSecretFunction::SendResponse,
this, data, status));
}
void EnterpriseReportingPrivateGetPersistentSecretFunction::SendResponse(
const std::string& data, const std::string& data,
long int status) { long int status) {
if (status == 0) { // Success. if (status == 0) { // Success.
...@@ -109,11 +120,22 @@ EnterpriseReportingPrivateGetDeviceDataFunction::Run() { ...@@ -109,11 +120,22 @@ EnterpriseReportingPrivateGetDeviceDataFunction::Run() {
&RetrieveDeviceData, params->id, &RetrieveDeviceData, params->id,
base::BindOnce( base::BindOnce(
&EnterpriseReportingPrivateGetDeviceDataFunction::OnDataRetrieved, &EnterpriseReportingPrivateGetDeviceDataFunction::OnDataRetrieved,
this))); this, base::ThreadTaskRunnerHandle::Get())));
return RespondLater(); return RespondLater();
} }
void EnterpriseReportingPrivateGetDeviceDataFunction::OnDataRetrieved( void EnterpriseReportingPrivateGetDeviceDataFunction::OnDataRetrieved(
scoped_refptr<base::SequencedTaskRunner> task_runner,
const std::string& data,
RetrieveDeviceDataStatus status) {
task_runner->PostTask(
FROM_HERE,
base::BindOnce(
&EnterpriseReportingPrivateGetDeviceDataFunction::SendResponse, this,
data, status));
}
void EnterpriseReportingPrivateGetDeviceDataFunction::SendResponse(
const std::string& data, const std::string& data,
RetrieveDeviceDataStatus status) { RetrieveDeviceDataStatus status) {
switch (status) { switch (status) {
...@@ -156,11 +178,21 @@ EnterpriseReportingPrivateSetDeviceDataFunction::Run() { ...@@ -156,11 +178,21 @@ EnterpriseReportingPrivateSetDeviceDataFunction::Run() {
&StoreDeviceData, params->id, std::move(params->data), &StoreDeviceData, params->id, std::move(params->data),
base::BindOnce( base::BindOnce(
&EnterpriseReportingPrivateSetDeviceDataFunction::OnDataStored, &EnterpriseReportingPrivateSetDeviceDataFunction::OnDataStored,
this))); this, base::ThreadTaskRunnerHandle::Get())));
return RespondLater(); return RespondLater();
} }
void EnterpriseReportingPrivateSetDeviceDataFunction::OnDataStored( void EnterpriseReportingPrivateSetDeviceDataFunction::OnDataStored(
scoped_refptr<base::SequencedTaskRunner> task_runner,
bool status) {
task_runner->PostTask(
FROM_HERE,
base::BindOnce(
&EnterpriseReportingPrivateSetDeviceDataFunction::SendResponse, this,
status));
}
void EnterpriseReportingPrivateSetDeviceDataFunction::SendResponse(
bool status) { bool status) {
if (status) { if (status) {
VLOG(1) << "The Endpoint Verification data was stored."; VLOG(1) << "The Endpoint Verification data was stored.";
......
...@@ -54,7 +54,11 @@ class EnterpriseReportingPrivateGetPersistentSecretFunction ...@@ -54,7 +54,11 @@ class EnterpriseReportingPrivateGetPersistentSecretFunction
ExtensionFunction::ResponseAction Run() override; ExtensionFunction::ResponseAction Run() override;
// Callback once the data was retrieved from the file. // Callback once the data was retrieved from the file.
void OnDataRetrieved(const std::string& data, long int status); void OnDataRetrieved(scoped_refptr<base::SequencedTaskRunner> task_runner,
const std::string& data,
long int status);
void SendResponse(const std::string& data, long int status);
}; };
class EnterpriseReportingPrivateGetDeviceDataFunction class EnterpriseReportingPrivateGetDeviceDataFunction
...@@ -76,8 +80,11 @@ class EnterpriseReportingPrivateGetDeviceDataFunction ...@@ -76,8 +80,11 @@ class EnterpriseReportingPrivateGetDeviceDataFunction
ExtensionFunction::ResponseAction Run() override; ExtensionFunction::ResponseAction Run() override;
// Callback once the data was retrieved from the file. // Callback once the data was retrieved from the file.
void OnDataRetrieved(const std::string& data, void OnDataRetrieved(scoped_refptr<base::SequencedTaskRunner> task_runner,
const std::string& data,
RetrieveDeviceDataStatus status); RetrieveDeviceDataStatus status);
void SendResponse(const std::string& data, RetrieveDeviceDataStatus status);
}; };
class EnterpriseReportingPrivateSetDeviceDataFunction class EnterpriseReportingPrivateSetDeviceDataFunction
...@@ -99,7 +106,10 @@ class EnterpriseReportingPrivateSetDeviceDataFunction ...@@ -99,7 +106,10 @@ class EnterpriseReportingPrivateSetDeviceDataFunction
ExtensionFunction::ResponseAction Run() override; ExtensionFunction::ResponseAction Run() override;
// Callback once the data was stored to the file. // Callback once the data was stored to the file.
void OnDataStored(bool status); void OnDataStored(scoped_refptr<base::SequencedTaskRunner> task_runner,
bool status);
void SendResponse(bool status);
}; };
class EnterpriseReportingPrivateGetDeviceInfoFunction class EnterpriseReportingPrivateGetDeviceInfoFunction
......
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