98 lines
3.4 KiB
C++
98 lines
3.4 KiB
C++
//
|
|
// 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_
|