| 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 |