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 // Gets the stream associated with |url|. Returns NULL if there is no such 36 // stream. 37 scoped_refptr<Stream> GetStream(const GURL& url); 38 39 private: 40 typedef std::map<GURL, scoped_refptr<Stream> > StreamMap; 41 42 StreamMap streams_; 43 44 DISALLOW_COPY_AND_ASSIGN(StreamRegistry); 45 }; 46 47 } // namespace content 48 49 #endif // CONTENT_BROWSER_STREAMS_STREAM_REGISTRY_H_ 50 51 52