blob: 84b0c28f8a0b92d3d907257145566d77c4c6606a [file] [log] [blame]
Alex Deymoaea4c1c2015-08-19 20:24:43 -07001//
2// Copyright (C) 2011 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
Andrew de los Reyes000d8952011-03-02 15:21:14 -080016
Gilad Arnoldcf175a02014-07-10 16:48:47 -070017#ifndef UPDATE_ENGINE_CHROME_BROWSER_PROXY_RESOLVER_H_
18#define UPDATE_ENGINE_CHROME_BROWSER_PROXY_RESOLVER_H_
Andrew de los Reyes000d8952011-03-02 15:21:14 -080019
Alex Vakulenkod2779df2014-06-16 13:19:00 -070020#include <deque>
Andrew de los Reyes000d8952011-03-02 15:21:14 -080021#include <map>
22#include <string>
Alex Vakulenkod2779df2014-06-16 13:19:00 -070023#include <utility>
Andrew de los Reyes000d8952011-03-02 15:21:14 -080024
Andrew de los Reyes000d8952011-03-02 15:21:14 -080025#include <gtest/gtest_prod.h> // for FRIEND_TEST
26
Alex Vakulenko3f39d5c2015-10-13 09:27:13 -070027#include <brillo/message_loops/message_loop.h>
Alex Deymo60ca1a72015-06-18 18:19:15 -070028
Alex Deymo30534502015-07-20 15:06:33 -070029#include "update_engine/libcros_proxy.h"
Andrew de los Reyes000d8952011-03-02 15:21:14 -080030#include "update_engine/proxy_resolver.h"
31
32namespace chromeos_update_engine {
33
34extern const char kLibCrosServiceName[];
Andrew de los Reyes000d8952011-03-02 15:21:14 -080035extern const char kLibCrosProxyResolveName[];
36extern const char kLibCrosProxyResolveSignalInterface[];
Andrew de los Reyes000d8952011-03-02 15:21:14 -080037
38class ChromeBrowserProxyResolver : public ProxyResolver {
39 public:
Alex Deymo30534502015-07-20 15:06:33 -070040 explicit ChromeBrowserProxyResolver(LibCrosProxy* libcros_proxy);
Alex Deymo610277e2014-11-11 21:18:11 -080041 ~ChromeBrowserProxyResolver() override;
Alex Deymo30534502015-07-20 15:06:33 -070042
43 // Initialize the ProxyResolver using the provided DBus proxies.
Andrew de los Reyes000d8952011-03-02 15:21:14 -080044 bool Init();
45
Alex Deymo610277e2014-11-11 21:18:11 -080046 bool GetProxiesForUrl(const std::string& url,
47 ProxiesResolvedFn callback,
48 void* data) override;
Andrew de los Reyes000d8952011-03-02 15:21:14 -080049
50 private:
51 FRIEND_TEST(ChromeBrowserProxyResolverTest, ParseTest);
52 FRIEND_TEST(ChromeBrowserProxyResolverTest, SuccessTest);
Ben Chanf9cb98c2014-09-21 18:31:30 -070053 typedef std::multimap<std::string, std::pair<ProxiesResolvedFn, void*>>
54 CallbacksMap;
Alex Vakulenko3f39d5c2015-10-13 09:27:13 -070055 typedef std::multimap<std::string, brillo::MessageLoop::TaskId> TimeoutsMap;
Andrew de los Reyes000d8952011-03-02 15:21:14 -080056
Alex Deymo30534502015-07-20 15:06:33 -070057 // Called when the signal in UpdateEngineLibcrosProxyResolvedInterface is
58 // connected.
59 void OnSignalConnected(const std::string& interface_name,
60 const std::string& signal_name,
61 bool successful);
62
Andrew de los Reyes000d8952011-03-02 15:21:14 -080063 // Handle a reply from Chrome:
Alex Deymo30534502015-07-20 15:06:33 -070064 void OnProxyResolvedSignal(const std::string& source_url,
65 const std::string& proxy_info,
66 const std::string& error_message);
67
Andrew de los Reyes000d8952011-03-02 15:21:14 -080068 // Handle no reply:
69 void HandleTimeout(std::string source_url);
Alex Vakulenkod2779df2014-06-16 13:19:00 -070070
Andrew de los Reyes000d8952011-03-02 15:21:14 -080071 // Parses a string-encoded list of proxies and returns a deque
72 // of individual proxies. The last one will always be kNoProxy.
73 static std::deque<std::string> ParseProxyString(const std::string& input);
Alex Vakulenkod2779df2014-06-16 13:19:00 -070074
Andrew de los Reyes000d8952011-03-02 15:21:14 -080075 // Deletes internal state for the first instance of url in the state.
Alex Deymo60ca1a72015-06-18 18:19:15 -070076 // If delete_timer is set, calls CancelTask on the timer id.
Andrew de los Reyes000d8952011-03-02 15:21:14 -080077 // Returns the callback in an out parameter. Returns true on success.
78 bool DeleteUrlState(const std::string& url,
79 bool delete_timer,
80 std::pair<ProxiesResolvedFn, void*>* callback);
81
Gilad Arnold1877c392012-02-10 11:34:33 -080082 // Shutdown the dbus proxy object.
83 void Shutdown();
84
Alex Deymo30534502015-07-20 15:06:33 -070085 // DBus proxies to request a HTTP proxy resolution. The request is done in the
86 // service_interface_proxy() interface and the response is received as a
87 // signal in the ue_proxy_resolved_interface().
88 LibCrosProxy* libcros_proxy_;
89
Andrew de los Reyes000d8952011-03-02 15:21:14 -080090 int timeout_;
91 TimeoutsMap timers_;
92 CallbacksMap callbacks_;
93 DISALLOW_COPY_AND_ASSIGN(ChromeBrowserProxyResolver);
94};
95
96} // namespace chromeos_update_engine
97
Gilad Arnoldcf175a02014-07-10 16:48:47 -070098#endif // UPDATE_ENGINE_CHROME_BROWSER_PROXY_RESOLVER_H_