blob: c0c909bf185c4b55ab768455a517b5c3bf57161f [file] [log] [blame]
Paul Stewart1dce1ae2014-10-01 05:30:18 -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 CHROMEOS_DBUS_BINDINGS_PROXY_GENERATOR_H_
6#define CHROMEOS_DBUS_BINDINGS_PROXY_GENERATOR_H_
7
8#include <string>
9#include <vector>
10
11#include <base/macros.h>
12
13#include "chromeos-dbus-bindings/header_generator.h"
14#include "chromeos-dbus-bindings/indented_text.h"
15#include "chromeos-dbus-bindings/interface.h"
16
17namespace base {
18
19class FilePath;
20
21} // namespace base
22
23namespace chromeos_dbus_bindings {
24
25class IndentedText;
26struct Interface;
27
28class ProxyGenerator : public HeaderGenerator {
29 public:
Alex Vakulenko6ef2d732014-11-25 14:04:27 -080030 static bool GenerateProxies(const ServiceConfig& config,
31 const std::vector<Interface>& interfaces,
Alex Vakulenkoc95f06b2014-11-20 15:06:09 -080032 const base::FilePath& output_file);
Paul Stewart1dce1ae2014-10-01 05:30:18 -070033
34 private:
35 friend class ProxyGeneratorTest;
36
Alex Vakulenkoc95f06b2014-11-20 15:06:09 -080037 // Generates one interface proxy.
Alex Vakulenko6ef2d732014-11-25 14:04:27 -080038 static void GenerateInterfaceProxy(const ServiceConfig& config,
39 const Interface& interface,
Alex Vakulenkoc95f06b2014-11-20 15:06:09 -080040 IndentedText* text);
41
Paul Stewart1dce1ae2014-10-01 05:30:18 -070042 // Generates the constructor and destructor for the proxy.
Alex Vakulenko6ef2d732014-11-25 14:04:27 -080043 static void AddConstructor(const ServiceConfig& config,
44 const Interface& interface,
Paul Stewart1dce1ae2014-10-01 05:30:18 -070045 const std::string& class_name,
46 IndentedText* text);
47 static void AddDestructor(const std::string& class_name,
48 IndentedText* text);
49
50 // Generates a callback for signal receiver registration completion.
Alex Vakulenkoc95f06b2014-11-20 15:06:09 -080051 static void AddSignalConnectedCallback(IndentedText* text);
52
53 // Generates ReleaseObjectProxy() method to release ownership
54 // of the object proxy.
55 static void AddReleaseObjectProxy(IndentedText* text);
Paul Stewart1dce1ae2014-10-01 05:30:18 -070056
57 // Generates the method signatures for signal receivers.
Alex Vakulenkoc95f06b2014-11-20 15:06:09 -080058 static void AddSignalReceiver(const Interface& interface,
Alex Vakulenkofafef132014-11-03 14:52:09 -080059 IndentedText* text);
Paul Stewart1dce1ae2014-10-01 05:30:18 -070060
61 // Generates a native C++ method which calls a D-Bus method on the proxy.
62 static void AddMethodProxy(const Interface::Method& interface,
63 const std::string& interface_name,
64 IndentedText* text);
65
66 // Generates the signal handler name for a given signal name.
67 static std::string GetHandlerNameForSignal(const std::string& signal);
68
69 DISALLOW_COPY_AND_ASSIGN(ProxyGenerator);
70};
71
72} // namespace chromeos_dbus_bindings
73
74#endif // CHROMEOS_DBUS_BINDINGS_PROXY_GENERATOR_H_