| Index: net/http/http_server_properties_impl.h
|
| diff --git a/net/http/http_server_properties_impl.h b/net/http/http_server_properties_impl.h
|
| index 7a5441c57fbebffea2432701bead388ae51f67cb..bd0a9e68407e6eace08f94010e53256dc565e11e 100644
|
| --- a/net/http/http_server_properties_impl.h
|
| +++ b/net/http/http_server_properties_impl.h
|
| @@ -93,32 +93,49 @@ class NET_EXPORT HttpServerPropertiesImpl
|
| void MaybeForceHTTP11(const HostPortPair& server,
|
| SSLConfig* ssl_config) override;
|
|
|
| - // Returns true if |server| has an Alternate-Protocol header.
|
| + // Returns true iff |server| has a non-broken AlternateProtocol with
|
| + // probability exceeding threshold, or if AlternateProtocol is forced.
|
| + // TODO(bnc): Rename to HasAlternativeService.
|
| bool HasAlternateProtocol(const HostPortPair& server) override;
|
|
|
| - // Returns the Alternate-Protocol and port for |server|.
|
| - // HasAlternateProtocol(server) must be true.
|
| + // Returns the first non-broken AlternateProtocol with probability exceeding
|
| + // threshold for |server|, or forced AlternateProtocol, or one with
|
| + // UNINITIALIZED_ALTERNATE_PROTOCOL.
|
| AlternateProtocolInfo GetAlternateProtocol(
|
| const HostPortPair& server) override;
|
|
|
| - // Sets the Alternate-Protocol for |server|.
|
| - void SetAlternateProtocol(const HostPortPair& server,
|
| + // Adds an Alternate-Protocol for |server|.
|
| + void AddAlternateProtocol(const HostPortPair& server,
|
| uint16 alternate_port,
|
| AlternateProtocol alternate_protocol,
|
| double probability) override;
|
|
|
| - // Sets the Alternate-Protocol for |server| to be BROKEN.
|
| - void SetBrokenAlternateProtocol(const HostPortPair& server) override;
|
| + // Sets a given Alternate-Protocol for |server| to be broken.
|
| + void SetBrokenAlternateProtocol(
|
| + const HostPortPair& server,
|
| + const AlternateProtocolInfo& broken_alternate_protocol) override;
|
|
|
| - // Returns true if Alternate-Protocol for |server| was recently BROKEN.
|
| - bool WasAlternateProtocolRecentlyBroken(const HostPortPair& server) override;
|
| + // Returns true if given Alternate-Protocol for |server| was recently broken.
|
| + bool WasAlternateProtocolRecentlyBroken(
|
| + const HostPortPair& server,
|
| + const AlternateProtocolInfo& alternate_protocol) override;
|
|
|
| - // Confirms that Alternate-Protocol for |server| is working.
|
| - void ConfirmAlternateProtocol(const HostPortPair& server) override;
|
| + // Confirms that given Alternate-Protocol for |server| is working.
|
| + void ConfirmAlternateProtocol(
|
| + const HostPortPair& server,
|
| + const AlternateProtocolInfo& alternate_protocol) override;
|
|
|
| - // Clears the Alternate-Protocol for |server|.
|
| + // Clears all Alternate-Protocols for |server|.
|
| void ClearAlternateProtocol(const HostPortPair& server) override;
|
|
|
| + // Clears all Alternate-Protocols that are not broken for |server|.
|
| + void ClearNonBrokenAlternateProtocols(const HostPortPair& server) override;
|
| +
|
| + // Removes an Alternate-Protocol for |server|.
|
| + void RemoveAlternateProtocol(
|
| + const HostPortPair& server,
|
| + const AlternateProtocolInfo& alternate_protocol) override;
|
| +
|
| // Returns all Alternate-Protocol mappings.
|
| const AlternateProtocolMap& alternate_protocol_map() const override;
|
|
|
| @@ -171,16 +188,45 @@ class NET_EXPORT HttpServerPropertiesImpl
|
| typedef std::map<HostPortPair, HostPortPair> CanonicalHostMap;
|
| typedef std::vector<std::string> CanonicalSufficList;
|
| typedef std::set<HostPortPair> Http11ServerHostPortSet;
|
| - // List of broken host:ports and the times when they can be expired.
|
| + // Server, port, and AlternateProtocol: an entity that can be broken. (Once
|
| + // we use AlternativeService, the same AltSvc can be broken for one server but
|
| + // not for another depending on what certificate it can offer.)
|
| struct BrokenAlternateProtocolEntry {
|
| + BrokenAlternateProtocolEntry(const BrokenAlternateProtocolEntry&) = default;
|
| + BrokenAlternateProtocolEntry(const HostPortPair& server,
|
| + uint16 port,
|
| + AlternateProtocol protocol)
|
| + : server(server), port(port), protocol(protocol) {}
|
| +
|
| + bool operator<(const BrokenAlternateProtocolEntry& other) const {
|
| + if (!server.Equals(other.server))
|
| + return server < other.server;
|
| + if (port != other.port)
|
| + return port < other.port;
|
| + return protocol < other.protocol;
|
| + }
|
| +
|
| HostPortPair server;
|
| + uint16 port;
|
| + AlternateProtocol protocol;
|
| + };
|
| + // List of BrokenAlternateProtocolEntries with when they can be expired.
|
| + struct BrokenAlternateProtocolEntryWithTime {
|
| + BrokenAlternateProtocolEntryWithTime(
|
| + const BrokenAlternateProtocolEntry& broken_alternate_protocol_entry,
|
| + base::TimeTicks when)
|
| + : broken_alternate_protocol_entry(broken_alternate_protocol_entry),
|
| + when(when) {}
|
| +
|
| + BrokenAlternateProtocolEntry broken_alternate_protocol_entry;
|
| base::TimeTicks when;
|
| };
|
| - typedef std::list<BrokenAlternateProtocolEntry>
|
| + typedef std::list<BrokenAlternateProtocolEntryWithTime>
|
| BrokenAlternateProtocolList;
|
| // Map from host:port to the number of times alternate protocol has
|
| // been marked broken.
|
| - typedef std::map<HostPortPair, int> BrokenAlternateProtocolMap;
|
| + typedef std::map<BrokenAlternateProtocolEntry, int>
|
| + BrokenAlternateProtocolMap;
|
|
|
| // Return the iterator for |server|, or for its canonical host, or end.
|
| AlternateProtocolMap::const_iterator GetAlternateProtocolIterator(
|
|
|