OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/child/background_sync/background_sync_provider_thread_proxy.h" | 5 #include "content/child/background_sync/background_sync_provider_thread_proxy.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 private: | 55 private: |
56 scoped_ptr<blink::WebCallbacks<S, T>> callbacks_; | 56 scoped_ptr<blink::WebCallbacks<S, T>> callbacks_; |
57 int worker_thread_id_; | 57 int worker_thread_id_; |
58 }; | 58 }; |
59 | 59 |
60 LazyInstance<ThreadLocalPointer<BackgroundSyncProviderThreadProxy>>::Leaky | 60 LazyInstance<ThreadLocalPointer<BackgroundSyncProviderThreadProxy>>::Leaky |
61 g_sync_provider_tls = LAZY_INSTANCE_INITIALIZER; | 61 g_sync_provider_tls = LAZY_INSTANCE_INITIALIZER; |
62 | 62 |
63 } // anonymous namespace | 63 } // anonymous namespace |
64 | 64 |
| 65 // static |
65 BackgroundSyncProviderThreadProxy* | 66 BackgroundSyncProviderThreadProxy* |
66 BackgroundSyncProviderThreadProxy::GetThreadInstance( | 67 BackgroundSyncProviderThreadProxy::GetThreadInstance( |
67 base::SingleThreadTaskRunner* main_thread_task_runner, | 68 base::SingleThreadTaskRunner* main_thread_task_runner, |
68 BackgroundSyncProvider* sync_provider) { | 69 BackgroundSyncProvider* sync_provider) { |
69 if (g_sync_provider_tls.Pointer()->Get()) | 70 if (g_sync_provider_tls.Pointer()->Get()) |
70 return g_sync_provider_tls.Pointer()->Get(); | 71 return g_sync_provider_tls.Pointer()->Get(); |
71 | 72 |
| 73 if (!WorkerTaskRunner::Instance()->CurrentWorkerId()) { |
| 74 // This could happen if GetThreadInstance is called very late (say by a |
| 75 // garbage collected SyncRegistration). |
| 76 return nullptr; |
| 77 } |
| 78 |
72 BackgroundSyncProviderThreadProxy* instance = | 79 BackgroundSyncProviderThreadProxy* instance = |
73 new BackgroundSyncProviderThreadProxy(main_thread_task_runner, | 80 new BackgroundSyncProviderThreadProxy(main_thread_task_runner, |
74 sync_provider); | 81 sync_provider); |
75 DCHECK(WorkerTaskRunner::Instance()->CurrentWorkerId()); | |
76 WorkerTaskRunner::Instance()->AddStopObserver(instance); | 82 WorkerTaskRunner::Instance()->AddStopObserver(instance); |
77 return instance; | 83 return instance; |
78 } | 84 } |
79 | 85 |
80 void BackgroundSyncProviderThreadProxy::registerBackgroundSync( | 86 void BackgroundSyncProviderThreadProxy::registerBackgroundSync( |
81 const blink::WebSyncRegistration* options, | 87 const blink::WebSyncRegistration* options, |
82 blink::WebServiceWorkerRegistration* service_worker_registration, | 88 blink::WebServiceWorkerRegistration* service_worker_registration, |
83 blink::WebSyncRegistrationCallbacks* callbacks) { | 89 blink::WebSyncRegistrationCallbacks* callbacks) { |
84 DCHECK(options); | 90 DCHECK(options); |
85 DCHECK(service_worker_registration); | 91 DCHECK(service_worker_registration); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 : main_thread_task_runner_(main_thread_task_runner), | 186 : main_thread_task_runner_(main_thread_task_runner), |
181 sync_provider_(sync_provider) { | 187 sync_provider_(sync_provider) { |
182 g_sync_provider_tls.Pointer()->Set(this); | 188 g_sync_provider_tls.Pointer()->Set(this); |
183 } | 189 } |
184 | 190 |
185 BackgroundSyncProviderThreadProxy::~BackgroundSyncProviderThreadProxy() { | 191 BackgroundSyncProviderThreadProxy::~BackgroundSyncProviderThreadProxy() { |
186 g_sync_provider_tls.Pointer()->Set(nullptr); | 192 g_sync_provider_tls.Pointer()->Set(nullptr); |
187 } | 193 } |
188 | 194 |
189 } // namespace content | 195 } // namespace content |
OLD | NEW |