1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_BROWSER_STREAMS_STREAM_REGISTRY_H_ 6 #define CONTENT_BROWSER_STREAMS_STREAM_REGISTRY_H_ 7 8 #include <map> 9 10 #include "base/basictypes.h" 11 #include "base/memory/ref_counted.h" 12 #include "base/threading/non_thread_safe.h" 13 #include "content/common/content_export.h" 14 #include "url/gurl.h" 15 16 namespace content { 17 18 class Stream; 19 20 // Maintains a mapping of blob: URLs to active streams. 21 class CONTENT_EXPORT StreamRegistry : public base::NonThreadSafe { 22 public: 23 StreamRegistry(); 24 virtual ~StreamRegistry(); 25 26 // Registers a stream, and sets its URL. 27 void RegisterStream(scoped_refptr<Stream> stream); 28 29 // Clones a stream. Returns true on success, or false if |src_url| doesn't 30 // exist. 31 bool CloneStream(const GURL& url, const GURL& src_url); 32 33 void UnregisterStream(const GURL& url); 34 35 // Called by Stream instances to request increase of memory usage. If the 36 // total memory usage for this registry is going to exceed the limit, 37 // returns false. Otherwise, updates |total_memory_usage_| and returns true. 38 // 39 // |current_size| is the up-to-date size of ByteStream of the Stream instance 40 // and |increase| must be the amount of data going to be added to the Stream 41 // instance. 42 bool UpdateMemoryUsage(const GURL& url, size_t current_size, size_t increase); 43 44 // Gets the stream associated with |url|. Returns NULL if there is no such 45 // stream. 46 scoped_refptr<Stream> GetStream(const GURL& url); 47 48 void set_max_memory_usage_for_testing(size_t size) { 49 max_memory_usage_ = size; 50 } 51 52 private: 53 typedef std::map<GURL, scoped_refptr<Stream> > StreamMap; 54 55 StreamMap streams_; 56 57 size_t total_memory_usage_; 58 59 // Maximum amount of memory allowed to use for Stream instances registered 60 // with this registry. 61 size_t max_memory_usage_; 62 63 DISALLOW_COPY_AND_ASSIGN(StreamRegistry); 64 }; 65 66 } // namespace content 67 68 #endif // CONTENT_BROWSER_STREAMS_STREAM_REGISTRY_H_ 69