Chromium Code Reviews| Index: content/browser/payments/payment_app_context_impl.h |
| diff --git a/content/browser/payments/payment_app_context_impl.h b/content/browser/payments/payment_app_context_impl.h |
| index e3fd583411246f14e923d58e5ef95e23f0cd6b8e..78710e3f5099f63731ef6d4bd94e12119a5cba43 100644 |
| --- a/content/browser/payments/payment_app_context_impl.h |
| +++ b/content/browser/payments/payment_app_context_impl.h |
| @@ -16,29 +16,54 @@ |
| namespace content { |
| +class PaymentAppDatabase; |
| class PaymentAppManager; |
| class ServiceWorkerContextWrapper; |
| +// One instance of this exists per StoragePartition, and services multiple child |
| +// processes/origins. Most logic is delegated to the owned PaymentAppDatabase |
| +// instance, which is only accessed on the IO thread. |
| +// |
| +// This class is created/destructed by StoragePartitionImpl on UI thread. |
| +// However, the PaymentAppDatabase that this class has internally should work on |
| +// IO thread. So, this class has Init() and Shutdown() methods in addition to |
| +// constructor and destructor. They should be called explicitly when creating |
| +// and destroying StoragePartitionImpl. |
| +// |
| +// Expected order of lifetime calls: |
| +// 1) Constructor |
| +// 2) Init() |
| +// 3) Can call other public methods in this class at last. |
|
please use gerrit instead
2016/12/15 19:24:31
Any order is OK?
zino
2016/12/15 23:33:56
Yes, I also update the comment.
|
| +// - Can call CreatePaymentAppManager() on UI thread. |
| +// - Can call GetAllManifests() on UI thread. |
| +// - Can call ServiceHadConnectionError() on IO thread. |
| +// - Can call payment_app_database() on IO thread. |
| +// 4) Shutdown() |
| +// 5) Destructor |
| class CONTENT_EXPORT PaymentAppContextImpl |
| : public base::RefCountedThreadSafe<PaymentAppContextImpl>, |
| NON_EXPORTED_BASE(public PaymentAppContext) { |
| public: |
| - explicit PaymentAppContextImpl( |
| - scoped_refptr<ServiceWorkerContextWrapper> service_worker_context); |
| + PaymentAppContextImpl(); |
| + |
| + // Init and Shutdown are for use on the UI thread when the |
| + // StoragePartition is being setup and torn down. |
| + void Init(scoped_refptr<ServiceWorkerContextWrapper> service_worker_context); |
| // Shutdown must be called before deleting this. Call on the UI thread. |
| void Shutdown(); |
| // Create a PaymentAppManager that is owned by this. Call on the UI |
| // thread. |
| - void CreateService( |
| + void CreatePaymentAppManager( |
| mojo::InterfaceRequest<payments::mojom::PaymentAppManager> request); |
| // Called by PaymentAppManager objects so that they can |
| // be deleted. Call on the IO thread. |
| - void ServiceHadConnectionError(PaymentAppManager* service); |
| + void PaymentAppManagerHadConnectionError(PaymentAppManager* service); |
| - ServiceWorkerContextWrapper* service_worker_context() const; |
| + // Should be accessed only on the IO thread. |
| + PaymentAppDatabase* payment_app_database() const; |
| // PaymentAppContext implementation: |
| void GetAllManifests(const GetAllManifestsCallback& callback) override; |
| @@ -50,17 +75,26 @@ class CONTENT_EXPORT PaymentAppContextImpl |
| friend class base::RefCountedThreadSafe<PaymentAppContextImpl>; |
| ~PaymentAppContextImpl() override; |
| - void CreateServiceOnIOThread( |
| + void CreatePaymentAppDatabaseOnIO( |
| + scoped_refptr<ServiceWorkerContextWrapper> service_worker_context); |
| + |
| + void CreatePaymentAppManagerOnIO( |
| mojo::InterfaceRequest<payments::mojom::PaymentAppManager> request); |
| void ShutdownOnIO(); |
| + void DidShutdown(); |
| + |
| + // Only accessed on the IO thread. |
| + std::unique_ptr<PaymentAppDatabase> payment_app_database_; |
| - scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_; |
| + // The PaymentAppManagers are owned by this. They're either deleted during |
| + // ShutdownOnIO or when the channel is closed via |
| + // PaymentAppManagerHadConnectionError. Only accessed on the IO thread. |
| + std::map<PaymentAppManager*, std::unique_ptr<PaymentAppManager>> |
| + payment_app_managers_; |
| - // The services are owned by this. They're either deleted |
| - // during ShutdownOnIO or when the channel is closed via |
| - // ServiceHadConnectionError. Only accessed on the IO thread. |
| - std::map<PaymentAppManager*, std::unique_ptr<PaymentAppManager>> services_; |
| + // Only accessed on the UI thread. |
| + bool is_shutdown_; |
| DISALLOW_COPY_AND_ASSIGN(PaymentAppContextImpl); |
| }; |