| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This class helps to remember what domains may be needed to be resolved when a | 5 // This class helps to remember what domains may be needed to be resolved when a |
| 6 // navigation takes place to a given URL. This information is gathered when a | 6 // navigation takes place to a given URL. This information is gathered when a |
| 7 // navigation to a subresource identifies a referring URL. | 7 // navigation to a subresource identifies a referring URL. |
| 8 // When future navigations take place to known referrer sites, then we | 8 // When future navigations take place to known referrer sites, then we |
| 9 // speculatively either pre-warm a TCP/IP conneciton, or at a minimum, resolve | 9 // speculatively either pre-warm a TCP/IP conneciton, or at a minimum, resolve |
| 10 // the host name via DNS. | 10 // the host name via DNS. |
| 11 | 11 |
| 12 // All access to this class is performed via the Predictor class, which only | 12 // All access to this class is performed via the Predictor class, which only |
| 13 // operates on the IO thread. | 13 // operates on the IO thread. |
| 14 | 14 |
| 15 #ifndef CHROME_BROWSER_NET_REFERRER_H_ | 15 #ifndef CHROME_BROWSER_NET_REFERRER_H_ |
| 16 #define CHROME_BROWSER_NET_REFERRER_H_ | 16 #define CHROME_BROWSER_NET_REFERRER_H_ |
| 17 | 17 |
| 18 #include <stdint.h> |
| 19 |
| 18 #include <map> | 20 #include <map> |
| 19 | 21 #include <memory> |
| 20 #include <stdint.h> | |
| 21 | 22 |
| 22 #include "base/macros.h" | 23 #include "base/macros.h" |
| 23 #include "base/time/time.h" | 24 #include "base/time/time.h" |
| 25 #include "base/values.h" |
| 24 #include "net/base/host_port_pair.h" | 26 #include "net/base/host_port_pair.h" |
| 25 #include "url/gurl.h" | 27 #include "url/gurl.h" |
| 26 | 28 |
| 27 namespace base { | |
| 28 class Value; | |
| 29 } | |
| 30 | |
| 31 namespace chrome_browser_net { | 29 namespace chrome_browser_net { |
| 32 | 30 |
| 33 //------------------------------------------------------------------------------ | 31 //------------------------------------------------------------------------------ |
| 34 // For each hostname in a Referrer, we have a ReferrerValue. It indicates | 32 // For each hostname in a Referrer, we have a ReferrerValue. It indicates |
| 35 // exactly how much value (re: latency reduction, or connection use) has | 33 // exactly how much value (re: latency reduction, or connection use) has |
| 36 // resulted from having this entry. | 34 // resulted from having this entry. |
| 37 class ReferrerValue { | 35 class ReferrerValue { |
| 38 public: | 36 public: |
| 39 ReferrerValue(); | 37 ReferrerValue(); |
| 40 | 38 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 Referrer(); | 99 Referrer(); |
| 102 void IncrementUseCount() { ++use_count_; } | 100 void IncrementUseCount() { ++use_count_; } |
| 103 int64_t use_count() const { return use_count_; } | 101 int64_t use_count() const { return use_count_; } |
| 104 | 102 |
| 105 // Add the indicated url to the list that are resolved via DNS when the user | 103 // Add the indicated url to the list that are resolved via DNS when the user |
| 106 // navigates to this referrer. Note that if the list is long, an entry may be | 104 // navigates to this referrer. Note that if the list is long, an entry may be |
| 107 // discarded to make room for this insertion. | 105 // discarded to make room for this insertion. |
| 108 void SuggestHost(const GURL& url); | 106 void SuggestHost(const GURL& url); |
| 109 | 107 |
| 110 // Provide methods for persisting, and restoring contents into a Value class. | 108 // Provide methods for persisting, and restoring contents into a Value class. |
| 111 base::Value* Serialize() const; | 109 std::unique_ptr<base::ListValue> Serialize() const; |
| 112 void Deserialize(const base::Value& referrers); | 110 void Deserialize(const base::Value& referrers); |
| 113 | 111 |
| 114 private: | 112 private: |
| 115 // Helper function for pruning list. Metric for usefulness is "large accrued | 113 // Helper function for pruning list. Metric for usefulness is "large accrued |
| 116 // value," in the form of latency_ savings associated with a host name. We | 114 // value," in the form of latency_ savings associated with a host name. We |
| 117 // also give credit for a name being newly added, by scalling latency per | 115 // also give credit for a name being newly added, by scalling latency per |
| 118 // lifetime (time since birth). For instance, when two names have accrued | 116 // lifetime (time since birth). For instance, when two names have accrued |
| 119 // the same latency_ savings, the older one is less valuable as it didn't | 117 // the same latency_ savings, the older one is less valuable as it didn't |
| 120 // accrue savings as quickly. | 118 // accrue savings as quickly. |
| 121 void DeleteLeastUseful(); | 119 void DeleteLeastUseful(); |
| 122 | 120 |
| 123 // The number of times this referer had its subresources scanned for possible | 121 // The number of times this referer had its subresources scanned for possible |
| 124 // preconnection or DNS preresolution. | 122 // preconnection or DNS preresolution. |
| 125 int64_t use_count_; | 123 int64_t use_count_; |
| 126 | 124 |
| 127 // We put these into a std::map<>, so we need copy constructors. | 125 // We put these into a std::map<>, so we need copy constructors. |
| 128 // DISALLOW_COPY_AND_ASSIGN(Referrer); | 126 // DISALLOW_COPY_AND_ASSIGN(Referrer); |
| 129 // TODO(jar): Consider optimization to use pointers to these instances, and | 127 // TODO(jar): Consider optimization to use pointers to these instances, and |
| 130 // avoid deep copies during re-alloc of the containing map. | 128 // avoid deep copies during re-alloc of the containing map. |
| 131 }; | 129 }; |
| 132 | 130 |
| 133 } // namespace chrome_browser_net | 131 } // namespace chrome_browser_net |
| 134 | 132 |
| 135 #endif // CHROME_BROWSER_NET_REFERRER_H_ | 133 #endif // CHROME_BROWSER_NET_REFERRER_H_ |
| OLD | NEW |