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_CONTEXT_H_ 6#define CONTENT_BROWSER_STREAMS_STREAM_CONTEXT_H_ 7 8#include "base/memory/ref_counted.h" 9#include "base/memory/scoped_ptr.h" 10#include "base/sequenced_task_runner_helpers.h" 11#include "content/common/content_export.h" 12 13namespace content { 14class BrowserContext; 15class StreamRegistry; 16struct StreamContextDeleter; 17 18// A context class that keeps track of StreamRegistry used by the chrome. 19// There is an instance associated with each BrowserContext. There could be 20// multiple URLRequestContexts in the same browser context that refers to the 21// same instance. 22// 23// All methods, except the ctor, are expected to be called on 24// the IO thread (unless specifically called out in doc comments). 25class StreamContext 26 : public base::RefCountedThreadSafe<StreamContext, 27 StreamContextDeleter> { 28 public: 29 StreamContext(); 30 31 CONTENT_EXPORT static StreamContext* GetFor(BrowserContext* browser_context); 32 33 void InitializeOnIOThread(); 34 35 StreamRegistry* registry() const { return registry_.get(); } 36 37 protected: 38 virtual ~StreamContext(); 39 40 private: 41 friend class base::DeleteHelper<StreamContext>; 42 friend class base::RefCountedThreadSafe<StreamContext, 43 StreamContextDeleter>; 44 friend struct StreamContextDeleter; 45 46 void DeleteOnCorrectThread() const; 47 48 scoped_ptr<StreamRegistry> registry_; 49}; 50 51struct StreamContextDeleter { 52 static void Destruct(const StreamContext* context) { 53 context->DeleteOnCorrectThread(); 54 } 55}; 56 57} // namespace content 58 59#endif // CONTENT_BROWSER_STREAMS_STREAM_CONTEXT_H_ 60