blob: 3511f9f014b43dbdb18d5bcae7dc98951ebc774c [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.
Anton Muhincfde8692014-11-25 03:36:59 +040041 void OnResultsChanged(const native_types::Object& results) override;
Alex Vakulenkof6b38712014-09-03 16:23:38 -070042 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;
Anton Muhincfde8692014-11-25 03:36:59 +040048 // Handles calls to org.chromium.Buffet.Command.SetResults(results).
49 bool SetResults(chromeos::ErrorPtr* error,
50 const chromeos::VariantDictionary& results) override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070051 // Handles calls to org.chromium.Buffet.Command.Abort().
Alex Vakulenko2348e422014-11-21 08:57:57 -080052 void Abort() override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070053 // Handles calls to org.chromium.Buffet.Command.Cancel().
Alex Vakulenko2348e422014-11-21 08:57:57 -080054 void Cancel() override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070055 // Handles calls to org.chromium.Buffet.Command.Done().
Alex Vakulenko2348e422014-11-21 08:57:57 -080056 void Done() override;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070057
Alex Vakulenko4866ac92014-08-20 12:53:33 -070058 CommandInstance* command_instance_;
Alex Vakulenko2348e422014-11-21 08:57:57 -080059 org::chromium::Buffet::CommandAdaptor dbus_adaptor_{this};
Alex Vakulenko4866ac92014-08-20 12:53:33 -070060 chromeos::dbus_utils::DBusObject dbus_object_;
61
62 friend class DBusCommandProxyTest;
Alex Vakulenkof6b38712014-09-03 16:23:38 -070063 friend class DBusCommandDispacherTest;
Alex Vakulenko4866ac92014-08-20 12:53:33 -070064 DISALLOW_COPY_AND_ASSIGN(DBusCommandProxy);
65};
66
67} // namespace buffet
68
69#endif // BUFFET_COMMANDS_DBUS_COMMAND_PROXY_H_