Move ProxyResolver to common.
HttpFetcher depends on it and HttpFetcher is in common.
Bug: 28171891
Test: mma
Change-Id: I1783821c4a7d6785ee23df1cde648a3e1ea8fadf
diff --git a/common/proxy_resolver.cc b/common/proxy_resolver.cc
new file mode 100644
index 0000000..0591c3e
--- /dev/null
+++ b/common/proxy_resolver.cc
@@ -0,0 +1,66 @@
+//
+// 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