OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ | 5 #ifndef EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ |
6 #define EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ | 6 #define EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
11 #include "base/containers/hash_tables.h" | 11 #include "base/containers/hash_tables.h" |
12 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
14 #include "base/scoped_observer.h" | 14 #include "base/scoped_observer.h" |
15 #include "base/sequence_checker.h" | 15 #include "base/sequence_checker.h" |
16 #include "base/sequenced_task_runner.h" | 16 #include "base/sequenced_task_runner.h" |
17 #include "base/threading/non_thread_safe.h" | |
18 #include "base/threading/sequenced_worker_pool.h" | 17 #include "base/threading/sequenced_worker_pool.h" |
19 #include "components/keyed_service/core/keyed_service.h" | 18 #include "components/keyed_service/core/keyed_service.h" |
20 #include "content/public/browser/browser_thread.h" | 19 #include "content/public/browser/browser_thread.h" |
21 #include "extensions/browser/browser_context_keyed_api_factory.h" | 20 #include "extensions/browser/browser_context_keyed_api_factory.h" |
22 #include "extensions/browser/extension_registry.h" | 21 #include "extensions/browser/extension_registry.h" |
23 #include "extensions/browser/extension_registry_factory.h" | 22 #include "extensions/browser/extension_registry_factory.h" |
24 #include "extensions/browser/extension_registry_observer.h" | 23 #include "extensions/browser/extension_registry_observer.h" |
25 #include "extensions/browser/process_manager.h" | 24 #include "extensions/browser/process_manager.h" |
26 #include "extensions/browser/process_manager_factory.h" | 25 #include "extensions/browser/process_manager_factory.h" |
27 #include "extensions/browser/process_manager_observer.h" | 26 #include "extensions/browser/process_manager_observer.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 // g_factory = LAZY_INSTANCE_INITIALIZER; | 81 // g_factory = LAZY_INSTANCE_INITIALIZER; |
83 // | 82 // |
84 // | 83 // |
85 // template <> | 84 // template <> |
86 // BrowserContextKeyedAPIFactory<ApiResourceManager<Resource> >* | 85 // BrowserContextKeyedAPIFactory<ApiResourceManager<Resource> >* |
87 // ApiResourceManager<Resource>::GetFactoryInstance() { | 86 // ApiResourceManager<Resource>::GetFactoryInstance() { |
88 // return g_factory.Pointer(); | 87 // return g_factory.Pointer(); |
89 // } | 88 // } |
90 template <class T, typename ThreadingTraits = NamedThreadTraits<T>> | 89 template <class T, typename ThreadingTraits = NamedThreadTraits<T>> |
91 class ApiResourceManager : public BrowserContextKeyedAPI, | 90 class ApiResourceManager : public BrowserContextKeyedAPI, |
92 public base::NonThreadSafe, | |
93 public ExtensionRegistryObserver, | 91 public ExtensionRegistryObserver, |
94 public ProcessManagerObserver { | 92 public ProcessManagerObserver { |
95 public: | 93 public: |
96 explicit ApiResourceManager(content::BrowserContext* context) | 94 explicit ApiResourceManager(content::BrowserContext* context) |
97 : data_(new ApiResourceData()), | 95 : data_(new ApiResourceData()), |
98 extension_registry_observer_(this), | 96 extension_registry_observer_(this), |
99 process_manager_observer_(this) { | 97 process_manager_observer_(this) { |
100 extension_registry_observer_.Add(ExtensionRegistry::Get(context)); | 98 extension_registry_observer_.Add(ExtensionRegistry::Get(context)); |
101 process_manager_observer_.Add(ProcessManager::Get(context)); | 99 process_manager_observer_.Add(ProcessManager::Get(context)); |
102 } | 100 } |
103 | 101 |
104 virtual ~ApiResourceManager() { | 102 virtual ~ApiResourceManager() { |
105 DCHECK(CalledOnValidThread()); | 103 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
106 DCHECK(ThreadingTraits::IsMessageLoopValid()) | 104 DCHECK(ThreadingTraits::IsMessageLoopValid()) |
107 << "A unit test is using an ApiResourceManager but didn't provide " | 105 << "A unit test is using an ApiResourceManager but didn't provide " |
108 "the thread message loop needed for that kind of resource. " | 106 "the thread message loop needed for that kind of resource. " |
109 "Please ensure that the appropriate message loop is operational."; | 107 "Please ensure that the appropriate message loop is operational."; |
110 | 108 |
111 data_->InititateCleanup(); | 109 data_->InititateCleanup(); |
112 } | 110 } |
113 | 111 |
114 // TODO(lazyboy): Pass unique_ptr<T> instead of T*. | 112 // TODO(lazyboy): Pass unique_ptr<T> instead of T*. |
115 // Takes ownership. | 113 // Takes ownership. |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 base::SequenceChecker sequence_checker_; | 356 base::SequenceChecker sequence_checker_; |
359 }; | 357 }; |
360 | 358 |
361 content::NotificationRegistrar registrar_; | 359 content::NotificationRegistrar registrar_; |
362 scoped_refptr<ApiResourceData> data_; | 360 scoped_refptr<ApiResourceData> data_; |
363 | 361 |
364 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> | 362 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> |
365 extension_registry_observer_; | 363 extension_registry_observer_; |
366 ScopedObserver<ProcessManager, ProcessManagerObserver> | 364 ScopedObserver<ProcessManager, ProcessManagerObserver> |
367 process_manager_observer_; | 365 process_manager_observer_; |
| 366 |
| 367 SEQUENCE_CHECKER(sequence_checker_); |
368 }; | 368 }; |
369 | 369 |
370 template <class T> | 370 template <class T> |
371 struct BrowserContextFactoryDependencies<ApiResourceManager<T>> { | 371 struct BrowserContextFactoryDependencies<ApiResourceManager<T>> { |
372 static void DeclareFactoryDependencies( | 372 static void DeclareFactoryDependencies( |
373 BrowserContextKeyedAPIFactory<ApiResourceManager<T>>* factory) { | 373 BrowserContextKeyedAPIFactory<ApiResourceManager<T>>* factory) { |
374 factory->DependsOn( | 374 factory->DependsOn( |
375 ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); | 375 ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); |
376 factory->DependsOn(ExtensionRegistryFactory::GetInstance()); | 376 factory->DependsOn(ExtensionRegistryFactory::GetInstance()); |
377 factory->DependsOn(ProcessManagerFactory::GetInstance()); | 377 factory->DependsOn(ProcessManagerFactory::GetInstance()); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 ->GetSequencedTaskRunnerWithShutdownBehavior( | 433 ->GetSequencedTaskRunnerWithShutdownBehavior( |
434 content::BrowserThread::GetBlockingPool()->GetNamedSequenceToken( | 434 content::BrowserThread::GetBlockingPool()->GetNamedSequenceToken( |
435 T::kSequenceToken), | 435 T::kSequenceToken), |
436 T::kShutdownBehavior); | 436 T::kShutdownBehavior); |
437 } | 437 } |
438 }; | 438 }; |
439 | 439 |
440 } // namespace extensions | 440 } // namespace extensions |
441 | 441 |
442 #endif // EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ | 442 #endif // EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ |
OLD | NEW |