blob: aac671cb14e82ae31f4e2aaacdd02afc88eab99a [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"
Alex Vakulenko2348e422014-11-21 08:57:57 -080015#include "buffet/org.chromium.Buffet.Command.h"
Alex Vakulenkof6b38712014-09-03 16:23:38 -070016
Alex Vakulenko4866ac92014-08-20 12:53:33 -070017namespace chromeos {
18namespace dbus_utils {
19class ExportedObjectManager;
20} // namespace dbus_utils
21} // namespace chromeos
22
23namespace buffet {
24
25class CommandInstance;
26
Alex Vakulenko2348e422014-11-21 08:57:57 -080027class DBusCommandProxy : public CommandProxyInterface,
28 public org::chromium::Buffet::CommandInterface {
Alex Vakulenko4866ac92014-08-20 12:53:33 -070029 public:
30 DBusCommandProxy(chromeos::dbus_utils::ExportedObjectManager* object_manager,
31 const scoped_refptr<dbus::Bus>& bus,
Anton Muhin5191e812014-10-30 17:49:48 +040032 CommandInstance* command_instance,
33 std::string object_path);
Alex Vakulenkof6b38712014-09-03 16:23:38 -070034 ~DBusCommandProxy() override = default;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070035
36 void RegisterAsync(
37 const chromeos::dbus_utils::AsyncEventSequencer::CompletionAction&
38 completion_callback);
39
Alex Vakulenkof6b38712014-09-03 16:23:38 -070040 // CommandProxyInterface implementation/overloads.
Alex Vakulenkob211c102015-04-21 11:43:23 -070041 void OnResultsChanged() override;
42 void OnStatusChanged() override;
43 void OnProgressChanged() override;
Alex Vakulenkof6b38712014-09-03 16:23:38 -070044
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).
Vitaly Buka4129dfa2015-04-29 12:16:58 -070047 bool SetProgress(chromeos::ErrorPtr* error,
48 const chromeos::VariantDictionary& progress) override;
Anton Muhincfde8692014-11-25 03:36:59 +040049 // Handles calls to org.chromium.Buffet.Command.SetResults(results).
50 bool SetResults(chromeos::ErrorPtr* error,
51 const chromeos::VariantDictionary& results) override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070052 // Handles calls to org.chromium.Buffet.Command.Abort().
Alex Vakulenko2348e422014-11-21 08:57:57 -080053 void Abort() override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070054 // Handles calls to org.chromium.Buffet.Command.Cancel().
Alex Vakulenko2348e422014-11-21 08:57:57 -080055 void Cancel() override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070056 // Handles calls to org.chromium.Buffet.Command.Done().
Alex Vakulenko2348e422014-11-21 08:57:57 -080057 void Done() override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070058
Alex Vakulenko4866ac92014-08-20 12:53:33 -070059 CommandInstance* command_instance_;
Alex Vakulenko2348e422014-11-21 08:57:57 -080060 org::chromium::Buffet::CommandAdaptor dbus_adaptor_{this};
Alex Vakulenko4866ac92014-08-20 12:53:33 -070061 chromeos::dbus_utils::DBusObject dbus_object_;
62
63 friend class DBusCommandProxyTest;
Alex Vakulenkof6b38712014-09-03 16:23:38 -070064 friend class DBusCommandDispacherTest;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070065 DISALLOW_COPY_AND_ASSIGN(DBusCommandProxy);
66};
67
68} // namespace buffet
69
70#endif // BUFFET_COMMANDS_DBUS_COMMAND_PROXY_H_