// // Copyright (C) 2010 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. // #include "update_engine/common/proxy_resolver.h" #include <base/bind.h> #include <base/location.h> using brillo::MessageLoop; using std::deque; using std::string; namespace chromeos_update_engine { const char kNoProxy[] = "direct://"; const ProxyRequestId kProxyRequestIdNull = brillo::MessageLoop::kTaskIdNull; DirectProxyResolver::~DirectProxyResolver() { if (idle_callback_id_ != MessageLoop::kTaskIdNull) { // The DirectProxyResolver is instantiated as part of the UpdateAttempter // which is also instantiated by default by the FakeSystemState, even when // it is not used. We check the manage_shares_id_ before calling the // MessageLoop::current() since the unit test using a FakeSystemState may // have not define a MessageLoop for the current thread. MessageLoop::current()->CancelTask(idle_callback_id_); idle_callback_id_ = MessageLoop::kTaskIdNull; } } ProxyRequestId DirectProxyResolver::GetProxiesForUrl( const string& url, const ProxiesResolvedFn& callback) { idle_callback_id_ = MessageLoop::current()->PostTask( FROM_HERE, base::Bind(&DirectProxyResolver::ReturnCallback, base::Unretained(this), callback)); return idle_callback_id_; } bool DirectProxyResolver::CancelProxyRequest(ProxyRequestId request) { return MessageLoop::current()->CancelTask(request); } void DirectProxyResolver::ReturnCallback(const ProxiesResolvedFn& callback) { idle_callback_id_ = MessageLoop::kTaskIdNull; // Initialize proxy pool with as many proxies as indicated (all identical). deque<string> proxies(num_proxies_, kNoProxy); callback.Run(proxies); } } // namespace chromeos_update_engine