OLD | NEW |
---|---|
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 <algorithm> | 5 #include <algorithm> |
6 #include <string> | 6 #include <string> |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
(...skipping 24 matching lines...) Expand all Loading... | |
35 | 35 |
36 void OfflineContentAggregator::RegisterProvider( | 36 void OfflineContentAggregator::RegisterProvider( |
37 const std::string& name_space, | 37 const std::string& name_space, |
38 OfflineContentProvider* provider) { | 38 OfflineContentProvider* provider) { |
39 // Validate that this is the first OfflineContentProvider registered that is | 39 // Validate that this is the first OfflineContentProvider registered that is |
40 // associated with |name_space|. | 40 // associated with |name_space|. |
41 DCHECK(providers_.find(name_space) == providers_.end()); | 41 DCHECK(providers_.find(name_space) == providers_.end()); |
42 | 42 |
43 // Only set up the connection to the provider if the provider isn't associated | 43 // Only set up the connection to the provider if the provider isn't associated |
44 // with any other namespace. | 44 // with any other namespace. |
45 bool need_add_observer = false; | |
harkness
2017/04/20 12:25:16
dtrainor: This is ugly, but I threw it in there to
Peter Beverloo
2017/04/20 16:27:55
There's a race condition there. If the OCA would s
David Trainor- moved to gerrit
2017/04/25 03:24:42
It actually does queue them up and flush them once
| |
45 if (!MapContainsValue(providers_, provider)) | 46 if (!MapContainsValue(providers_, provider)) |
46 provider->AddObserver(this); | 47 need_add_observer = true; |
47 | 48 |
48 providers_[name_space] = provider; | 49 providers_[name_space] = provider; |
50 | |
51 if (need_add_observer) | |
52 provider->AddObserver(this); | |
49 } | 53 } |
50 | 54 |
51 void OfflineContentAggregator::UnregisterProvider( | 55 void OfflineContentAggregator::UnregisterProvider( |
52 const std::string& name_space) { | 56 const std::string& name_space) { |
53 auto provider_it = providers_.find(name_space); | 57 auto provider_it = providers_.find(name_space); |
54 | 58 |
55 OfflineContentProvider* provider = provider_it->second; | 59 OfflineContentProvider* provider = provider_it->second; |
56 providers_.erase(provider_it); | 60 providers_.erase(provider_it); |
57 | 61 |
58 // Only clean up the connection to the provider if the provider isn't | 62 // Only clean up the connection to the provider if the provider isn't |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
268 | 272 |
269 void OfflineContentAggregator::RunIfReady(OfflineContentProvider* provider, | 273 void OfflineContentAggregator::RunIfReady(OfflineContentProvider* provider, |
270 const base::Closure& action) { | 274 const base::Closure& action) { |
271 if (provider->AreItemsAvailable()) | 275 if (provider->AreItemsAvailable()) |
272 action.Run(); | 276 action.Run(); |
273 else | 277 else |
274 pending_actions_[provider].push_back(action); | 278 pending_actions_[provider].push_back(action); |
275 } | 279 } |
276 | 280 |
277 } // namespace offline_items_collection | 281 } // namespace offline_items_collection |
OLD | NEW |