blob: d08b548cf5fd4cef02d69066c41323bf9a0652ce [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_RULESET_PUBLISHER_IMPL_H_
#define COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_RULESET_PUBLISHER_IMPL_H_
#include <memory>
#include "base/callback.h"
#include "base/files/file.h"
#include "base/files/file_path.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/single_thread_task_runner.h"
#include "components/subresource_filter/content/browser/ruleset_publisher.h"
#include "components/subresource_filter/content/browser/ruleset_version.h"
#include "components/subresource_filter/content/browser/verified_ruleset_dealer.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
namespace subresource_filter {
class RulesetService;
// The implementation of RulesetPublisher. Owned by the underlying
// RulesetService. Its main responsibility is receiving new versions of
// subresource filtering rules from the RulesetService, and distributing them to
// renderer processes, where they will be memory-mapped as-needed by the
// UnverifiedRulesetDealer.
class RulesetPublisherImpl : public RulesetPublisher,
public content::NotificationObserver {
public:
RulesetPublisherImpl(
RulesetService* ruleset_service,
scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
~RulesetPublisherImpl() override;
// RulesetPublisher:
void TryOpenAndSetRulesetFile(
const base::FilePath& file_path,
int expected_checksum,
base::OnceCallback<void(base::File)> callback) override;
void PublishNewRulesetVersion(base::File ruleset_data) override;
scoped_refptr<base::SingleThreadTaskRunner> BestEffortTaskRunner() override;
VerifiedRulesetDealer::Handle* GetRulesetDealer() override;
void SetRulesetPublishedCallbackForTesting(
base::OnceClosure callback) override;
// Forwards calls to the underlying ruleset_service_.
void IndexAndStoreAndPublishRulesetIfNeeded(
const UnindexedRulesetInfo& unindex_ruleset_info);
private:
// content::NotificationObserver:
void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) override;
content::NotificationRegistrar notification_registrar_;
base::File ruleset_data_;
base::OnceClosure ruleset_published_callback_;
// The service owns the publisher, and therefore outlives it.
RulesetService* ruleset_service_;
std::unique_ptr<VerifiedRulesetDealer::Handle> ruleset_dealer_;
scoped_refptr<base::SingleThreadTaskRunner> best_effort_task_runner_;
DISALLOW_COPY_AND_ASSIGN(RulesetPublisherImpl);
};
} // namespace subresource_filter
#endif // COMPONENTS_SUBRESOURCE_FILTER_CONTENT_BROWSER_RULESET_SERVICE_H_