Commit d52d72af authored by Bernhard Bauer's avatar Bernhard Bauer Committed by Commit Bot

Grab ThreadTaskRunnerHandle in JsonSanitizerAndroid before calling into Java.

This works around an issue where in official builds of unit_tests the
ThreadTaskRunnerHandle is null when calling into native code from Java.

Bug: 739510
Change-Id: Ide93e67076f905d03a6a9271a812e49553dcf0d8
Reviewed-on: https://chromium-review.googlesource.com/570251Reviewed-by: default avatarRobert Sesek <rsesek@chromium.org>
Commit-Queue: Bernhard Bauer <bauerb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#486750}
parent b715d48d
......@@ -51,6 +51,11 @@ class JsonSanitizerAndroid : public JsonSanitizer {
StringCallback success_callback_;
StringCallback error_callback_;
// Runs the callbacks. Stored as a member because grabbing it when posting
// the callbacks (being called from Java) fails under certain circumstances
// (https://crbug.com/739510).
scoped_refptr<base::SequencedTaskRunner> task_runner_;
DISALLOW_COPY_AND_ASSIGN(JsonSanitizerAndroid);
};
......@@ -58,7 +63,8 @@ JsonSanitizerAndroid::JsonSanitizerAndroid(
const StringCallback& success_callback,
const StringCallback& error_callback)
: success_callback_(success_callback),
error_callback_(error_callback) {}
error_callback_(error_callback),
task_runner_(base::SequencedTaskRunnerHandle::Get()) {}
void JsonSanitizerAndroid::Sanitize(const std::string& unsafe_json) {
// The JSON parser only accepts wellformed UTF-8.
......@@ -77,13 +83,11 @@ void JsonSanitizerAndroid::Sanitize(const std::string& unsafe_json) {
}
void JsonSanitizerAndroid::OnSuccess(const std::string& json) {
base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::Bind(success_callback_, json));
task_runner_->PostTask(FROM_HERE, base::Bind(success_callback_, json));
}
void JsonSanitizerAndroid::OnError(const std::string& error) {
base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::Bind(error_callback_, error));
task_runner_->PostTask(FROM_HERE, base::Bind(error_callback_, error));
}
} // namespace
......@@ -111,7 +115,7 @@ void JsonSanitizer::Sanitize(const std::string& unsafe_json,
const StringCallback& success_callback,
const StringCallback& error_callback) {
// JsonSanitizerAndroid does all its work synchronously, but posts any
// callbacks to the current message loop. This means it can be destroyed at
// callbacks to the current sequence. This means it can be destroyed at
// the end of this method.
JsonSanitizerAndroid sanitizer(success_callback, error_callback);
sanitizer.Sanitize(unsafe_json);
......
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