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