blob: f3f3e4ea65da8fa23cf0196462502367821695d5 [file] [log] [blame]
Alex Vakulenko4866ac92014-08-20 12:53:33 -07001// Copyright 2014 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BUFFET_COMMANDS_DBUS_COMMAND_PROXY_H_
6#define BUFFET_COMMANDS_DBUS_COMMAND_PROXY_H_
7
Alex Vakulenko4866ac92014-08-20 12:53:33 -07008#include <string>
9
Alex Vakulenko132617a2014-09-04 08:59:43 -070010#include <base/macros.h>
Alex Vakulenkof6b38712014-09-03 16:23:38 -070011#include <chromeos/dbus/data_serialization.h>
Alex Vakulenko4866ac92014-08-20 12:53:33 -070012#include <chromeos/dbus/dbus_object.h>
13
Alex Vakulenkof6b38712014-09-03 16:23:38 -070014#include "buffet/commands/command_proxy_interface.h"
Anton Muhin5191e812014-10-30 17:49:48 +040015#include "buffet/libbuffet/dbus_constants.h"
Alex Vakulenko2348e422014-11-21 08:57:57 -080016#include "buffet/org.chromium.Buffet.Command.h"
Alex Vakulenkof6b38712014-09-03 16:23:38 -070017
Alex Vakulenko4866ac92014-08-20 12:53:33 -070018namespace chromeos {
19namespace dbus_utils {
20class ExportedObjectManager;
21} // namespace dbus_utils
22} // namespace chromeos
23
24namespace buffet {
25
26class CommandInstance;
27
Alex Vakulenko2348e422014-11-21 08:57:57 -080028class DBusCommandProxy : public CommandProxyInterface,
29 public org::chromium::Buffet::CommandInterface {
Alex Vakulenko4866ac92014-08-20 12:53:33 -070030 public:
31 DBusCommandProxy(chromeos::dbus_utils::ExportedObjectManager* object_manager,
32 const scoped_refptr<dbus::Bus>& bus,
Anton Muhin5191e812014-10-30 17:49:48 +040033 CommandInstance* command_instance,
34 std::string object_path);
Alex Vakulenkof6b38712014-09-03 16:23:38 -070035 ~DBusCommandProxy() override = default;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070036
37 void RegisterAsync(
38 const chromeos::dbus_utils::AsyncEventSequencer::CompletionAction&
39 completion_callback);
40
Alex Vakulenkof6b38712014-09-03 16:23:38 -070041 // CommandProxyInterface implementation/overloads.
42 void OnStatusChanged(const std::string& status) override;
43 void OnProgressChanged(int progress) override;
44
Alex Vakulenko4866ac92014-08-20 12:53:33 -070045 private:
Alex Vakulenko4866ac92014-08-20 12:53:33 -070046 // Handles calls to org.chromium.Buffet.Command.SetProgress(progress).
Alex Vakulenko2348e422014-11-21 08:57:57 -080047 bool SetProgress(chromeos::ErrorPtr* error, int32_t progress) override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070048 // Handles calls to org.chromium.Buffet.Command.Abort().
Alex Vakulenko2348e422014-11-21 08:57:57 -080049 void Abort() override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070050 // Handles calls to org.chromium.Buffet.Command.Cancel().
Alex Vakulenko2348e422014-11-21 08:57:57 -080051 void Cancel() override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070052 // Handles calls to org.chromium.Buffet.Command.Done().
Alex Vakulenko2348e422014-11-21 08:57:57 -080053 void Done() override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070054
Alex Vakulenko4866ac92014-08-20 12:53:33 -070055 CommandInstance* command_instance_;
Alex Vakulenko2348e422014-11-21 08:57:57 -080056 org::chromium::Buffet::CommandAdaptor dbus_adaptor_{this};
Alex Vakulenko4866ac92014-08-20 12:53:33 -070057 chromeos::dbus_utils::DBusObject dbus_object_;
58
59 friend class DBusCommandProxyTest;
Alex Vakulenkof6b38712014-09-03 16:23:38 -070060 friend class DBusCommandDispacherTest;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070061 DISALLOW_COPY_AND_ASSIGN(DBusCommandProxy);
62};
63
64} // namespace buffet
65
66#endif // BUFFET_COMMANDS_DBUS_COMMAND_PROXY_H_