buffet: libchromeos: Migrate ExportedPropertySet to libchromeos

We want to reuse this in peerd.  As a side effect, we're forced to
pull parts of dbus_utils, and patch up a bunch of namespace issues.

BUG=chromium:398626
TEST=libchromeos/buffet unittests.

Change-Id: Id7f40c95d1677ec0460ce1677c0933478a315d8c
Reviewed-on: https://chromium-review.googlesource.com/211483
Tested-by: Christopher Wiley <wiley@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Christopher Wiley <wiley@chromium.org>
diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index 7870fc7..6254e56 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -43,7 +43,6 @@
         'error.cc',
         'error_codes.cc',
         'exported_object_manager.cc',
-        'exported_property_set.cc',
         'http_request.cc',
         'http_connection_curl.cc',
         'http_transport_curl.cc',
@@ -99,7 +98,6 @@
         'device_registration_info_unittest.cc',
         'error_unittest.cc',
         'exported_object_manager_unittest.cc',
-        'exported_property_set_unittest.cc',
         'http_connection_fake.cc',
         'http_transport_fake.cc',
         'http_utils_unittest.cc',
diff --git a/buffet/dbus_utils.cc b/buffet/dbus_utils.cc
index 5c02fb3..099abc1 100644
--- a/buffet/dbus_utils.cc
+++ b/buffet/dbus_utils.cc
@@ -4,6 +4,8 @@
 
 #include "buffet/dbus_utils.h"
 
+#include <string>
+
 #include <base/bind.h>
 #include <base/logging.h>
 
@@ -29,14 +31,6 @@
 
 }  // namespace
 
