Commit 92a92ca8 authored by Hidehiko Abe's avatar Hidehiko Abe Committed by Commit Bot

Migrate callbacks in MediaAnalyticsClient to DBusMethodCallback.

BUG=739622
TEST=Ran on bots.

Change-Id: I6e968439859b4409a14621a03bd3a20f8ebe36f2
Reviewed-on: https://chromium-review.googlesource.com/901682
Commit-Queue: Hidehiko Abe <hidehiko@chromium.org>
Reviewed-by: default avatarToni Barzic <tbarzic@chromium.org>
Reviewed-by: default avatarDan Erat <derat@chromium.org>
Cr-Commit-Position: refs/heads/master@{#534718}
parent dc16e512
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "chromeos/dbus/fake_media_analytics_client.h" #include "chromeos/dbus/fake_media_analytics_client.h"
#include <utility>
#include "base/bind.h" #include "base/bind.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/threading/thread_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h"
...@@ -43,20 +45,23 @@ void FakeMediaAnalyticsClient::ClearMediaPerceptionSignalHandler() { ...@@ -43,20 +45,23 @@ void FakeMediaAnalyticsClient::ClearMediaPerceptionSignalHandler() {
media_perception_signal_handler_.Reset(); media_perception_signal_handler_.Reset();
} }
void FakeMediaAnalyticsClient::GetState(const StateCallback& callback) { void FakeMediaAnalyticsClient::GetState(
DBusMethodCallback<mri::State> callback) {
if (!process_running_) { if (!process_running_) {
callback.Run(false, current_state_); std::move(callback).Run(base::nullopt);
return; return;
} }
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::Bind(&FakeMediaAnalyticsClient::OnState, FROM_HERE,
weak_ptr_factory_.GetWeakPtr(), callback)); base::BindOnce(&FakeMediaAnalyticsClient::OnState,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
} }
void FakeMediaAnalyticsClient::SetState(const mri::State& state, void FakeMediaAnalyticsClient::SetState(
const StateCallback& callback) { const mri::State& state,
DBusMethodCallback<mri::State> callback) {
if (!process_running_) { if (!process_running_) {
callback.Run(false, current_state_); std::move(callback).Run(base::nullopt);
return; return;
} }
DCHECK(state.has_status()) << "Trying to set state without status."; DCHECK(state.has_status()) << "Trying to set state without status.";
...@@ -67,8 +72,9 @@ void FakeMediaAnalyticsClient::SetState(const mri::State& state, ...@@ -67,8 +72,9 @@ void FakeMediaAnalyticsClient::SetState(const mri::State& state,
"RESTARTING."; "RESTARTING.";
current_state_ = state; current_state_ = state;
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::Bind(&FakeMediaAnalyticsClient::OnState, FROM_HERE,
weak_ptr_factory_.GetWeakPtr(), callback)); base::BindOnce(&FakeMediaAnalyticsClient::OnState,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
} }
void FakeMediaAnalyticsClient::SetStateSuspended() { void FakeMediaAnalyticsClient::SetStateSuspended() {
...@@ -80,25 +86,27 @@ void FakeMediaAnalyticsClient::SetStateSuspended() { ...@@ -80,25 +86,27 @@ void FakeMediaAnalyticsClient::SetStateSuspended() {
current_state_ = suspended; current_state_ = suspended;
} }
void FakeMediaAnalyticsClient::OnState(const StateCallback& callback) { void FakeMediaAnalyticsClient::OnState(
callback.Run(true, current_state_); DBusMethodCallback<mri::State> callback) {
std::move(callback).Run(current_state_);
} }
void FakeMediaAnalyticsClient::GetDiagnostics( void FakeMediaAnalyticsClient::GetDiagnostics(
const DiagnosticsCallback& callback) { DBusMethodCallback<mri::Diagnostics> callback) {
if (!process_running_) { if (!process_running_) {
LOG(ERROR) << "Fake media analytics process not running."; LOG(ERROR) << "Fake media analytics process not running.";
callback.Run(false, mri::Diagnostics()); std::move(callback).Run(base::nullopt);
return; return;
} }
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::Bind(&FakeMediaAnalyticsClient::OnGetDiagnostics, FROM_HERE,
weak_ptr_factory_.GetWeakPtr(), callback)); base::BindOnce(&FakeMediaAnalyticsClient::OnGetDiagnostics,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
} }
void FakeMediaAnalyticsClient::OnGetDiagnostics( void FakeMediaAnalyticsClient::OnGetDiagnostics(
const DiagnosticsCallback& callback) { DBusMethodCallback<mri::Diagnostics> callback) {
callback.Run(true, diagnostics_); std::move(callback).Run(diagnostics_);
} }
void FakeMediaAnalyticsClient::OnMediaPerception( void FakeMediaAnalyticsClient::OnMediaPerception(
......
...@@ -22,13 +22,13 @@ class CHROMEOS_EXPORT FakeMediaAnalyticsClient : public MediaAnalyticsClient { ...@@ -22,13 +22,13 @@ class CHROMEOS_EXPORT FakeMediaAnalyticsClient : public MediaAnalyticsClient {
~FakeMediaAnalyticsClient() override; ~FakeMediaAnalyticsClient() override;
// Inherited from MediaAnalyticsClient. // Inherited from MediaAnalyticsClient.
void GetState(const StateCallback& callback) override; void GetState(DBusMethodCallback<mri::State> callback) override;
void SetState(const mri::State& state, void SetState(const mri::State& state,
const StateCallback& callback) override; DBusMethodCallback<mri::State> callback) override;
void SetMediaPerceptionSignalHandler( void SetMediaPerceptionSignalHandler(
const MediaPerceptionSignalHandler& handler) override; const MediaPerceptionSignalHandler& handler) override;
void ClearMediaPerceptionSignalHandler() override; void ClearMediaPerceptionSignalHandler() override;
void GetDiagnostics(const DiagnosticsCallback& callback) override; void GetDiagnostics(DBusMethodCallback<mri::Diagnostics> callback) override;
// Inherited from DBusClient. // Inherited from DBusClient.
void Init(dbus::Bus* bus) override; void Init(dbus::Bus* bus) override;
...@@ -48,10 +48,10 @@ class CHROMEOS_EXPORT FakeMediaAnalyticsClient : public MediaAnalyticsClient { ...@@ -48,10 +48,10 @@ class CHROMEOS_EXPORT FakeMediaAnalyticsClient : public MediaAnalyticsClient {
private: private:
// Echoes back the previously set state. // Echoes back the previously set state.
void OnState(const StateCallback& callback); void OnState(DBusMethodCallback<mri::State> callback);
// Runs callback with the Diagnostics proto provided in SetDiagnostics. // Runs callback with the Diagnostics proto provided in SetDiagnostics.
void OnGetDiagnostics(const DiagnosticsCallback& callback); void OnGetDiagnostics(DBusMethodCallback<mri::Diagnostics> callback);
// Runs callback with a MediaPerception proto provided in // Runs callback with a MediaPerception proto provided in
// FireMediaPerceptionEvent. // FireMediaPerceptionEvent.
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include <cstdint> #include <cstdint>
#include <string> #include <string>
#include <utility>
#include "base/bind.h" #include "base/bind.h"
#include "base/logging.h" #include "base/logging.h"
...@@ -36,17 +37,17 @@ class MediaAnalyticsClientImpl : public MediaAnalyticsClient { ...@@ -36,17 +37,17 @@ class MediaAnalyticsClientImpl : public MediaAnalyticsClient {
media_perception_signal_handler_.Reset(); media_perception_signal_handler_.Reset();
} }
void GetState(const StateCallback& callback) override { void GetState(DBusMethodCallback<mri::State> callback) override {
dbus::MethodCall method_call(media_perception::kMediaPerceptionServiceName, dbus::MethodCall method_call(media_perception::kMediaPerceptionServiceName,
media_perception::kStateFunction); media_perception::kStateFunction);
dbus_proxy_->CallMethod( dbus_proxy_->CallMethod(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::BindOnce(&MediaAnalyticsClientImpl::OnState, base::BindOnce(&MediaAnalyticsClientImpl::OnState,
weak_ptr_factory_.GetWeakPtr(), callback)); weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
} }
void SetState(const mri::State& state, void SetState(const mri::State& state,
const StateCallback& callback) override { DBusMethodCallback<mri::State> callback) override {
DCHECK(state.has_status()) << "Attempting to SetState without status set."; DCHECK(state.has_status()) << "Attempting to SetState without status set.";
dbus::MethodCall method_call(media_perception::kMediaPerceptionServiceName, dbus::MethodCall method_call(media_perception::kMediaPerceptionServiceName,
...@@ -58,17 +59,17 @@ class MediaAnalyticsClientImpl : public MediaAnalyticsClient { ...@@ -58,17 +59,17 @@ class MediaAnalyticsClientImpl : public MediaAnalyticsClient {
dbus_proxy_->CallMethod( dbus_proxy_->CallMethod(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::BindOnce(&MediaAnalyticsClientImpl::OnState, base::BindOnce(&MediaAnalyticsClientImpl::OnState,
weak_ptr_factory_.GetWeakPtr(), callback)); weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
} }
void GetDiagnostics(const DiagnosticsCallback& callback) override { void GetDiagnostics(DBusMethodCallback<mri::Diagnostics> callback) override {
dbus::MethodCall method_call(media_perception::kMediaPerceptionServiceName, dbus::MethodCall method_call(media_perception::kMediaPerceptionServiceName,
media_perception::kGetDiagnosticsFunction); media_perception::kGetDiagnosticsFunction);
// TODO(lasoren): Verify that this timeout setting is sufficient. // TODO(lasoren): Verify that this timeout setting is sufficient.
dbus_proxy_->CallMethod( dbus_proxy_->CallMethod(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::BindOnce(&MediaAnalyticsClientImpl::OnGetDiagnostics, base::BindOnce(&MediaAnalyticsClientImpl::OnGetDiagnostics,
weak_ptr_factory_.GetWeakPtr(), callback)); weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
} }
protected: protected:
...@@ -120,11 +121,12 @@ class MediaAnalyticsClientImpl : public MediaAnalyticsClient { ...@@ -120,11 +121,12 @@ class MediaAnalyticsClientImpl : public MediaAnalyticsClient {
media_perception_signal_handler_.Run(media_perception); media_perception_signal_handler_.Run(media_perception);
} }
void OnState(const StateCallback& callback, dbus::Response* response) { void OnState(DBusMethodCallback<mri::State> callback,
dbus::Response* response) {
mri::State state; mri::State state;
if (!response) { if (!response) {
LOG(ERROR) << "Call to State failed to get response."; LOG(ERROR) << "Call to State failed to get response.";
callback.Run(false, state); std::move(callback).Run(base::nullopt);
return; return;
} }
...@@ -134,25 +136,25 @@ class MediaAnalyticsClientImpl : public MediaAnalyticsClient { ...@@ -134,25 +136,25 @@ class MediaAnalyticsClientImpl : public MediaAnalyticsClient {
dbus::MessageReader reader(response); dbus::MessageReader reader(response);
if (!reader.PopArrayOfBytes(&bytes, &length)) { if (!reader.PopArrayOfBytes(&bytes, &length)) {
LOG(ERROR) << "Invalid D-Bus response: " << response->ToString(); LOG(ERROR) << "Invalid D-Bus response: " << response->ToString();
callback.Run(false, state); std::move(callback).Run(base::nullopt);
return; return;
} }
if (!state.ParseFromArray(bytes, length)) { if (!state.ParseFromArray(bytes, length)) {
LOG(ERROR) << "Failed to parse State message."; LOG(ERROR) << "Failed to parse State message.";
callback.Run(false, state); std::move(callback).Run(base::nullopt);
return; return;
} }
callback.Run(true, state); std::move(callback).Run(std::move(state));
} }
void OnGetDiagnostics(const DiagnosticsCallback& callback, void OnGetDiagnostics(DBusMethodCallback<mri::Diagnostics> callback,
dbus::Response* response) { dbus::Response* response) {
mri::Diagnostics diagnostics; mri::Diagnostics diagnostics;
if (!response) { if (!response) {
LOG(ERROR) << "Call to GetDiagnostics failed to get response."; LOG(ERROR) << "Call to GetDiagnostics failed to get response.";
callback.Run(false, diagnostics); std::move(callback).Run(base::nullopt);
return; return;
} }
...@@ -162,17 +164,17 @@ class MediaAnalyticsClientImpl : public MediaAnalyticsClient { ...@@ -162,17 +164,17 @@ class MediaAnalyticsClientImpl : public MediaAnalyticsClient {
dbus::MessageReader reader(response); dbus::MessageReader reader(response);
if (!reader.PopArrayOfBytes(&bytes, &length)) { if (!reader.PopArrayOfBytes(&bytes, &length)) {
LOG(ERROR) << "Invalid GetDiagnostics response: " << response->ToString(); LOG(ERROR) << "Invalid GetDiagnostics response: " << response->ToString();
callback.Run(false, diagnostics); std::move(callback).Run(base::nullopt);
return; return;
} }
if (!diagnostics.ParseFromArray(bytes, length)) { if (!diagnostics.ParseFromArray(bytes, length)) {
LOG(ERROR) << "Failed to parse Diagnostics message."; LOG(ERROR) << "Failed to parse Diagnostics message.";
callback.Run(false, diagnostics); std::move(callback).Run(base::nullopt);
return; return;
} }
callback.Run(true, diagnostics); std::move(callback).Run(std::move(diagnostics));
} }
dbus::ObjectProxy* dbus_proxy_; dbus::ObjectProxy* dbus_proxy_;
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "chromeos/chromeos_export.h" #include "chromeos/chromeos_export.h"
#include "chromeos/dbus/dbus_client.h" #include "chromeos/dbus/dbus_client.h"
#include "chromeos/dbus/dbus_method_call_status.h"
#include "chromeos/media_perception/media_perception.pb.h" #include "chromeos/media_perception/media_perception.pb.h"
namespace chromeos { namespace chromeos {
...@@ -17,27 +18,19 @@ namespace chromeos { ...@@ -17,27 +18,19 @@ namespace chromeos {
// running outside of Chrome. // running outside of Chrome.
class CHROMEOS_EXPORT MediaAnalyticsClient : public DBusClient { class CHROMEOS_EXPORT MediaAnalyticsClient : public DBusClient {
public: public:
// Callback type for a State proto message received from the media analytics
// process.
using StateCallback =
base::Callback<void(bool succeeded, const mri::State& state)>;
// Handler type for signal received from media analytics process. // Handler type for signal received from media analytics process.
using MediaPerceptionSignalHandler = using MediaPerceptionSignalHandler =
base::Callback<void(const mri::MediaPerception& media_perception)>; base::Callback<void(const mri::MediaPerception& media_perception)>;
// Callback type for a Diagnostics proto message received from the media
// analytics process.
using DiagnosticsCallback =
base::Callback<void(bool succeeded, const mri::Diagnostics& diagnostics)>;
~MediaAnalyticsClient() override; ~MediaAnalyticsClient() override;
// Gets the media analytics process state. // Gets the media analytics process state.
virtual void GetState(const StateCallback& callback) = 0; virtual void GetState(DBusMethodCallback<mri::State> callback) = 0;
// Sets the media analytics process state. |state.status| is expected to be // Sets the media analytics process state. |state.status| is expected to be
// set. // set.
virtual void SetState(const mri::State& state, virtual void SetState(const mri::State& state,
const StateCallback& callback) = 0; DBusMethodCallback<mri::State> callback) = 0;
// Register event handler for the MediaPerception protos received as signal // Register event handler for the MediaPerception protos received as signal
// from the media analytics process. // from the media analytics process.
...@@ -50,7 +43,8 @@ class CHROMEOS_EXPORT MediaAnalyticsClient : public DBusClient { ...@@ -50,7 +43,8 @@ class CHROMEOS_EXPORT MediaAnalyticsClient : public DBusClient {
// API for getting diagnostic information from the media analytics process // API for getting diagnostic information from the media analytics process
// over D-Bus as a Diagnostics proto message. // over D-Bus as a Diagnostics proto message.
virtual void GetDiagnostics(const DiagnosticsCallback& callback) = 0; virtual void GetDiagnostics(
DBusMethodCallback<mri::Diagnostics> callback) = 0;
// Factory function, creates new instance and returns ownership. // Factory function, creates new instance and returns ownership.
// For normal usage, access the singleton via DbusThreadManager::Get(). // For normal usage, access the singleton via DbusThreadManager::Get().
......
...@@ -4,6 +4,10 @@ ...@@ -4,6 +4,10 @@
#include "extensions/browser/api/media_perception_private/media_perception_api_manager.h" #include "extensions/browser/api/media_perception_private/media_perception_api_manager.h"
#include <memory>
#include <utility>
#include <vector>
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/lazy_instance.h" #include "base/lazy_instance.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
...@@ -290,28 +294,26 @@ void MediaPerceptionAPIManager::UpstartRestartCallback( ...@@ -290,28 +294,26 @@ void MediaPerceptionAPIManager::UpstartRestartCallback(
GetState(callback); GetState(callback);
} }
void MediaPerceptionAPIManager::StateCallback(const APIStateCallback& callback, void MediaPerceptionAPIManager::StateCallback(
bool succeeded, const APIStateCallback& callback,
const mri::State& state_proto) { base::Optional<mri::State> result) {
media_perception::State state; if (!result.has_value()) {
if (!succeeded) {
callback.Run(GetStateForServiceError( callback.Run(GetStateForServiceError(
media_perception::SERVICE_ERROR_SERVICE_UNREACHABLE)); media_perception::SERVICE_ERROR_SERVICE_UNREACHABLE));
return; return;
} }
callback.Run(media_perception::StateProtoToIdl(state_proto)); callback.Run(media_perception::StateProtoToIdl(result.value()));
} }
void MediaPerceptionAPIManager::GetDiagnosticsCallback( void MediaPerceptionAPIManager::GetDiagnosticsCallback(
const APIGetDiagnosticsCallback& callback, const APIGetDiagnosticsCallback& callback,
bool succeeded, base::Optional<mri::Diagnostics> result) {
const mri::Diagnostics& diagnostics_proto) { if (!result.has_value()) {
if (!succeeded) {
callback.Run(GetDiagnosticsForServiceError( callback.Run(GetDiagnosticsForServiceError(
media_perception::SERVICE_ERROR_SERVICE_UNREACHABLE)); media_perception::SERVICE_ERROR_SERVICE_UNREACHABLE));
return; return;
} }
callback.Run(media_perception::DiagnosticsProtoToIdl(diagnostics_proto)); callback.Run(media_perception::DiagnosticsProtoToIdl(result.value()));
} }
void MediaPerceptionAPIManager::MediaPerceptionSignalHandler( void MediaPerceptionAPIManager::MediaPerceptionSignalHandler(
......
...@@ -5,7 +5,10 @@ ...@@ -5,7 +5,10 @@
#ifndef EXTENSIONS_BROWSER_API_MEDIA_PERCEPTION_PRIVATE_MEDIA_PERCEPTION_API_MANAGER_H_ #ifndef EXTENSIONS_BROWSER_API_MEDIA_PERCEPTION_PRIVATE_MEDIA_PERCEPTION_API_MANAGER_H_
#define EXTENSIONS_BROWSER_API_MEDIA_PERCEPTION_PRIVATE_MEDIA_PERCEPTION_API_MANAGER_H_ #define EXTENSIONS_BROWSER_API_MEDIA_PERCEPTION_PRIVATE_MEDIA_PERCEPTION_API_MANAGER_H_
#include <string>
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/optional.h"
#include "chromeos/media_perception/media_perception.pb.h" #include "chromeos/media_perception/media_perception.pb.h"
#include "extensions/browser/browser_context_keyed_api_factory.h" #include "extensions/browser/browser_context_keyed_api_factory.h"
#include "extensions/common/api/media_perception_private.h" #include "extensions/common/api/media_perception_private.h"
...@@ -73,14 +76,12 @@ class MediaPerceptionAPIManager : public BrowserContextKeyedAPI { ...@@ -73,14 +76,12 @@ class MediaPerceptionAPIManager : public BrowserContextKeyedAPI {
// Callback for State D-Bus method calls to the media analytics process. // Callback for State D-Bus method calls to the media analytics process.
void StateCallback(const APIStateCallback& callback, void StateCallback(const APIStateCallback& callback,
bool succeeded, base::Optional<mri::State> state);
const mri::State& state);
// Callback for GetDiagnostics D-Bus method calls to the media analytics // Callback for GetDiagnostics D-Bus method calls to the media analytics
// process. // process.
void GetDiagnosticsCallback(const APIGetDiagnosticsCallback& callback, void GetDiagnosticsCallback(const APIGetDiagnosticsCallback& callback,
bool succeeded, base::Optional<mri::Diagnostics> diagnostics);
const mri::Diagnostics& diagnostics);
// Callback for Upstart command to start media analytics process. // Callback for Upstart command to start media analytics process.
void UpstartStartCallback(const APIStateCallback& callback, void UpstartStartCallback(const APIStateCallback& callback,
......
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