Commit acb19208 authored by Xiyuan Xia's avatar Xiyuan Xia Committed by Commit Bot

cros: Fix diagnostics.sendPacket calling dbus on a wrong thread

Bug: 962884
Change-Id: Ib8b3b177bb6ab94e11ea7d2db9b52721c442a142
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1613370Reviewed-by: default avatarToni Baržić <tbarzic@chromium.org>
Commit-Queue: Xiyuan Xia <xiyuan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#660065}
parent bef5e42e
......@@ -8,27 +8,15 @@ namespace {
const char kErrorPingNotImplemented[] = "Not implemented";
const char kErrorPingFailed[] = "Failed to send ping packet";
}
} // namespace
namespace extensions {
namespace SendPacket = api::diagnostics::SendPacket;
DiagnosticsSendPacketFunction::DiagnosticsSendPacketFunction() {
}
DiagnosticsSendPacketFunction::~DiagnosticsSendPacketFunction() {
}
bool DiagnosticsSendPacketFunction::Prepare() {
parameters_ = SendPacket::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(parameters_.get());
return true;
}
bool DiagnosticsSendPacketFunction::Respond() {
return error_.empty();
}
DiagnosticsSendPacketFunction::DiagnosticsSendPacketFunction() = default;
DiagnosticsSendPacketFunction::~DiagnosticsSendPacketFunction() = default;
void DiagnosticsSendPacketFunction::OnCompleted(
SendPacketResultCode result_code,
......@@ -39,17 +27,16 @@ void DiagnosticsSendPacketFunction::OnCompleted(
api::diagnostics::SendPacketResult result;
result.ip = ip;
result.latency = latency;
results_ = SendPacket::Results::Create(result);
Respond(OneArgument(SendPacket::Results::Create(result)));
break;
}
case SEND_PACKET_NOT_IMPLEMENTED:
SetError(kErrorPingNotImplemented);
Respond(Error(kErrorPingNotImplemented));
break;
case SEND_PACKET_FAILED:
SetError(kErrorPingFailed);
Respond(Error(kErrorPingFailed));
break;
}
AsyncWorkCompleted();
}
} // namespace extensions
......@@ -8,12 +8,12 @@
#include <memory>
#include <string>
#include "extensions/browser/api/async_api_function.h"
#include "extensions/browser/extension_function.h"
#include "extensions/common/api/diagnostics.h"
namespace extensions {
class DiagnosticsSendPacketFunction : public AsyncApiFunction {
class DiagnosticsSendPacketFunction : public UIThreadExtensionFunction {
public:
// Result code for sending packet. Platform specific AsyncWorkStart() will
// finish with this ResultCode so we can maximize shared code.
......@@ -35,19 +35,13 @@ class DiagnosticsSendPacketFunction : public AsyncApiFunction {
protected:
~DiagnosticsSendPacketFunction() override;
// AsyncApiFunction:
bool Prepare() override;
// This methods will be implemented differently on different platforms.
void AsyncWorkStart() override;
bool Respond() override;
// UIThreadExtensionFunction:
ResponseAction Run() override;
private:
void SendPingPacket();
void OnCompleted(SendPacketResultCode result_code,
const std::string& ip,
double latency);
std::unique_ptr<api::diagnostics::SendPacket::Params> parameters_;
};
} // namespace extensions
......
......@@ -66,23 +66,27 @@ void OnTestICMPCompleted(const SendPacketCallback& callback,
} // namespace
void DiagnosticsSendPacketFunction::AsyncWorkStart() {
ExtensionFunction::ResponseAction DiagnosticsSendPacketFunction::Run() {
auto params = api::diagnostics::SendPacket::Params::Create(*args_);
std::map<std::string, std::string> config;
config[kCount] = kDefaultCount;
if (parameters_->options.ttl)
config[kTTL] = base::NumberToString(*parameters_->options.ttl);
if (parameters_->options.timeout)
config[kTimeout] = base::NumberToString(*parameters_->options.timeout);
if (parameters_->options.size)
config[kSize] = base::NumberToString(*parameters_->options.size);
if (params->options.ttl)
config[kTTL] = base::NumberToString(*params->options.ttl);
if (params->options.timeout)
config[kTimeout] = base::NumberToString(*params->options.timeout);
if (params->options.size)
config[kSize] = base::NumberToString(*params->options.size);
chromeos::DBusThreadManager::Get()
->GetDebugDaemonClient()
->TestICMPWithOptions(
parameters_->options.ip, config,
params->options.ip, config,
base::Bind(
OnTestICMPCompleted,
base::Bind(&DiagnosticsSendPacketFunction::OnCompleted, this)));
return RespondLater();
}
} // namespace extensions
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