shill: serialize Manager.Services as an array of object paths

Previously, we serialized this property as an array of strings.
That was contrary to the API documentation, and caused a crash
in update_engine_client.

BUG=chromium-os:27987
TEST=unit tests, manual

Manual testing: ran on device, and checked that update_engine_client
was able to identify the technology of the default service.

Collateral change: replace PathArray with Paths (and similar
for variations, such as path_array). This makes the naming of
Paths conform to the style used for Strings, Stringmaps, etc.

Change-Id: I4ee4b9df04d3f006ab974c2092f6e515ebf5a9b8
Reviewed-on: https://gerrit.chromium.org/gerrit/18592
Commit-Ready: mukesh agrawal <quiche@chromium.org>
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Tested-by: mukesh agrawal <quiche@chromium.org>
diff --git a/accessor_interface.h b/accessor_interface.h
index 0419dd1..b47278c 100644
--- a/accessor_interface.h
+++ b/accessor_interface.h
@@ -43,6 +43,12 @@
 
 typedef std::vector<uint8_t> ByteArray;
 typedef std::vector<ByteArray> ByteArrays;
+// Note that while the RpcIdentifiers type has the same concrete
+// representation as the Strings type, it may be serialized
+// differently. Accordingly, PropertyStore tracks RpcIdentifiers
+// separately from Strings. We create a separate typedef here, to make
+// the PropertyStore-related code read more simply.
+typedef std::vector<std::string> RpcIdentifiers;
 typedef std::vector<std::string> Strings;
 typedef std::map<std::string, std::string> Stringmap;
 typedef std::vector<Stringmap> Stringmaps;
@@ -52,6 +58,11 @@
 typedef std::tr1::shared_ptr<AccessorInterface<bool> > BoolAccessor;
 typedef std::tr1::shared_ptr<AccessorInterface<int16> > Int16Accessor;
 typedef std::tr1::shared_ptr<AccessorInterface<int32> > Int32Accessor;
+// See comment above RpcIdentifiers typedef, for the reason why the
+// RpcIdentifiersAccessor exists (even though it has the same
+// underlying type as StringsAccessor).
+typedef std::tr1::shared_ptr<
+  AccessorInterface<std::vector<std::string> > >RpcIdentifiersAccessor;
 typedef std::tr1::shared_ptr<AccessorInterface<std::string> > StringAccessor;
 typedef std::tr1::shared_ptr<AccessorInterface<Stringmap> > StringmapAccessor;
 typedef std::tr1::shared_ptr<AccessorInterface<Stringmaps> > StringmapsAccessor;