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() {
base::BindOnce(
&EnterpriseReportingPrivateGetPersistentSecretFunction::
OnDataRetrieved,
this)));
this, base::ThreadTaskRunnerHandle::Get())));
return RespondLater();
}
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,
long int status) {
if (status == 0) { // Success.
......@@ -109,11 +120,22 @@ EnterpriseReportingPrivateGetDeviceDataFunction::Run() {
&RetrieveDeviceData, params->id,
base::BindOnce(
&EnterpriseReportingPrivateGetDeviceDataFunction::OnDataRetrieved,
this)));
this, base::ThreadTaskRunnerHandle::Get())));
return RespondLater();
}
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,
RetrieveDeviceDataStatus status) {
switch (status) {
......@@ -156,11 +178,21 @@ EnterpriseReportingPrivateSetDeviceDataFunction::Run() {
&StoreDeviceData, params->id, std::move(params->data),
base::BindOnce(
&EnterpriseReportingPrivateSetDeviceDataFunction::OnDataStored,
this)));
this, base::ThreadTaskRunnerHandle::Get())));
return RespondLater();
}
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) {
if (status) {
VLOG(1) << "The Endpoint Verification data was stored.";
......
......@@ -54,7 +54,11 @@ class EnterpriseReportingPrivateGetPersistentSecretFunction
ExtensionFunction::ResponseAction Run() override;
// 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
......@@ -76,8 +80,11 @@ class EnterpriseReportingPrivateGetDeviceDataFunction
ExtensionFunction::ResponseAction Run() override;
// 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);
void SendResponse(const std::string& data, RetrieveDeviceDataStatus status);
};
class EnterpriseReportingPrivateSetDeviceDataFunction
......@@ -99,7 +106,10 @@ class EnterpriseReportingPrivateSetDeviceDataFunction
ExtensionFunction::ResponseAction Run() override;
// 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
......
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