buffet: Add ExportedObjectManager delegate

This makes it easy to export an object manager.  We'll use this very
soon to implement the ObjectManager interface on the root Buffet
object.

BUG=chromium:359190
TEST=Unittests

Change-Id: I19d2da33b81557431c5787937c49a18e7d7bacb2
Reviewed-on: https://chromium-review.googlesource.com/196387
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Christopher Wiley <wiley@chromium.org>
Tested-by: Christopher Wiley <wiley@chromium.org>
diff --git a/buffet/exported_property_set.h b/buffet/exported_property_set.h
index c464a8b..8e535b6 100644
--- a/buffet/exported_property_set.h
+++ b/buffet/exported_property_set.h
@@ -11,7 +11,6 @@
 #include <base/memory/weak_ptr.h>
 #include <dbus/exported_object.h>
 #include <dbus/message.h>
-#include <gtest/gtest_prod.h>
 
 namespace buffet {
 
@@ -105,6 +104,8 @@
   // are exported to the DBus object.  |cb| will be called on the origin
   // thread.
   void Init(const OnInitFinish& cb);
+  base::Callback<void(dbus::MessageWriter* writer)> GetPropertyWriter(
+      const std::string& interface);
 
  protected:
   void RegisterProperty(const std::string& interface_name,
@@ -112,6 +113,11 @@
                         ExportedPropertyBase* exported_property);
 
  private:
+  // Used to write the dictionary of string->variant to a message.
+  // This dictionary represents the property name/value pairs for the
+  // given interface.
+  void WritePropertiesDictToMessage(const std::string& interface_name,
+                                    dbus::MessageWriter* writer);
   void HandleGetAll(dbus::MethodCall* method_call,
                     dbus::ExportedObject::ResponseSender response_sender);
   void HandleGet(dbus::MethodCall* method_call,