-scoped_ptr<dbus::Response> GetBadArgsError(dbus::MethodCall* method_call,
-                                           const std::string& message) {
-  LOG(ERROR) << "Error while handling DBus call: " << message;
-  scoped_ptr<dbus::ErrorResponse> resp(dbus::ErrorResponse::FromMethodCall(
-      method_call, "org.freedesktop.DBus.Error.InvalidArgs", message));
-  return scoped_ptr<dbus::Response>(resp.release());
-}
-
 scoped_ptr<dbus::Response> GetDBusError(dbus::MethodCall* method_call,
                                         const Error* error) {
   std::string message;
diff --git a/buffet/dbus_utils.h b/buffet/dbus_utils.h
index 6314531..ed4a76c 100644
--- a/buffet/dbus_utils.h
+++ b/buffet/dbus_utils.h
@@ -5,8 +5,6 @@
 #ifndef BUFFET_DBUS_UTILS_H_
 #define BUFFET_DBUS_UTILS_H_
 
-#include <string>
-
 #include <base/memory/scoped_ptr.h>
 #include <dbus/exported_object.h>
 #include <dbus/message.h>
@@ -17,13 +15,9 @@
 
 namespace dbus_utils {
 
-scoped_ptr<dbus::Response> GetBadArgsError(dbus::MethodCall* method_call,
-                                           const std::string& message);
-
 scoped_ptr<dbus::Response> GetDBusError(dbus::MethodCall* method_call,
                                         const Error* error);
 
-
 dbus::ExportedObject::MethodCallCallback GetExportableDBusMethod(
     base::Callback<scoped_ptr<dbus::Response>(dbus::MethodCall*)> handler);
 
diff --git a/buffet/exported_object_manager.h b/buffet/exported_object_manager.h
index d483db0..212609e 100644
--- a/buffet/exported_object_manager.h
+++ b/buffet/exported_object_manager.h
@@ -11,10 +11,9 @@
 #include <base/memory/weak_ptr.h>
 #include <dbus/bus.h>
 #include <dbus/exported_object.h>
+#include <dbus/message.h>
 #include <dbus/object_path.h>
 
-#include "buffet/exported_property_set.h"
-
 namespace buffet {
 
 namespace dbus_utils {
diff --git a/buffet/exported_property_set.cc b/buffet/exported_property_set.cc
deleted file mode 100644
index 3ab3c2d..0000000
--- a/buffet/exported_property_set.cc
+++ /dev/null
@@ -1,340 +0,0 @@
-// Copyright 2014 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "buffet/exported_property_set.h"
-
-#include <base/bind.h>
-#include <chromeos/async_event_sequencer.h>
-#include <dbus/bus.h>  // For kPropertyInterface
-#include <dbus/property.h>  // For kPropertyInterface
-
-#include "buffet/dbus_utils.h"
-
-using chromeos::dbus_utils::AsyncEventSequencer;
-
-namespace buffet {
-
-namespace dbus_utils {
-
-namespace {
-const char kExportFailedMessage[] = "Failed to register DBus method.";
-}  // namespace
-
-ExportedPropertySet::ExportedPropertySet(dbus::Bus* bus,
-                                         const dbus::ObjectPath& path)
-    : bus_(bus), exported_object_(bus->GetExportedObject(path)),
-      weak_ptr_factory_(this) { }
-
-void ExportedPropertySet::Init(const OnInitFinish& cb) {
-  bus_->AssertOnOriginThread();
-  scoped_refptr<AsyncEventSequencer> sequencer(new AsyncEventSequencer());
-  exported_object_->ExportMethod(
-      dbus::kPropertiesInterface, dbus::kPropertiesGetAll,
-      base::Bind(&ExportedPropertySet::HandleGetAll,
-                 weak_ptr_factory_.GetWeakPtr()),
-      sequencer->GetExportHandler(
-          dbus::kPropertiesInterface, dbus::kPropertiesGetAll,
-          kExportFailedMessage, false));
-  exported_object_->ExportMethod(
-      dbus::kPropertiesInterface, dbus::kPropertiesGet,
-      base::Bind(&ExportedPropertySet::HandleGet,
-                 weak_ptr_factory_.GetWeakPtr()),
-      sequencer->GetExportHandler(
-          dbus::kPropertiesInterface, dbus::kPropertiesGet,
-          kExportFailedMessage, false));
-  exported_object_->ExportMethod(
-      dbus::kPropertiesInterface, dbus::kPropertiesSet,
-      base::Bind(&ExportedPropertySet::HandleSet,
-                 weak_ptr_factory_.GetWeakPtr()),
-      sequencer->GetExportHandler(
-          dbus::kPropertiesInterface, dbus::kPropertiesSet,
-          kExportFailedMessage, false));
-  sequencer->OnAllTasksCompletedCall({cb});
-}
-
-ExportedPropertySet::PropertyWriter ExportedPropertySet::GetPropertyWriter(
-    const std::string& interface) {
-  return base::Bind(&ExportedPropertySet::WritePropertiesDictToMessage,
-                    weak_ptr_factory_.GetWeakPtr(),
-                    interface);
-}
-
-void ExportedPropertySet::RegisterProperty(
-    const std::string& interface_name,
-    const std::string& property_name,
-    ExportedPropertyBase* exported_property) {
-  bus_->AssertOnOriginThread();
-  properties_[interface_name][property_name] = exported_property;
-  // Technically, the property set exists longer than the properties themselves,
-  // so we could use Unretained here rather than a weak pointer.
-  ExportedPropertyBase::OnUpdateCallback cb = base::Bind(
-      &ExportedPropertySet::HandlePropertyUpdated,
-      weak_ptr_factory_.GetWeakPtr(),
-      interface_name, property_name);
-  exported_property->SetUpdateCallback(cb);
-}
-
-void ExportedPropertySet::HandleGetAll(
-    dbus::MethodCall* method_call,
-    dbus::ExportedObject::ResponseSender response_sender) {
-  bus_->AssertOnOriginThread();
-  dbus::MessageReader reader(method_call);
-  std::string interface_name;
-  if (!reader.PopString(&interface_name)) {
-    response_sender.Run(
-        GetBadArgsError(method_call, "No interface name specified."));
-    return;
-  }
-  if (reader.HasMoreData()) {
-    response_sender.Run(
-        GetBadArgsError(method_call, "Too many arguments to GetAll."));
-    return;
-  }
-  scoped_ptr<dbus::Response> response(
-      dbus::Response::FromMethodCall(method_call));
-  dbus::MessageWriter resp_writer(response.get());
-  WritePropertiesDictToMessage(interface_name, &resp_writer);
-  response_sender.Run(response.Pass());
-}
-
-void ExportedPropertySet::WritePropertiesDictToMessage(
-    const std::string& interface_name,
-    dbus::MessageWriter* writer) {
-  dbus::MessageWriter dict_writer(nullptr);
-  writer->OpenArray("{sv}", &dict_writer);
-  auto property_map_itr = properties_.find(interface_name);
-  if (property_map_itr != properties_.end()) {
-    for (const auto& kv : property_map_itr->second) {
-      dbus::MessageWriter entry_writer(nullptr);
-      dict_writer.OpenDictEntry(&entry_writer);
-      entry_writer.AppendString(kv.first);
-      kv.second->AppendValueToWriter(&entry_writer);
-      dict_writer.CloseContainer(&entry_writer);
-    }
-  } else {
-    LOG(WARNING) << "No properties found for interface interface_name";
-  }
-  writer->CloseContainer(&dict_writer);
-}
-
-void ExportedPropertySet::HandleGet(
-    dbus::MethodCall* method_call,
-    dbus::ExportedObject::ResponseSender response_sender) {
-  bus_->AssertOnOriginThread();
-  dbus::MessageReader reader(method_call);
-  std::string interface_name, property_name;
-  if (!reader.PopString(&interface_name)) {
-    response_sender.Run(
-        GetBadArgsError(method_call, "No interface name specified."));
-    return;
-  }
-  if (!reader.PopString(&property_name)) {
-    response_sender.Run(
-        GetBadArgsError(method_call, "No property name specified."));
-    return;
-  }
-  if (reader.HasMoreData()) {
-    response_sender.Run(
-        GetBadArgsError(method_call, "Too many arguments to Get."));
-    return;
-  }
-  auto property_map_itr = properties_.find(interface_name);
-  if (property_map_itr == properties_.end()) {
-    response_sender.Run(
-        GetBadArgsError(method_call, "No such interface on object."));
-    return;
-  }
-  LOG(ERROR) << "Looking for " << property_name << " on " << interface_name;
-  auto property_itr = property_map_itr->second.find(property_name);
-  if (property_itr == property_map_itr->second.end()) {
-    response_sender.Run(
-        GetBadArgsError(method_call, "No such property on interface."));
-    return;
-  }
-  scoped_ptr<dbus::Response> response(
-      dbus::Response::FromMethodCall(method_call));
-  dbus::MessageWriter resp_writer(response.get());
-  property_itr->second->AppendValueToWriter(&resp_writer);
-  response_sender.Run(response.Pass());
-}
-
-void ExportedPropertySet::HandleSet(
-    dbus::MethodCall* method_call,
-    dbus::ExportedObject::ResponseSender response_sender) {
-  bus_->AssertOnOriginThread();
-  scoped_ptr<dbus::ErrorResponse> error_resp(
-      dbus::ErrorResponse::FromMethodCall(
-          method_call, "org.freedesktop.DBus.Error.NotSupported", ""));
-  scoped_ptr<dbus::Response> response(error_resp.release());
-  response_sender.Run(response.Pass());
-}
-
-void ExportedPropertySet::HandlePropertyUpdated(
-    const std::string& interface,
-    const std::string& name,
-    const ExportedPropertyBase* property) {
-  bus_->AssertOnOriginThread();
-  dbus::Signal signal(dbus::kPropertiesInterface, dbus::kPropertiesChanged);
-  dbus::MessageWriter writer(&signal);
-  dbus::MessageWriter array_writer(nullptr);
-  dbus::MessageWriter dict_writer(nullptr);
-  writer.AppendString(interface);
-  writer.OpenArray("{sv}", &array_writer);
-  array_writer.OpenDictEntry(&dict_writer);
-  dict_writer.AppendString(name);
-  property->AppendValueToWriter(&dict_writer);
-  array_writer.CloseContainer(&dict_writer);
-  writer.CloseContainer(&array_writer);
-  // The interface specification tells us to include this list of properties
-  // which have changed, but for whom no value is conveyed.  Currently, we
-  // don't do anything interesting here.
-  writer.OpenArray("s", &array_writer);
-  writer.CloseContainer(&array_writer);
-  // This sends the signal asyncronously.  However, the raw message inside
-  // the signal object is ref-counted, so we're fine to allocate the Signal
-  // object on our local stack.
-  exported_object_->SendSignal(&signal);
-}
-
-template <typename T>
-void AppendPropertyToWriter(dbus::MessageWriter* writer, const T& value);
-
-template <>
-void AppendPropertyToWriter(dbus::MessageWriter* writer, const bool& value) {
-  writer->AppendVariantOfBool(value);
-}
-
-template <>
-void AppendPropertyToWriter(dbus::MessageWriter* writer, const uint8& value) {
-  writer->AppendVariantOfByte(value);
-}
-
-template <>
-void AppendPropertyToWriter(dbus::MessageWriter* writer, const int16& value) {
-  writer->AppendVariantOfInt16(value);
-}
-
-template <>
-void AppendPropertyToWriter(dbus::MessageWriter* writer, const uint16& value) {
-  writer->AppendVariantOfUint16(value);
-}
-
-template <>
-void AppendPropertyToWriter(dbus::MessageWriter* writer, const int32& value) {
-  writer->AppendVariantOfInt32(value);
-}
-
-template <>
-void AppendPropertyToWriter(dbus::MessageWriter* writer, const uint32& value) {
-  writer->AppendVariantOfUint32(value);
-}
-
-template <>
-void AppendPropertyToWriter(dbus::MessageWriter* writer, const int64& value) {
-  writer->AppendVariantOfInt64(value);
-}
-
-template <>
-void AppendPropertyToWriter(dbus::MessageWriter* writer, const uint64& value) {
-  writer->AppendVariantOfUint64(value);
-}
-
-template <>
-void AppendPropertyToWriter(dbus::MessageWriter* writer, const double& value) {
-  writer->AppendVariantOfDouble(value);
-}
-
-template <>
-void AppendPropertyToWriter(
-    dbus::MessageWriter* writer, const std::string& value) {
-  writer->AppendVariantOfString(value);
-}
-
-template <>
-void AppendPropertyToWriter(
-    dbus::MessageWriter* writer, const dbus::ObjectPath& value) {
-  writer->AppendVariantOfObjectPath(value);
-}
-
-template <>
-void AppendPropertyToWriter(
-    dbus::MessageWriter* writer, const std::vector<std::string>& value) {
-  dbus::MessageWriter variant_writer(nullptr);
-  writer->OpenVariant("as", &variant_writer);
-  variant_writer.AppendArrayOfStrings(value);
-  writer->CloseContainer(&variant_writer);
-}
-
-template <>
-void AppendPropertyToWriter(
-    dbus::MessageWriter* writer, const std::vector<dbus::ObjectPath>& value) {
-  dbus::MessageWriter variant_writer(nullptr);
-  writer->OpenVariant("ao", &variant_writer);
-  variant_writer.AppendArrayOfObjectPaths(value);
-  writer->CloseContainer(&variant_writer);
-}
-
-template <>
-void AppendPropertyToWriter(
-    dbus::MessageWriter* writer, const std::vector<uint8>& value) {
-  dbus::MessageWriter variant_writer(nullptr);
-  writer->OpenVariant("ay", &variant_writer);
-  variant_writer.AppendArrayOfBytes(value.data(), value.size());
-  writer->CloseContainer(&variant_writer);
-}
-
-template <typename T>
-ExportedProperty<T>::ExportedProperty() {}
-
-template <typename T>
-ExportedProperty<T>::~ExportedProperty() {}
-
-template <typename T>
-const T& ExportedProperty<T>::value() const { return value_; }
-
-template <typename T>
-void ExportedProperty<T>::SetValue(const T& new_value) {
-  if (value_ == new_value) {
-    return;
-  }
-  value_ = new_value;
-  // These is a brief period after the construction of an ExportedProperty
-  // when this callback is not initialized because the property has not
-  // been registered with the parent ExportedPropertySet.  During this period
-  // users should be initializing values via SetValue, and no notifications
-  // should be triggered by the ExportedPropertySet.
-  if (!on_update_.is_null()) {
-    on_update_.Run(this);
-  }
-}
-
-template <typename T>
-void ExportedProperty<T>::SetUpdateCallback(const OnUpdateCallback& cb) {
-  on_update_ = cb;
-}
-
-template <typename T>
-void ExportedProperty<T>::AppendValueToWriter(
-    dbus::MessageWriter* writer) const {
-  AppendPropertyToWriter(writer, value_);
-}
-
-template class ExportedProperty<bool>;
-template class ExportedProperty<uint8>;
-template class ExportedProperty<int16>;
-template class ExportedProperty<uint16>;
-template class ExportedProperty<int32>;
-template class ExportedProperty<uint32>;
-template class ExportedProperty<int64>;
-template class ExportedProperty<uint64>;
-template class ExportedProperty<double>;
-template class ExportedProperty<std::string>;
-template class ExportedProperty<dbus::ObjectPath>;
-template class ExportedProperty<std::vector<std::string>>;
-template class ExportedProperty<std::vector<dbus::ObjectPath>>;
-template class ExportedProperty<std::vector<uint8>>;
-
-}  // namespace dbus_utils
-
-}  // namespace buffet
diff --git a/buffet/exported_property_set.h b/buffet/exported_property_set.h
deleted file mode 100644
index d91415f..0000000
--- a/buffet/exported_property_set.h
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright 2014 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BUFFET_EXPORTED_PROPERTY_SET_H_
-#define BUFFET_EXPORTED_PROPERTY_SET_H_
-
-#include <map>
-#include <string>
-#include <vector>
-
-#include <base/memory/weak_ptr.h>
-#include <dbus/exported_object.h>
-#include <dbus/message.h>
-
-namespace buffet {
-
-namespace dbus_utils {
-
-// This class may be used to implement the org.freedesktop.DBus.Properties
-// interface.  It sends the update signal on property updates:
-//
-//   org.freedesktop.DBus.Properties.PropertiesChanged (
-//       STRING interface_name,
-//       DICT<STRING,VARIANT> changed_properties,
-//       ARRAY<STRING> invalidated_properties);
-//
-//
-// and implements the required methods of the interface:
-//
-//   org.freedesktop.DBus.Properties.Get(in STRING interface_name,
-//                                       in STRING property_name,
-//                                       out VARIANT value);
-//   org.freedesktop.DBus.Properties.Set(in STRING interface_name,
-//                                       in STRING property_name,
-//                                       in VARIANT value);
-//   org.freedesktop.DBus.Properties.GetAll(in STRING interface_name,
-//                                          out DICT<STRING,VARIANT> props);
-//
-//  This class is very similar to the PropertySet class in Chrome, except that
-//  it allows objects to expose properties rather than to consume them.
-//
-//  Example usage:
-//
-//   class ExampleObjectExportingProperties {
-//    public:
-//     ExampleObjectExportingProperties(ExportedObject* exported_object)
-//         : p_(exported_object) {
-//       // Initialize properties appropriately.  Do this before
-//       // claiming the Properties interface so that daemons watching
-//       // this object don't see partial or inaccurate state.
-//       p_.ClaimPropertiesInterface();
-//     }
-//
-//    private:
-//     struct Properties : public buffet::dbus::ExportedPropertySet {
-//      public:
-//       buffet::dbus::ExportedProperty<std::string> name_;
-//       buffet::dbus::ExportedProperty<uint16> version_;
-//       buffet::dbus::ExportedProperty<dbus::ObjectPath> parent_;
-//       buffet::dbus::ExportedProperty<std::vector<std::string>> children_;
-//
-//       Properties(dbus::ExportedObject* exported_object)
-//           : buffet::dbus::ExportedPropertySet(exported_object) {
-//         RegisterProperty(kExampleInterfaceName, "Name", &name_);
-//         RegisterProperty(kExampleInterfaceName, "Version", &version_);
-//         RegisterProperty(kExampleInterfaceName, "Parent", &parent_);
-//         RegisterProperty(kExampleInterfaceName, "Children", &children_);
-//       }
-//       virtual ~Properties() {}
-//     };
-//
-//     Properties p_;
-//   };
-
-class ExportedPropertyBase {
- public:
-  ExportedPropertyBase() {}
-  virtual ~ExportedPropertyBase() {}
-
-  typedef base::Callback<void(const ExportedPropertyBase*)> OnUpdateCallback;
-
-  // Called by ExportedPropertySet to register a callback.  This callback
-  // triggers ExportedPropertySet to send a signal from the properties
-  // interface of the exported object.
-  virtual void SetUpdateCallback(const OnUpdateCallback& cb) = 0;
-
-  // Appends a variant of the contained value to the writer.  This is
-  // needed to write out properties to Get and GetAll methods implemented
-  // by the ExportedPropertySet since it doesn't actually know the type
-  // of each property.
-  virtual void AppendValueToWriter(dbus::MessageWriter* writer) const = 0;
-};
-
-class ExportedPropertySet {
- public:
-  typedef base::Callback<void(bool success)> OnInitFinish;
-  typedef base::Callback<void(dbus::MessageWriter* writer)> PropertyWriter;
-
-  ExportedPropertySet(dbus::Bus* bus, const dbus::ObjectPath& path);
-  virtual ~ExportedPropertySet() = default;
-
-  // Claims the method associated with the org.freedesktop.DBus.Properties
-  // interface.  This needs to be done after all properties are initialized to
-  // appropriate values.  This method will call |cb| when all methods
-  // are exported to the DBus object.  |cb| will be called on the origin
-  // thread.
-  void Init(const OnInitFinish& cb);
-
-  // Return a callback that knows how to write this property set's properties
-  // to a message.  This writer retains a weak pointer to this, and must
-  // only be invoked on the same thread as the rest of ExportedPropertySet.
-  PropertyWriter GetPropertyWriter(const std::string& interface);
-
- protected:
-  void RegisterProperty(const std::string& interface_name,
-                        const std::string& property_name,
-                        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,
-                 dbus::ExportedObject::ResponseSender response_sender);
-  // While Properties.Set has a handler to complete the interface,  we don't
-  // support writable properties.  This is almost a feature, since bindings for
-  // many languages don't support errors coming back from invalid writes.
-  // Instead, use setters in exposed interfaces.
-  void HandleSet(dbus::MethodCall* method_call,
-                 dbus::ExportedObject::ResponseSender response_sender);
-  void HandlePropertyUpdated(const std::string& interface,
-                             const std::string& name,
-                             const ExportedPropertyBase* property);
-
-  dbus::Bus* bus_;
-  dbus::ExportedObject* exported_object_;  // weak; owned by the Bus object.
-  // This is a map from interface name -> property name -> pointer to property.
-  std::map<std::string,
-           std::map<std::string, ExportedPropertyBase*>> properties_;
-
-  // D-Bus callbacks may last longer the property set exporting those methods.
-  base::WeakPtrFactory<ExportedPropertySet> weak_ptr_factory_;
-
-  friend class ExportedPropertySetTest;
-  DISALLOW_COPY_AND_ASSIGN(ExportedPropertySet);
-};
-
-template <typename T>
-class ExportedProperty : public ExportedPropertyBase {
- public:
-  ExportedProperty();
-  virtual ~ExportedProperty() override;
-
-  // Retrieves the current value.
-  const T& value() const;
-
-  // Set the value exposed to remote applications.  This triggers notifications
-  // of changes over the Properties interface.
-  void SetValue(const T& new_value);
-
-  // Called by ExportedPropertySet.  This update callback triggers
-  // ExportedPropertySet to send a signal from the properties interface of the
-  // exported object.
-  virtual void SetUpdateCallback(const OnUpdateCallback& cb) override;
-
-  // Implementation provided by specialization.
-  virtual void AppendValueToWriter(dbus::MessageWriter* writer) const override;
-
- private:
-  OnUpdateCallback on_update_;
-  T value_{};
-
-  DISALLOW_COPY_AND_ASSIGN(ExportedProperty);
-};
-
-extern template class ExportedProperty<bool>;
-extern template class ExportedProperty<uint8>;
-extern template class ExportedProperty<int16>;
-extern template class ExportedProperty<uint16>;
-extern template class ExportedProperty<int32>;
-extern template class ExportedProperty<uint32>;
-extern template class ExportedProperty<int64>;
-extern template class ExportedProperty<uint64>;
-extern template class ExportedProperty<double>;
-extern template class ExportedProperty<std::string>;
-extern template class ExportedProperty<dbus::ObjectPath>;
-extern template class ExportedProperty<std::vector<std::string>>;
-extern template class ExportedProperty<std::vector<dbus::ObjectPath>>;
-extern template class ExportedProperty<std::vector<uint8>>;
-
-}  // namespace dbus_utils
-
-}  // namespace buffet
-
-#endif  // BUFFET_EXPORTED_PROPERTY_SET_H_
diff --git a/buffet/exported_property_set_unittest.cc b/buffet/exported_property_set_unittest.cc
deleted file mode 100644
index ce8a3fe..0000000
--- a/buffet/exported_property_set_unittest.cc
+++ /dev/null
@@ -1,506 +0,0 @@
-// Copyright 2014 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "buffet/exported_property_set.h"
-
-#include <string>
-#include <vector>
-
-#include <base/basictypes.h>
-#include <base/bind.h>
-#include <dbus/message.h>
-#include <dbus/property.h>
-#include <dbus/object_path.h>
-#include <dbus/mock_bus.h>
-#include <dbus/mock_exported_object.h>
-#include <gmock/gmock.h>
-#include <gtest/gtest.h>
-
-using ::testing::AnyNumber;
-using ::testing::Return;
-using ::testing::Invoke;
-using ::testing::_;
-
-namespace buffet {
-
-namespace dbus_utils {
-
-namespace {
-
-const char kBoolPropName[] = "BoolProp";
-const char kUint8PropName[] = "Uint8Prop";
-const char kInt16PropName[] = "Int16Prop";
-const char kUint16PropName[] = "Uint16Prop";
-const char kInt32PropName[] = "Int32Prop";
-const char kUint32PropName[] = "Uint32Prop";
-const char kInt64PropName[] = "Int64Prop";
-const char kUint64PropName[] = "Uint64Prop";
-const char kDoublePropName[] = "DoubleProp";
-const char kStringPropName[] = "StringProp";
-const char kPathPropName[] = "PathProp";
-const char kStringListPropName[] = "StringListProp";
-const char kPathListPropName[] = "PathListProp";
-const char kUint8ListPropName[] = "Uint8ListProp";
-
-const char kTestInterface1[] = "org.chromium.TestInterface1";
-const char kTestInterface2[] = "org.chromium.TestInterface2";
-const char kTestInterface3[] = "org.chromium.TestInterface3";
-
-const std::string kTestString("lies");
-const dbus::ObjectPath kMethodsExportedOnPath(std::string("/export"));
-const dbus::ObjectPath kTestObjectPathInit(std::string("/path_init"));
-const dbus::ObjectPath kTestObjectPathUpdate(std::string("/path_update"));
-
-}  // namespace
-
-class ExportedPropertySetTest : public ::testing::Test {
- public:
-  struct Properties : public ExportedPropertySet {
-   public:
-    ExportedProperty<bool> bool_prop_;
-    ExportedProperty<uint8> uint8_prop_;
-    ExportedProperty<int16> int16_prop_;
-    ExportedProperty<uint16> uint16_prop_;
-    ExportedProperty<int32> int32_prop_;
-    ExportedProperty<uint32> uint32_prop_;
-    ExportedProperty<int64> int64_prop_;
-    ExportedProperty<uint64> uint64_prop_;
-    ExportedProperty<double> double_prop_;
-    ExportedProperty<std::string> string_prop_;
-    ExportedProperty<dbus::ObjectPath> path_prop_;
-    ExportedProperty<std::vector<std::string>> stringlist_prop_;
-    ExportedProperty<std::vector<dbus::ObjectPath>> pathlist_prop_;
-    ExportedProperty<std::vector<uint8>> uint8list_prop_;
-
-    Properties(dbus::Bus* bus, const dbus::ObjectPath& path)
-        : ExportedPropertySet(bus, path) {
-      // The empty string is not a valid value for an ObjectPath.
-      path_prop_.SetValue(kTestObjectPathInit);
-      RegisterProperty(kTestInterface1, kBoolPropName, &bool_prop_);
-      RegisterProperty(kTestInterface1, kUint8PropName, &uint8_prop_);
-      RegisterProperty(kTestInterface1, kInt16PropName, &int16_prop_);
-      // I chose this weird grouping because N=2 is about all the permutations
-      // of GetAll that I want to anticipate.
-      RegisterProperty(kTestInterface2, kUint16PropName, &uint16_prop_);
-      RegisterProperty(kTestInterface2, kInt32PropName, &int32_prop_);
-      RegisterProperty(kTestInterface3, kUint32PropName, &uint32_prop_);
-      RegisterProperty(kTestInterface3, kInt64PropName, &int64_prop_);
-      RegisterProperty(kTestInterface3, kUint64PropName, &uint64_prop_);
-      RegisterProperty(kTestInterface3, kDoublePropName, &double_prop_);
-      RegisterProperty(kTestInterface3, kStringPropName, &string_prop_);
-      RegisterProperty(kTestInterface3, kPathPropName, &path_prop_);
-      RegisterProperty(kTestInterface3, kStringListPropName, &stringlist_prop_);
-      RegisterProperty(kTestInterface3, kPathListPropName, &pathlist_prop_);
-      RegisterProperty(kTestInterface3, kUint8ListPropName, &uint8list_prop_);
-    }
-    virtual ~Properties() {}
-
-    void CallHandleGetAll(
-        dbus::MethodCall* method_call,
-        dbus::ExportedObject::ResponseSender response_sender) {
-      HandleGetAll(method_call, response_sender);
-    }
-
-    void CallHandleGet(dbus::MethodCall* method_call,
-                       dbus::ExportedObject::ResponseSender response_sender) {
-      HandleGet(method_call, response_sender);
-    }
-
-    void CallHandleSet(dbus::MethodCall* method_call,
-                       dbus::ExportedObject::ResponseSender response_sender) {
-      HandleSet(method_call, response_sender);
-    }
-  };
-
-  virtual void SetUp() {
-    dbus::Bus::Options options;
-    options.bus_type = dbus::Bus::SYSTEM;
-    bus_ = new dbus::MockBus(options);
-    // By default, don't worry about threading assertions.
-    EXPECT_CALL(*bus_, AssertOnOriginThread()).Times(AnyNumber());
-    EXPECT_CALL(*bus_, AssertOnDBusThread()).Times(AnyNumber());
-    // Use a mock exported object.
-    mock_exported_object_ = new dbus::MockExportedObject(
-        bus_.get(), kMethodsExportedOnPath);
-    EXPECT_CALL(*bus_, GetExportedObject(kMethodsExportedOnPath))
-        .Times(1).WillOnce(Return(mock_exported_object_.get()));
-    p_.reset(new Properties(bus_.get(), kMethodsExportedOnPath));
-  }
-
-  void StoreResponse(scoped_ptr<dbus::Response> method_response) {
-    last_response_.reset(method_response.release());
-  }
-
-  void AssertGetAllReturnsError(dbus::MethodCall* method_call) {
-    auto response_sender = base::Bind(&ExportedPropertySetTest::StoreResponse,
-                                      base::Unretained(this));
-    method_call->SetSerial(123);
-    p_->CallHandleGetAll(method_call, response_sender);
-    ASSERT_NE(dynamic_cast<dbus::ErrorResponse*>(last_response_.get()),
-              nullptr);
-  }
-
-  void AssertGetReturnsError(dbus::MethodCall* method_call) {
-    auto response_sender = base::Bind(&ExportedPropertySetTest::StoreResponse,
-                                      base::Unretained(this));
-    method_call->SetSerial(123);
-    p_->CallHandleGet(method_call, response_sender);
-    ASSERT_NE(dynamic_cast<dbus::ErrorResponse*>(last_response_.get()),
-              nullptr);
-  }
-
-  scoped_ptr<dbus::Response> GetPropertyOnInterface(
-      const std::string& interface_name, const std::string& property_name) {
-    dbus::MethodCall method_call(dbus::kPropertiesInterface,
-                                 dbus::kPropertiesGet);
-    method_call.SetSerial(123);
-    dbus::MessageWriter writer(&method_call);
-    writer.AppendString(interface_name);
-    writer.AppendString(property_name);
-    auto response_sender = base::Bind(&ExportedPropertySetTest::StoreResponse,
-                                      base::Unretained(this));
-    p_->CallHandleGet(&method_call, response_sender);
-    return last_response_.Pass();
-  }
-
-  scoped_ptr<dbus::Response> last_response_;
-  scoped_refptr<dbus::MockBus> bus_;
-  scoped_refptr<dbus::MockExportedObject> mock_exported_object_;
-  scoped_ptr<Properties> p_;
-};
-
-TEST_F(ExportedPropertySetTest, UpdateNotifications) {
-  EXPECT_CALL(*mock_exported_object_, SendSignal(_)).Times(14);
-  p_->bool_prop_.SetValue(true);
-  p_->uint8_prop_.SetValue(1);
-  p_->int16_prop_.SetValue(1);
-  p_->uint16_prop_.SetValue(1);
-  p_->int32_prop_.SetValue(1);
-  p_->uint32_prop_.SetValue(1);
-  p_->int64_prop_.SetValue(1);
-  p_->uint64_prop_.SetValue(1);
-  p_->double_prop_.SetValue(1.0);
-  p_->string_prop_.SetValue(kTestString);
-  p_->path_prop_.SetValue(kTestObjectPathUpdate);
-  p_->stringlist_prop_.SetValue({kTestString});
-  p_->pathlist_prop_.SetValue({kTestObjectPathUpdate});
-  p_->uint8list_prop_.SetValue({1});
-}
-
-TEST_F(ExportedPropertySetTest, UpdateToSameValue) {
-  EXPECT_CALL(*mock_exported_object_, SendSignal(_)).Times(1);
-  p_->bool_prop_.SetValue(true);
-  p_->bool_prop_.SetValue(true);
-}
-
-TEST_F(ExportedPropertySetTest, GetAllNoArgs) {
-  dbus::MethodCall method_call(dbus::kPropertiesInterface,
-                               dbus::kPropertiesGetAll);
-  AssertGetAllReturnsError(&method_call);
-}
-
-TEST_F(ExportedPropertySetTest, GetAllInvalidInterface) {
-  dbus::MethodCall method_call(
-      dbus::kPropertiesInterface, dbus::kPropertiesGetAll);
-  method_call.SetSerial(123);
-  dbus::MessageWriter writer(&method_call);
-  writer.AppendString("org.chromium.BadInterface");
-  auto response_sender = base::Bind(&ExportedPropertySetTest::StoreResponse,
-                                    base::Unretained(this));
-  p_->CallHandleGetAll(&method_call, response_sender);
-  dbus::MessageReader response_reader(last_response_.get());
-  dbus::MessageReader dict_reader(nullptr);
-  ASSERT_TRUE(response_reader.PopArray(&dict_reader));
-  // The response should just be a an empty array, since there are no properties
-  // on this interface.  The spec doesn't say much about error conditions here,
-  // so I'm going to assume this is a valid implementation.
-  ASSERT_FALSE(dict_reader.HasMoreData());
-  ASSERT_FALSE(response_reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetAllExtraArgs) {
-  dbus::MethodCall method_call(dbus::kPropertiesInterface,
-                               dbus::kPropertiesGetAll);
-  dbus::MessageWriter writer(&method_call);
-  writer.AppendString(kTestInterface1);
-  writer.AppendString(kTestInterface1);
-  AssertGetAllReturnsError(&method_call);
-}
-
-TEST_F(ExportedPropertySetTest, GetAllCorrectness) {
-  dbus::MethodCall method_call(
-      dbus::kPropertiesInterface, dbus::kPropertiesGetAll);
-  method_call.SetSerial(123);
-  dbus::MessageWriter writer(&method_call);
-  writer.AppendString(kTestInterface2);
-  auto response_sender = base::Bind(&ExportedPropertySetTest::StoreResponse,
-                                    base::Unretained(this));
-  p_->CallHandleGetAll(&method_call, response_sender);
-  dbus::MessageReader response_reader(last_response_.get());
-  dbus::MessageReader dict_reader(nullptr);
-  dbus::MessageReader entry_reader(nullptr);
-  ASSERT_TRUE(response_reader.PopArray(&dict_reader));
-  ASSERT_TRUE(dict_reader.PopDictEntry(&entry_reader));
-  std::string property_name;
-  ASSERT_TRUE(entry_reader.PopString(&property_name));
-  uint16 value16;
-  int32 value32;
-  if (property_name.compare(kUint16PropName) == 0) {
-    ASSERT_TRUE(entry_reader.PopVariantOfUint16(&value16));
-    ASSERT_FALSE(entry_reader.HasMoreData());
-    ASSERT_TRUE(dict_reader.PopDictEntry(&entry_reader));
-    ASSERT_TRUE(entry_reader.PopString(&property_name));
-    ASSERT_EQ(property_name.compare(kInt32PropName), 0);
-    ASSERT_TRUE(entry_reader.PopVariantOfInt32(&value32));
-  } else {
-    ASSERT_EQ(property_name.compare(kInt32PropName), 0);
-    ASSERT_TRUE(entry_reader.PopVariantOfInt32(&value32));
-    ASSERT_FALSE(entry_reader.HasMoreData());
-    ASSERT_TRUE(dict_reader.PopDictEntry(&entry_reader));
-    ASSERT_TRUE(entry_reader.PopString(&property_name));
-    ASSERT_EQ(property_name.compare(kUint16PropName), 0);
-    ASSERT_TRUE(entry_reader.PopVariantOfUint16(&value16));
-  }
-  ASSERT_FALSE(entry_reader.HasMoreData());
-  ASSERT_FALSE(dict_reader.HasMoreData());
-  ASSERT_FALSE(response_reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetNoArgs) {
-  dbus::MethodCall method_call(dbus::kPropertiesInterface,
-                               dbus::kPropertiesGet);
-  AssertGetReturnsError(&method_call);
-}
-
-TEST_F(ExportedPropertySetTest, GetInvalidInterface) {
-  dbus::MethodCall method_call(dbus::kPropertiesInterface,
-                               dbus::kPropertiesGet);
-  dbus::MessageWriter writer(&method_call);
-  writer.AppendString("org.chromium.BadInterface");
-  writer.AppendString(kInt16PropName);
-  AssertGetReturnsError(&method_call);
-}
-
-TEST_F(ExportedPropertySetTest, GetBadPropertyName) {
-  dbus::MethodCall method_call(dbus::kPropertiesInterface,
-                               dbus::kPropertiesGet);
-  dbus::MessageWriter writer(&method_call);
-  writer.AppendString(kTestInterface1);
-  writer.AppendString("IAmNotAProperty");
-  AssertGetReturnsError(&method_call);
-}
-
-TEST_F(ExportedPropertySetTest, GetPropIfMismatch) {
-  dbus::MethodCall method_call(dbus::kPropertiesInterface,
-                               dbus::kPropertiesGet);
-  dbus::MessageWriter writer(&method_call);
-  writer.AppendString(kTestInterface1);
-  writer.AppendString(kStringPropName);
-  AssertGetReturnsError(&method_call);
-}
-
-TEST_F(ExportedPropertySetTest, GetNoPropertyName) {
-  dbus::MethodCall method_call(dbus::kPropertiesInterface,
-                               dbus::kPropertiesGet);
-  dbus::MessageWriter writer(&method_call);
-  writer.AppendString(kTestInterface1);
-  AssertGetReturnsError(&method_call);
-}
-
-TEST_F(ExportedPropertySetTest, GetExtraArgs) {
-  dbus::MethodCall method_call(dbus::kPropertiesInterface,
-                               dbus::kPropertiesGet);
-  dbus::MessageWriter writer(&method_call);
-  writer.AppendString(kTestInterface1);
-  writer.AppendString(kBoolPropName);
-  writer.AppendString("Extra param");
-  AssertGetReturnsError(&method_call);
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithBool) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface1, kBoolPropName);
-  dbus::MessageReader reader(response.get());
-  bool value;
-  ASSERT_TRUE(reader.PopVariantOfBool(&value));
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithUint8) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface1, kUint8PropName);
-  dbus::MessageReader reader(response.get());
-  uint8 value;
-  ASSERT_TRUE(reader.PopVariantOfByte(&value));
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithInt16) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface1, kInt16PropName);
-  dbus::MessageReader reader(response.get());
-  int16 value;
-  ASSERT_TRUE(reader.PopVariantOfInt16(&value));
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithUint16) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface2, kUint16PropName);
-  dbus::MessageReader reader(response.get());
-  uint16 value;
-  ASSERT_TRUE(reader.PopVariantOfUint16(&value));
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithInt32) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface2, kInt32PropName);
-  dbus::MessageReader reader(response.get());
-  int32 value;
-  ASSERT_TRUE(reader.PopVariantOfInt32(&value));
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithUint32) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface3, kUint32PropName);
-  dbus::MessageReader reader(response.get());
-  uint32 value;
-  ASSERT_TRUE(reader.PopVariantOfUint32(&value));
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithInt64) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface3, kInt64PropName);
-  dbus::MessageReader reader(response.get());
-  int64 value;
-  ASSERT_TRUE(reader.PopVariantOfInt64(&value));
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithUint64) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface3, kUint64PropName);
-  dbus::MessageReader reader(response.get());
-  uint64 value;
-  ASSERT_TRUE(reader.PopVariantOfUint64(&value));
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithDouble) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface3, kDoublePropName);
-  dbus::MessageReader reader(response.get());
-  double value;
-  ASSERT_TRUE(reader.PopVariantOfDouble(&value));
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithString) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface3, kStringPropName);
-  dbus::MessageReader reader(response.get());
-  std::string value;
-  ASSERT_TRUE(reader.PopVariantOfString(&value));
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithPath) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface3, kPathPropName);
-  dbus::MessageReader reader(response.get());
-  dbus::ObjectPath value;
-  ASSERT_TRUE(reader.PopVariantOfObjectPath(&value));
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithStringList) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface3, kStringListPropName);
-  dbus::MessageReader reader(response.get());
-  dbus::MessageReader variant_reader(nullptr);
-  std::vector<std::string> value;
-  ASSERT_TRUE(reader.PopVariant(&variant_reader));
-  ASSERT_TRUE(variant_reader.PopArrayOfStrings(&value));
-  ASSERT_FALSE(variant_reader.HasMoreData());
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithPathList) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface3, kPathListPropName);
-  dbus::MessageReader reader(response.get());
-  dbus::MessageReader variant_reader(nullptr);
-  std::vector<dbus::ObjectPath> value;
-  ASSERT_TRUE(reader.PopVariant(&variant_reader));
-  ASSERT_TRUE(variant_reader.PopArrayOfObjectPaths(&value));
-  ASSERT_FALSE(variant_reader.HasMoreData());
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, GetWorksWithUint8List) {
-  scoped_ptr<dbus::Response> response = GetPropertyOnInterface(
-      kTestInterface3, kPathListPropName);
-  dbus::MessageReader reader(response.get());
-  dbus::MessageReader variant_reader(nullptr);
-  const uint8* buffer;
-  size_t buffer_len;
-  ASSERT_TRUE(reader.PopVariant(&variant_reader));
-  // |buffer| remains under the control of the MessageReader.
-  ASSERT_TRUE(variant_reader.PopArrayOfBytes(&buffer, &buffer_len));
-  ASSERT_FALSE(variant_reader.HasMoreData());
-  ASSERT_FALSE(reader.HasMoreData());
-}
-
-TEST_F(ExportedPropertySetTest, SetFailsGracefully) {
-  dbus::MethodCall method_call(dbus::kPropertiesInterface,
-                               dbus::kPropertiesSet);
-  method_call.SetSerial(123);
-  auto response_sender = base::Bind(&ExportedPropertySetTest::StoreResponse,
-                                    base::Unretained(this));
-  p_->CallHandleSet(&method_call, response_sender);
-  ASSERT_TRUE(
-      dynamic_cast<dbus::ErrorResponse*>(last_response_.get()) != nullptr);
-}
-
-namespace {
-
-void VerifySignal(dbus::Signal* signal) {
-  ASSERT_NE(signal, nullptr);
-  std::string interface_name;
-  std::string property_name;
-  uint8 value;
-  dbus::MessageReader reader(signal);
-  dbus::MessageReader array_reader(signal);
-  dbus::MessageReader dict_reader(signal);
-  ASSERT_TRUE(reader.PopString(&interface_name));
-  ASSERT_TRUE(reader.PopArray(&array_reader));
-  ASSERT_TRUE(array_reader.PopDictEntry(&dict_reader));
-  ASSERT_TRUE(dict_reader.PopString(&property_name));
-  ASSERT_TRUE(dict_reader.PopVariantOfByte(&value));
-  ASSERT_FALSE(dict_reader.HasMoreData());
-  ASSERT_FALSE(array_reader.HasMoreData());
-  ASSERT_TRUE(reader.HasMoreData());
-  // Read the (empty) list of invalidated property names.
-  ASSERT_TRUE(reader.PopArray(&array_reader));
-  ASSERT_FALSE(array_reader.HasMoreData());
-  ASSERT_FALSE(reader.HasMoreData());
-  ASSERT_EQ(value, 57);
-  ASSERT_EQ(property_name, std::string(kUint8PropName));
-  ASSERT_EQ(interface_name, std::string(kTestInterface1));
-}
-
-}  // namespace
-
-TEST_F(ExportedPropertySetTest, SignalsAreParsable) {
-  EXPECT_CALL(*mock_exported_object_, SendSignal(_))
-      .Times(1).WillOnce(Invoke(&VerifySignal));
-  p_->uint8_prop_.SetValue(57);
-}
-
-}  // namespace dbus_utils
-
-}  // namespace buffet
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 0a6af31..39ccf7d 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -11,6 +11,7 @@
 #include <base/bind_helpers.h>
 #include <base/json/json_writer.h>
 #include <chromeos/async_event_sequencer.h>
