AU: Full proxy support
This CL Introduces a new proxy resolver that queries Chrome browser
for all URLs. This means the updater now works with Proxy
AutoConfiguration (PAC) files and automatic proxy detection.
BUG=chromium-os:9478
TEST=performed update, unittests
Review URL: http://codereview.chromium.org/6594025
Change-Id: I2c169aec06109e3eabc4011e0b536685dfd13f79
diff --git a/dbus_interface.h b/dbus_interface.h
index de09fff..ec266b5 100644
--- a/dbus_interface.h
+++ b/dbus_interface.h
@@ -9,6 +9,7 @@
#include <base/logging.h>
#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
namespace chromeos_update_engine {
@@ -25,7 +26,7 @@
virtual void ProxyUnref(DBusGProxy* proxy) = 0;
// wraps dbus_g_bus_get
- virtual DBusGConnection* BusGet(DBusBusType type, GError** error) = 0;
+ virtual DBusGConnection* BusGet(DBusBusType type, GError** error) = 0;
// wraps dbus_g_proxy_call
virtual gboolean ProxyCall(DBusGProxy* proxy,
@@ -44,6 +45,38 @@
GType var_arg4, gchar** var_arg5,
GType var_arg6, GArray** var_arg7,
GType var_arg8) = 0;
+
+ virtual gboolean ProxyCall(DBusGProxy* proxy,
+ const char* method,
+ GError** error,
+ GType var_arg1, const char* var_arg2,
+ GType var_arg3, const char* var_arg4,
+ GType var_arg5, const char* var_arg6,
+ GType var_arg7, GType var_arg8) = 0;
+
+ virtual DBusConnection* ConnectionGetConnection(DBusGConnection* gbus) = 0;
+
+ virtual void DbusBusAddMatch(DBusConnection* connection,
+ const char* rule,
+ DBusError* error) = 0;
+
+ virtual dbus_bool_t DbusConnectionAddFilter(
+ DBusConnection* connection,
+ DBusHandleMessageFunction function,
+ void* user_data,
+ DBusFreeFunction free_data_function) = 0;
+ virtual void DbusConnectionRemoveFilter(DBusConnection* connection,
+ DBusHandleMessageFunction function,
+ void* user_data) = 0;
+ virtual dbus_bool_t DbusMessageIsSignal(DBusMessage* message,
+ const char* interface,
+ const char* signal_name) = 0;
+ virtual dbus_bool_t DbusMessageGetArgs(DBusMessage* message,
+ DBusError* error,
+ GType var_arg1, char** var_arg2,
+ GType var_arg3, char** var_arg4,
+ GType var_arg5, char** var_arg6,
+ GType var_arg7) = 0;
};
class ConcreteDbusGlib : public DbusGlibInterface {
@@ -63,7 +96,7 @@
g_object_unref(proxy);
}
- virtual DBusGConnection* BusGet(DBusBusType type, GError** error) {
+ virtual DBusGConnection* BusGet(DBusBusType type, GError** error) {
return dbus_g_bus_get(type, error);
}
@@ -90,6 +123,62 @@
proxy, method, error, var_arg1, var_arg2, var_arg3,
var_arg4, var_arg5, var_arg6, var_arg7, var_arg8);
}
+
+ virtual gboolean ProxyCall(DBusGProxy* proxy,
+ const char* method,
+ GError** error,
+ GType var_arg1, const char* var_arg2,
+ GType var_arg3, const char* var_arg4,
+ GType var_arg5, const char* var_arg6,
+ GType var_arg7, GType var_arg8) {
+ return dbus_g_proxy_call(
+ proxy, method, error, var_arg1, var_arg2, var_arg3,
+ var_arg4, var_arg5, var_arg6, var_arg7, var_arg8);
+ }
+
+
+ virtual DBusConnection* ConnectionGetConnection(DBusGConnection* gbus) {
+ return dbus_g_connection_get_connection(gbus);
+ }
+
+ virtual void DbusBusAddMatch(DBusConnection* connection,
+ const char* rule,
+ DBusError* error) {
+ dbus_bus_add_match(connection, rule, error);
+ }
+
+ virtual dbus_bool_t DbusConnectionAddFilter(
+ DBusConnection* connection,
+ DBusHandleMessageFunction function,
+ void* user_data,
+ DBusFreeFunction free_data_function) {
+ return dbus_connection_add_filter(connection,
+ function,
+ user_data,
+ free_data_function);
+ }
+ virtual void DbusConnectionRemoveFilter(DBusConnection* connection,
+ DBusHandleMessageFunction function,
+ void* user_data) {
+ dbus_connection_remove_filter(connection, function, user_data);
+ }
+ dbus_bool_t DbusMessageIsSignal(DBusMessage* message,
+ const char* interface,
+ const char* signal_name) {
+ return dbus_message_is_signal(message, interface, signal_name);
+ }
+ virtual dbus_bool_t DbusMessageGetArgs(DBusMessage* message,
+ DBusError* error,
+ GType var_arg1, char** var_arg2,
+ GType var_arg3, char** var_arg4,
+ GType var_arg5, char** var_arg6,
+ GType var_arg7) {
+ return dbus_message_get_args(message, error,
+ var_arg1, var_arg2,
+ var_arg3, var_arg4,
+ var_arg5, var_arg6,
+ var_arg7);
+ }
};
} // namespace chromeos_update_engine