Index: content/browser/net/network_quality_observer_impl.h |
diff --git a/content/browser/net/network_quality_observer_impl.h b/content/browser/net/network_quality_observer_impl.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5ef0712b6fdad110e1e4d8ae83af1e606425f603 |
--- /dev/null |
+++ b/content/browser/net/network_quality_observer_impl.h |
@@ -0,0 +1,61 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CONTENT_BROWSER_NET_NETWORK_QUALITY_OBSERVER_IMPL_H_ |
+#define CONTENT_BROWSER_NET_NETWORK_QUALITY_OBSERVER_IMPL_H_ |
+ |
+#include <stdint.h> |
+ |
+#include <memory> |
+ |
+#include "base/macros.h" |
+#include "base/threading/thread_checker.h" |
+#include "content/common/content_export.h" |
+#include "content/public/browser/network_quality_observer_factory.h" |
+#include "net/nqe/network_quality.h" |
+#include "net/nqe/network_quality_estimator.h" |
+ |
+namespace content { |
+ |
+// Listens for changes to the network quality and manages sending updates to |
+// each RenderProcess via mojo. |
+class CONTENT_EXPORT NetworkQualityObserverImpl |
+ : public net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver { |
+ public: |
+ explicit NetworkQualityObserverImpl( |
+ net::NetworkQualityEstimator* network_quality_estimator); |
+ |
+ ~NetworkQualityObserverImpl() override; |
+ |
+ private: |
+ class UiThreadObserver; |
+ |
+ // net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver |
+ // implementation: |
+ void OnRTTOrThroughputEstimatesComputed( |
+ base::TimeDelta http_rtt, |
+ base::TimeDelta transport_rtt, |
+ int32_t downstream_throughput_kbps) override; |
+ |
+ // |ui_thread_observer_| is owned by |this|, and interacts with |
+ // the render processes. It is created on the IO thread but afterwards, should |
+ // only be accessed on the UI thread. |ui_thread_observer_| is guaranteed to |
+ // be non-null during the lifetime of |this|. |
+ std::unique_ptr<UiThreadObserver> ui_thread_observer_; |
+ |
+ // |network_quality_estimator_| is guaranteed to be non-null during the |
+ // lifetime of |this|. |
+ net::NetworkQualityEstimator* network_quality_estimator_; |
+ |
+ // The network quality when the |ui_thread_observer_| was last notified. |
+ net::nqe::internal::NetworkQuality last_notified_network_quality_; |
+ |
+ base::ThreadChecker thread_checker_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NetworkQualityObserverImpl); |
+}; |
+ |
+} // namespace content |
+ |
+#endif // CONTENT_BROWSER_NET_NETWORK_QUALITY_OBSERVER_IMPL_H_ |