+#include <chromeos/dbus_utils.h>
 #include <dbus/bus.h>
 #include <dbus/object_path.h>
 #include <dbus/values_util.h>
@@ -22,7 +23,7 @@
 #include "buffet/exported_object_manager.h"
 
 using chromeos::dbus_utils::AsyncEventSequencer;
-using buffet::dbus_utils::GetBadArgsError;
+using chromeos::dbus_utils::GetBadArgsError;
 using buffet::dbus_utils::GetDBusError;
 
 namespace buffet {
diff --git a/buffet/manager.h b/buffet/manager.h
index 6f2f8a6..08e7656 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -12,12 +12,13 @@
 #include <base/memory/scoped_ptr.h>
 #include <base/memory/weak_ptr.h>
 #include <base/values.h>
+#include <chromeos/exported_property_set.h>
+#include <dbus/bus.h>
 #include <dbus/message.h>
 #include <dbus/object_path.h>
 
 #include "buffet/dbus_constants.h"
 #include "buffet/device_registration_info.h"
-#include "buffet/exported_property_set.h"
 
 namespace buffet {
 
@@ -40,11 +41,11 @@
   void Init(const OnInitFinish& cb);
 
  private:
-  struct Properties: public dbus_utils::ExportedPropertySet {
+  struct Properties: public chromeos::dbus_utils::ExportedPropertySet {
    public:
-    dbus_utils::ExportedProperty<std::string> state_;
+    chromeos::dbus_utils::ExportedProperty<std::string> state_;
     explicit Properties(dbus::Bus* bus)
-        : dbus_utils::ExportedPropertySet(
+        : chromeos::dbus_utils::ExportedPropertySet(
               bus, dbus::ObjectPath(dbus_constants::kManagerServicePath)) {
       RegisterProperty(dbus_constants::kManagerInterface, "State", &state_);
     }