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