OLD | NEW |
| (Empty) |
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 #include "content/browser/streams/stream_context.h" | |
6 | |
7 #include "base/bind.h" | |
8 #include "content/browser/streams/stream_registry.h" | |
9 #include "content/public/browser/browser_context.h" | |
10 | |
11 using base::UserDataAdapter; | |
12 | |
13 namespace { | |
14 const char* kStreamContextKeyName = "content_stream_context"; | |
15 } | |
16 | |
17 namespace content { | |
18 | |
19 StreamContext::StreamContext() {} | |
20 | |
21 StreamContext* StreamContext::GetFor(BrowserContext* context) { | |
22 if (!context->GetUserData(kStreamContextKeyName)) { | |
23 scoped_refptr<StreamContext> stream = new StreamContext(); | |
24 context->SetUserData(kStreamContextKeyName, | |
25 new UserDataAdapter<StreamContext>(stream.get())); | |
26 // Check first to avoid memory leak in unittests. | |
27 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { | |
28 BrowserThread::PostTask( | |
29 BrowserThread::IO, FROM_HERE, | |
30 base::Bind(&StreamContext::InitializeOnIOThread, stream)); | |
31 } | |
32 } | |
33 | |
34 return UserDataAdapter<StreamContext>::Get(context, kStreamContextKeyName); | |
35 } | |
36 | |
37 void StreamContext::InitializeOnIOThread() { | |
38 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | |
39 registry_.reset(new StreamRegistry()); | |
40 } | |
41 | |
42 StreamContext::~StreamContext() {} | |
43 | |
44 void StreamContext::DeleteOnCorrectThread() const { | |
45 // In many tests, there isn't a valid IO thread. In that case, just delete on | |
46 // the current thread. | |
47 // TODO(zork): Remove this custom deleter, and fix the leaks in all the | |
48 // tests. | |
49 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO) && | |
50 !BrowserThread::CurrentlyOn(BrowserThread::IO)) { | |
51 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, this); | |
52 return; | |
53 } | |
54 delete this; | |
55 } | |
56 | |
57 } // namespace content | |
OLD | NEW |