| Index: chromeos/dbus/update_engine_client.cc
|
| diff --git a/chromeos/dbus/update_engine_client.cc b/chromeos/dbus/update_engine_client.cc
|
| index d13ddcaeb46dfa48a75efa249b1d8c1df0ab9032..13256e108c84f864ecfbf103d88b147c9607a6f4 100644
|
| --- a/chromeos/dbus/update_engine_client.cc
|
| +++ b/chromeos/dbus/update_engine_client.cc
|
| @@ -14,8 +14,13 @@
|
| #include "third_party/cros_system_api/dbus/service_constants.h"
|
|
|
| namespace chromeos {
|
| +
|
| namespace {
|
|
|
| +const char kReleaseChannelDev[] = "dev-channel";
|
| +const char kReleaseChannelBeta[] = "beta-channel";
|
| +const char kReleaseChannelStable[] = "stable-channel";
|
| +
|
| // Returns UPDATE_STATUS_ERROR on error.
|
| UpdateEngineClient::UpdateStatusOperation UpdateStatusFromString(
|
| const std::string& str) {
|
| @@ -43,6 +48,12 @@ void EmptyUpdateCheckCallbackBody(
|
| UpdateEngineClient::UpdateCheckResult unused_result) {
|
| }
|
|
|
| +bool IsValidChannel(const std::string& channel) {
|
| + return channel == kReleaseChannelDev ||
|
| + channel == kReleaseChannelBeta ||
|
| + channel == kReleaseChannelStable;
|
| +}
|
| +
|
| } // namespace
|
|
|
| // The UpdateEngineClient implementation used in production.
|
| @@ -162,6 +173,50 @@ class UpdateEngineClientImpl : public UpdateEngineClient {
|
| return last_status_;
|
| }
|
|
|
| + // UpdateEngineClient override.
|
| + virtual void SetChannel(const std::string& target_channel,
|
| + bool is_powerwash_allowed) OVERRIDE {
|
| + if (!IsValidChannel(target_channel)) {
|
| + LOG(ERROR) << "Invalid channel name: " << target_channel;
|
| + return;
|
| + }
|
| +
|
| + dbus::MethodCall method_call(
|
| + update_engine::kUpdateEngineInterface,
|
| + update_engine::kSetChannel);
|
| + dbus::MessageWriter writer(&method_call);
|
| + writer.AppendString(target_channel);
|
| + writer.AppendBool(is_powerwash_allowed);
|
| +
|
| + VLOG(1) << "Requesting to set channel: "
|
| + << "target_channel=" << target_channel << ", "
|
| + << "is_powerwash_allowed=" << is_powerwash_allowed;
|
| + update_engine_proxy_->CallMethod(
|
| + &method_call,
|
| + dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
|
| + base::Bind(&UpdateEngineClientImpl::OnSetChannel,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| + }
|
| +
|
| + // UpdateEngineClient override.
|
| + virtual void GetChannel(bool get_current_channel,
|
| + const GetChannelCallback& callback) OVERRIDE {
|
| + dbus::MethodCall method_call(
|
| + update_engine::kUpdateEngineInterface,
|
| + update_engine::kGetChannel);
|
| + dbus::MessageWriter writer(&method_call);
|
| + writer.AppendBool(get_current_channel);
|
| +
|
| + VLOG(1) << "Requesting to get channel, get_current_channel="
|
| + << get_current_channel;
|
| + update_engine_proxy_->CallMethod(
|
| + &method_call,
|
| + dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
|
| + base::Bind(&UpdateEngineClientImpl::OnGetChannel,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + callback));
|
| + }
|
| +
|
| private:
|
| void GetUpdateEngineStatus() {
|
| dbus::MethodCall method_call(
|
| @@ -251,6 +306,34 @@ class UpdateEngineClientImpl : public UpdateEngineClient {
|
| LOG(ERROR) << "GetStatus request failed with error: " << error->ToString();
|
| }
|
|
|
| + // Called when a response for SetReleaseTrack() is received.
|
| + void OnSetChannel(dbus::Response* response) {
|
| + if (!response) {
|
| + LOG(ERROR) << "Failed to request setting channel";
|
| + return;
|
| + }
|
| + VLOG(1) << "Succeeded to set channel";
|
| + }
|
| +
|
| + // Called when a response for GetChannel() is received.
|
| + void OnGetChannel(const GetReleaseTrackCallback& callback,
|
| + dbus::Response* response) {
|
| + if (!response) {
|
| + LOG(ERROR) << "Failed to request getting channel";
|
| + callback.Run("");
|
| + return;
|
| + }
|
| + dbus::MessageReader reader(response);
|
| + std::string channel;
|
| + if (!reader.PopString(&channel)) {
|
| + LOG(ERROR) << "Incorrect response: " << response->ToString();
|
| + callback.Run("");
|
| + return;
|
| + }
|
| + VLOG(1) << "The channel received: " << channel;
|
| + callback.Run(channel);
|
| + }
|
| +
|
| // Called when a status update signal is received.
|
| void StatusUpdateReceived(dbus::Signal* signal) {
|
| VLOG(1) << "Status update signal received: " << signal->ToString();
|
| @@ -318,6 +401,18 @@ class UpdateEngineClientStubImpl : public UpdateEngineClient {
|
| callback.Run("beta-channel");
|
| }
|
| virtual Status GetLastStatus() OVERRIDE { return Status(); }
|
| + virtual void SetChannel(const std::string& target_channel,
|
| + bool is_powerwash_allowed) OVERRIDE {
|
| + LOG(INFO) << "Requesting to set channel: "
|
| + << "target_channel=" << target_channel << ", "
|
| + << "is_powerwash_allowed=" << is_powerwash_allowed;
|
| + }
|
| + virtual void GetChannel(bool get_current_channel,
|
| + const GetChannelCallback& callback) OVERRIDE {
|
| + LOG(INFO) << "Requesting to get channel, get_current_channel="
|
| + << get_current_channel;
|
| + callback.Run("beta-channel");
|
| + }
|
| };
|
|
|
| UpdateEngineClient::UpdateEngineClient() {
|
|
|