| // |
| // Copyright (C) 2011 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #ifndef UPDATE_ENGINE_CHROME_BROWSER_PROXY_RESOLVER_H_ |
| #define UPDATE_ENGINE_CHROME_BROWSER_PROXY_RESOLVER_H_ |
| |
| #include <deque> |
| #include <map> |
| #include <string> |
| #include <utility> |
| |
| #include <gtest/gtest_prod.h> // for FRIEND_TEST |
| |
| #include <brillo/message_loops/message_loop.h> |
| |
| #include "update_engine/libcros_proxy.h" |
| #include "update_engine/proxy_resolver.h" |
| |
| namespace chromeos_update_engine { |
| |
| extern const char kLibCrosServiceName[]; |
| extern const char kLibCrosProxyResolveName[]; |
| extern const char kLibCrosProxyResolveSignalInterface[]; |
| |
| class ChromeBrowserProxyResolver : public ProxyResolver { |
| public: |
| explicit ChromeBrowserProxyResolver(LibCrosProxy* libcros_proxy); |
| ~ChromeBrowserProxyResolver() override; |
| |
| // Initialize the ProxyResolver using the provided DBus proxies. |
| bool Init(); |
| |
| bool GetProxiesForUrl(const std::string& url, |
| ProxiesResolvedFn callback, |
| void* data) override; |
| |
| private: |
| FRIEND_TEST(ChromeBrowserProxyResolverTest, ParseTest); |
| FRIEND_TEST(ChromeBrowserProxyResolverTest, SuccessTest); |
| typedef std::multimap<std::string, std::pair<ProxiesResolvedFn, void*>> |
| CallbacksMap; |
| typedef std::multimap<std::string, brillo::MessageLoop::TaskId> TimeoutsMap; |
| |
| // Called when the signal in UpdateEngineLibcrosProxyResolvedInterface is |
| // connected. |
| void OnSignalConnected(const std::string& interface_name, |
| const std::string& signal_name, |
| bool successful); |
| |
| // Handle a reply from Chrome: |
| void OnProxyResolvedSignal(const std::string& source_url, |
| const std::string& proxy_info, |
| const std::string& error_message); |
| |
| // Handle no reply: |
| void HandleTimeout(std::string source_url); |
| |
| // Parses a string-encoded list of proxies and returns a deque |
| // of individual proxies. The last one will always be kNoProxy. |
| static std::deque<std::string> ParseProxyString(const std::string& input); |
| |
| // Deletes internal state for the first instance of url in the state. |
| // If delete_timer is set, calls CancelTask on the timer id. |
| // Returns the callback in an out parameter. Returns true on success. |
| bool DeleteUrlState(const std::string& url, |
| bool delete_timer, |
| std::pair<ProxiesResolvedFn, void*>* callback); |
| |
| // Shutdown the dbus proxy object. |
| void Shutdown(); |
| |
| // DBus proxies to request a HTTP proxy resolution. The request is done in the |
| // service_interface_proxy() interface and the response is received as a |
| // signal in the ue_proxy_resolved_interface(). |
| LibCrosProxy* libcros_proxy_; |
| |
| int timeout_; |
| TimeoutsMap timers_; |
| CallbacksMap callbacks_; |
| DISALLOW_COPY_AND_ASSIGN(ChromeBrowserProxyResolver); |
| }; |
| |
| } // namespace chromeos_update_engine |
| |
| #endif // UPDATE_ENGINE_CHROME_BROWSER_PROXY_RESOLVER_H_ |