| Index: net/socket_stream/socket_stream_throttle.cc
|
| diff --git a/net/socket_stream/socket_stream_throttle.cc b/net/socket_stream/socket_stream_throttle.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6a1d20df692bd315d4b0c892672280e87a15946b
|
| --- /dev/null
|
| +++ b/net/socket_stream/socket_stream_throttle.cc
|
| @@ -0,0 +1,80 @@
|
| +// Copyright (c) 2009 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.
|
| +
|
| +#include <string>
|
| +
|
| +#include "net/socket_stream/socket_stream_throttle.h"
|
| +
|
| +#include "base/hash_tables.h"
|
| +#include "base/singleton.h"
|
| +#include "net/base/completion_callback.h"
|
| +#include "net/socket_stream/socket_stream.h"
|
| +
|
| +namespace net {
|
| +
|
| +// Default SocketStreamThrottle. No throttling. Used for unknown URL scheme.
|
| +class DefaultSocketStreamThrottle : public SocketStreamThrottle {
|
| + private:
|
| + DefaultSocketStreamThrottle() {}
|
| + virtual ~DefaultSocketStreamThrottle() {}
|
| + friend struct DefaultSingletonTraits<DefaultSocketStreamThrottle>;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DefaultSocketStreamThrottle);
|
| +};
|
| +
|
| +class SocketStreamThrottleRegistry {
|
| + public:
|
| + SocketStreamThrottle* GetSocketStreamThrottleForScheme(
|
| + const std::string& scheme);
|
| +
|
| + void RegisterSocketStreamThrottle(
|
| + const std::string& scheme, SocketStreamThrottle* throttle);
|
| +
|
| + private:
|
| + typedef base::hash_map<std::string, SocketStreamThrottle*> ThrottleMap;
|
| +
|
| + SocketStreamThrottleRegistry() {}
|
| + ~SocketStreamThrottleRegistry() {}
|
| + friend struct DefaultSingletonTraits<SocketStreamThrottleRegistry>;
|
| +
|
| + ThrottleMap throttles_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SocketStreamThrottleRegistry);
|
| +};
|
| +
|
| +SocketStreamThrottle*
|
| +SocketStreamThrottleRegistry::GetSocketStreamThrottleForScheme(
|
| + const std::string& scheme) {
|
| + ThrottleMap::const_iterator found = throttles_.find(scheme);
|
| + if (found == throttles_.end()) {
|
| + SocketStreamThrottle* throttle =
|
| + Singleton<DefaultSocketStreamThrottle>::get();
|
| + throttles_[scheme] = throttle;
|
| + return throttle;
|
| + }
|
| + return found->second;
|
| +}
|
| +
|
| +void SocketStreamThrottleRegistry::RegisterSocketStreamThrottle(
|
| + const std::string& scheme, SocketStreamThrottle* throttle) {
|
| + throttles_[scheme] = throttle;
|
| +}
|
| +
|
| +/* static */
|
| +SocketStreamThrottle* SocketStreamThrottle::GetSocketStreamThrottleForScheme(
|
| + const std::string& scheme) {
|
| + SocketStreamThrottleRegistry* registry =
|
| + Singleton<SocketStreamThrottleRegistry>::get();
|
| + return registry->GetSocketStreamThrottleForScheme(scheme);
|
| +}
|
| +
|
| +/* static */
|
| +void SocketStreamThrottle::RegisterSocketStreamThrottle(
|
| + const std::string& scheme, SocketStreamThrottle* throttle) {
|
| + SocketStreamThrottleRegistry* registry =
|
| + Singleton<SocketStreamThrottleRegistry>::get();
|
| + registry->RegisterSocketStreamThrottle(scheme, throttle);
|
| +}
|
| +
|
| +} // namespace net
|
|
|