AU: Proxy Resolver classes

A collection of classes (abstract ProxyResolver interface and two
concrete implementations). The abstraction is one that should suit us
moving forward: a string URL is provided and a collection of proxy
servers is returned. One implementation always returns [no
proxy]. Another returns [manual settings from chrome, if applicable,
..., no proxy].

A future concrete implementation will consult Chrome via DBus with the
URL in question, however this is delayed until Chrome exposes such an
API.

As a result of this API missing from Chrome, this CL only resolves
proxies for a URL with manually input proxy settings.

Future CLs will integrate this into the rest of the update system.

BUG=3167
TEST=unit tests, (with future CLs) working proxy support on device

Review URL: http://codereview.chromium.org/5151005

Change-Id: If9dc6d09da681bca6f6ae74c896ba946ab81cb4d
diff --git a/mock_dbus_interface.h b/mock_dbus_interface.h
index bf0d609..c817109 100644
--- a/mock_dbus_interface.h
+++ b/mock_dbus_interface.h
@@ -30,6 +30,34 @@
                                    GType var_arg1,
                                    GHashTable** var_arg2,
                                    GType var_arg3));
+  MOCK_METHOD10(ProxyCall, gboolean(DBusGProxy* proxy,
+                                    const char* method,
+                                    GError** error,
+                                    GType var_arg1, const char* var_arg2,
+                                    GType var_arg3,
+                                    GType var_arg4, gchar** var_arg5,
+                                    GType var_arg6, GArray** var_arg7));
+
+  // Since gmock only supports mocking functions up to 10 args, we
+  // take the 11-arg function we'd like to mock, drop the last arg
+  // and call the 10-arg version. Dropping the last arg isn't ideal,
+  // but this is a lot better than nothing.
+  gboolean ProxyCall(DBusGProxy* proxy,
+                       const char* method,
+                       GError** error,
+                       GType var_arg1, const char* var_arg2,
+                       GType var_arg3,
+                       GType var_arg4, gchar** var_arg5,
+                       GType var_arg6, GArray** var_arg7,
+                       GType var_arg8) {
+    return ProxyCall(proxy,
+                     method,
+                     error,
+                     var_arg1, var_arg2,
+                     var_arg3,
+                     var_arg4, var_arg5,
+                     var_arg6, var_arg7);
+  }
 };
 
 }  // namespace chromeos_update_engine