blob: ab0a92cc223aeba7cb23a996c13e80a5a7935dbc [file] [log] [blame]
Andrew de los Reyes000d8952011-03-02 15:21:14 -08001// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Gilad Arnoldcf175a02014-07-10 16:48:47 -07005#ifndef UPDATE_ENGINE_CHROME_BROWSER_PROXY_RESOLVER_H_
6#define UPDATE_ENGINE_CHROME_BROWSER_PROXY_RESOLVER_H_
Andrew de los Reyes000d8952011-03-02 15:21:14 -08007
Alex Vakulenkod2779df2014-06-16 13:19:00 -07008#include <deque>
Andrew de los Reyes000d8952011-03-02 15:21:14 -08009#include <map>
10#include <string>
Alex Vakulenkod2779df2014-06-16 13:19:00 -070011#include <utility>
Andrew de los Reyes000d8952011-03-02 15:21:14 -080012
13#include <dbus/dbus-glib.h>
14#include <dbus/dbus-glib-lowlevel.h>
15#include <gtest/gtest_prod.h> // for FRIEND_TEST
16
Alex Deymo60ca1a72015-06-18 18:19:15 -070017#include <chromeos/message_loops/message_loop.h>
18
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -080019#include "update_engine/dbus_wrapper_interface.h"
Andrew de los Reyes000d8952011-03-02 15:21:14 -080020#include "update_engine/proxy_resolver.h"
21
22namespace chromeos_update_engine {
23
24extern const char kLibCrosServiceName[];
25extern const char kLibCrosServicePath[];
26extern const char kLibCrosServiceInterface[];
27extern const char kLibCrosServiceResolveNetworkProxyMethodName[];
28extern const char kLibCrosProxyResolveName[];
29extern const char kLibCrosProxyResolveSignalInterface[];
30extern const char kLibCrosProxyResolveSignalFilter[];
31
32class ChromeBrowserProxyResolver : public ProxyResolver {
33 public:
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -080034 explicit ChromeBrowserProxyResolver(DBusWrapperInterface* dbus);
Alex Deymo610277e2014-11-11 21:18:11 -080035 ~ChromeBrowserProxyResolver() override;
Andrew de los Reyes000d8952011-03-02 15:21:14 -080036 bool Init();
37
Alex Deymo610277e2014-11-11 21:18:11 -080038 bool GetProxiesForUrl(const std::string& url,
39 ProxiesResolvedFn callback,
40 void* data) override;
Andrew de los Reyes000d8952011-03-02 15:21:14 -080041 void set_timeout(int seconds) { timeout_ = seconds; }
42
43 // Public for test
44 static DBusHandlerResult StaticFilterMessage(
45 DBusConnection* connection,
46 DBusMessage* message,
47 void* data) {
48 return reinterpret_cast<ChromeBrowserProxyResolver*>(data)->FilterMessage(
49 connection, message);
50 }
51
52 private:
53 FRIEND_TEST(ChromeBrowserProxyResolverTest, ParseTest);
54 FRIEND_TEST(ChromeBrowserProxyResolverTest, SuccessTest);
Ben Chanf9cb98c2014-09-21 18:31:30 -070055 typedef std::multimap<std::string, std::pair<ProxiesResolvedFn, void*>>
56 CallbacksMap;
Alex Deymo60ca1a72015-06-18 18:19:15 -070057 typedef std::multimap<std::string, chromeos::MessageLoop::TaskId> TimeoutsMap;
Andrew de los Reyes000d8952011-03-02 15:21:14 -080058
59 // Handle a reply from Chrome:
60 void HandleReply(const std::string& source_url,
61 const std::string& proxy_list);
62 DBusHandlerResult FilterMessage(
63 DBusConnection* connection,
64 DBusMessage* message);
65 // Handle no reply:
66 void HandleTimeout(std::string source_url);
Alex Vakulenkod2779df2014-06-16 13:19:00 -070067
Andrew de los Reyes000d8952011-03-02 15:21:14 -080068 // Parses a string-encoded list of proxies and returns a deque
69 // of individual proxies. The last one will always be kNoProxy.
70 static std::deque<std::string> ParseProxyString(const std::string& input);
Alex Vakulenkod2779df2014-06-16 13:19:00 -070071
Andrew de los Reyes000d8952011-03-02 15:21:14 -080072 // Deletes internal state for the first instance of url in the state.
Alex Deymo60ca1a72015-06-18 18:19:15 -070073 // If delete_timer is set, calls CancelTask on the timer id.
Andrew de los Reyes000d8952011-03-02 15:21:14 -080074 // Returns the callback in an out parameter. Returns true on success.
75 bool DeleteUrlState(const std::string& url,
76 bool delete_timer,
77 std::pair<ProxiesResolvedFn, void*>* callback);
78
Gilad Arnold1877c392012-02-10 11:34:33 -080079 // Shutdown the dbus proxy object.
80 void Shutdown();
81
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -080082 DBusWrapperInterface* dbus_;
Alex Deymo60ca1a72015-06-18 18:19:15 -070083 DBusGProxy* proxy_{nullptr};
84 DBusGProxy* peer_proxy_{nullptr};
Andrew de los Reyes000d8952011-03-02 15:21:14 -080085 int timeout_;
86 TimeoutsMap timers_;
87 CallbacksMap callbacks_;
88 DISALLOW_COPY_AND_ASSIGN(ChromeBrowserProxyResolver);
89};
90
91} // namespace chromeos_update_engine
92
Gilad Arnoldcf175a02014-07-10 16:48:47 -070093#endif // UPDATE_ENGINE_CHROME_BROWSER_PROXY_RESOLVER_H_