| Index: components/subresource_filter/content/browser/verified_ruleset_dealer.h
|
| diff --git a/components/subresource_filter/content/browser/verified_ruleset_dealer.h b/components/subresource_filter/content/browser/verified_ruleset_dealer.h
|
| index 187b7ed97a815a16dd13cccb3ef2ce19df255973..e3e248a64bd321f49e20cf072cab1b076854db60 100644
|
| --- a/components/subresource_filter/content/browser/verified_ruleset_dealer.h
|
| +++ b/components/subresource_filter/content/browser/verified_ruleset_dealer.h
|
| @@ -68,6 +68,10 @@ class VerifiedRulesetDealer::Handle {
|
| explicit Handle(scoped_refptr<base::SequencedTaskRunner> task_runner);
|
| ~Handle();
|
|
|
| + // Returns the |task_runner| on which the VerifiedRulesetDealer, as well as
|
| + // the MemoryMappedRulesets it creates, should be accessed.
|
| + base::SequencedTaskRunner* task_runner() { return task_runner_; }
|
| +
|
| // Invokes |callback| on |task_runner|, providing a pointer to the underlying
|
| // VerifiedRulesetDealer as an argument. The pointer is guaranteed to be valid
|
| // at least until the callback returns.
|
| @@ -81,7 +85,65 @@ class VerifiedRulesetDealer::Handle {
|
| // Note: Raw pointer, |dealer_| already holds a reference to |task_runner_|.
|
| base::SequencedTaskRunner* task_runner_;
|
| std::unique_ptr<VerifiedRulesetDealer, base::OnTaskRunnerDeleter> dealer_;
|
| + base::ThreadChecker thread_checker_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(Handle);
|
| +};
|
| +
|
| +// Holds a strong reference to MemoryMappedRuleset, and provides acceess to it.
|
| +//
|
| +// Initially holds an empty reference, allowing this object to be created on the
|
| +// UI-thread synchronously, hence letting the Handle to be created synchronously
|
| +// and be immediately used by clients on the UI-thread, while the
|
| +// MemoryMappedRuleset is retrieved on the |task_runner| in a deferred manner.
|
| +class VerifiedRuleset {
|
| + public:
|
| + class Handle;
|
| +
|
| + VerifiedRuleset();
|
| + ~VerifiedRuleset();
|
| +
|
| + // Can return nullptr even after initialization in case no ruleset is
|
| + // available, or if the ruleset is corrupted.
|
| + const MemoryMappedRuleset* Get() const {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + return ruleset_.get();
|
| + }
|
| +
|
| + private:
|
| + // Initializes |ruleset_| with the one provided by the ruleset |dealer|.
|
| + void Initialize(VerifiedRulesetDealer* dealer);
|
|
|
| + scoped_refptr<const MemoryMappedRuleset> ruleset_;
|
| + base::ThreadChecker thread_checker_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(VerifiedRuleset);
|
| +};
|
| +
|
| +// The UI-thread handle that owns a VerifiedRuleset living on a dedicated
|
| +// sequenced |task_runner|, same as the VerifiedRulesetDealer lives on. Provides
|
| +// asynchronous access to the instance, and destroys it asynchronously.
|
| +class VerifiedRuleset::Handle {
|
| + public:
|
| + // Creates a VerifiedRuleset and initializes it asynchronously on a
|
| + // |task_runner| using |dealer_handle|. The instance remains owned by this
|
| + // handle, but living and accessed on the |task_runner|.
|
| + explicit Handle(VerifiedRulesetDealer::Handle* dealer_handle);
|
| + ~Handle();
|
| +
|
| + // Returns the |task_runner| on which the VerifiedRuleset, as well as the
|
| + // MemoryMappedRuleset it holds a reference to, should be accessed.
|
| + base::SequencedTaskRunner* task_runner() { return task_runner_; }
|
| +
|
| + // Invokes |callback| on |task_runner|, providing a pointer to the underlying
|
| + // VerifiedRuleset as an argument. The pointer is guaranteed to be valid at
|
| + // least until the callback returns.
|
| + void GetRulesetAsync(base::Callback<void(VerifiedRuleset*)> callback);
|
| +
|
| + private:
|
| + // Note: Raw pointer, |ruleset_| already holds a reference to |task_runner_|.
|
| + base::SequencedTaskRunner* task_runner_;
|
| + std::unique_ptr<VerifiedRuleset, base::OnTaskRunnerDeleter> ruleset_;
|
| base::ThreadChecker thread_checker_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(Handle);
|
|
|