[DBus] Explicitly instantiate dbusProperty variant

dbus::Property<std::vector<uint8> > isn't instantiated in libdbus in non-ChromeOS build + latest clang.
That causes instantiation of the template in dbus_unittests, and causes link failure.

Review URL: https://codereview.chromium.org/408143012

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@285475 0039d316-1c4b-4281-b951-d872f2087c98


CrOS-Libchrome-Original-Commit: 2934be455959aced9205bb4c7b48768ff06eea6d
diff --git a/dbus/property.cc b/dbus/property.cc
index b518e99..9475a07 100644
--- a/dbus/property.cc
+++ b/dbus/property.cc
@@ -478,4 +478,19 @@
   writer->CloseContainer(&variant_writer);
 }
 
+template class Property<uint8>;
+template class Property<bool>;
+template class Property<int16>;
+template class Property<uint16>;
+template class Property<int32>;
+template class Property<uint32>;
+template class Property<int64>;
+template class Property<uint64>;
+template class Property<double>;
+template class Property<std::string>;
+template class Property<ObjectPath>;
+template class Property<std::vector<std::string> >;
+template class Property<std::vector<ObjectPath> >;
+template class Property<std::vector<uint8> >;
+
 }  // namespace dbus
diff --git a/dbus/property.h b/dbus/property.h
index f6baffc..d30e076 100644
--- a/dbus/property.h
+++ b/dbus/property.h
@@ -409,67 +409,81 @@
 template <> Property<uint8>::Property();
 template <> bool Property<uint8>::PopValueFromReader(MessageReader* reader);
 template <> void Property<uint8>::AppendSetValueToWriter(MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<uint8>;
 
 template <> Property<bool>::Property();
 template <> bool Property<bool>::PopValueFromReader(MessageReader* reader);
 template <> void Property<bool>::AppendSetValueToWriter(MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<bool>;
 
 template <> Property<int16>::Property();
 template <> bool Property<int16>::PopValueFromReader(MessageReader* reader);
 template <> void Property<int16>::AppendSetValueToWriter(MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<int16>;
 
 template <> Property<uint16>::Property();
 template <> bool Property<uint16>::PopValueFromReader(MessageReader* reader);
 template <> void Property<uint16>::AppendSetValueToWriter(
   MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<uint16>;
 
 template <> Property<int32>::Property();
 template <> bool Property<int32>::PopValueFromReader(MessageReader* reader);
 template <> void Property<int32>::AppendSetValueToWriter(MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<int32>;
 
 template <> Property<uint32>::Property();
 template <> bool Property<uint32>::PopValueFromReader(MessageReader* reader);
 template <> void Property<uint32>::AppendSetValueToWriter(
   MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<uint32>;
 
 template <> Property<int64>::Property();
 template <> bool Property<int64>::PopValueFromReader(MessageReader* reader);
 template <> void Property<int64>::AppendSetValueToWriter(MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<int64>;
 
 template <> Property<uint64>::Property();
 template <> bool Property<uint64>::PopValueFromReader(MessageReader* reader);
 template <> void Property<uint64>::AppendSetValueToWriter(
   MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<uint64>;
 
 template <> Property<double>::Property();
 template <> bool Property<double>::PopValueFromReader(MessageReader* reader);
 template <> void Property<double>::AppendSetValueToWriter(
   MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<double>;
 
 template <> bool Property<std::string>::PopValueFromReader(
   MessageReader* reader);
 template <> void Property<std::string>::AppendSetValueToWriter(
   MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<std::string>;
 
 template <> bool Property<ObjectPath>::PopValueFromReader(
   MessageReader* reader);
 template <> void Property<ObjectPath>::AppendSetValueToWriter(
   MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<ObjectPath>;
 
 template <> bool Property<std::vector<std::string> >::PopValueFromReader(
   MessageReader* reader);
 template <> void Property<std::vector<std::string> >::AppendSetValueToWriter(
   MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<std::vector<std::string> >;
 
 template <> bool Property<std::vector<ObjectPath> >::PopValueFromReader(
   MessageReader* reader);
 template <> void Property<std::vector<ObjectPath> >::AppendSetValueToWriter(
   MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<std::vector<ObjectPath> >;
 
 template <> bool Property<std::vector<uint8> >::PopValueFromReader(
   MessageReader* reader);
 template <> void Property<std::vector<uint8> >::AppendSetValueToWriter(
   MessageWriter* writer);
+extern template class CHROME_DBUS_EXPORT Property<std::vector<uint8> >;
 
 }  // namespace dbus