| Index: extensions/browser/api/declarative_net_request/ruleset_manager.h
 | 
| diff --git a/extensions/browser/api/declarative_net_request/ruleset_manager.h b/extensions/browser/api/declarative_net_request/ruleset_manager.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..625c9ac7f13290d42b0a90f569fec42a629164db
 | 
| --- /dev/null
 | 
| +++ b/extensions/browser/api/declarative_net_request/ruleset_manager.h
 | 
| @@ -0,0 +1,68 @@
 | 
| +// Copyright 2017 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 EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_RULESET_MANAGER_H_
 | 
| +#define EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_RULESET_MANAGER_H_
 | 
| +
 | 
| +#include <map>
 | 
| +#include <memory>
 | 
| +#include <string>
 | 
| +#include <vector>
 | 
| +
 | 
| +#include <base/macros.h>
 | 
| +#include "base/files/memory_mapped_file.h"
 | 
| +#include "base/time/time.h"
 | 
| +#include "extensions/browser/api/declarative_net_request/matcher_util.h"
 | 
| +#include "extensions/common/extension_id.h"
 | 
| +
 | 
| +namespace base {
 | 
| +class Time;
 | 
| +}
 | 
| +
 | 
| +namespace extensions {
 | 
| +class InfoMap;
 | 
| +
 | 
| +namespace declarative_net_request {
 | 
| +class ExtensionIndexedRulesetMatcher;
 | 
| +
 | 
| +// Owned by InfoMap. Like InfoMap, it can be created/destroyed on any thread,
 | 
| +// but all the other methods must be called on the IO thread. Also, since it's
 | 
| +// owned by InfoMap, it's implicitly associated with a BrowserContext.
 | 
| +class RulesetManager {
 | 
| + public:
 | 
| +  struct ExtensionKey {
 | 
| +    ExtensionKey(ExtensionId, base::Time);
 | 
| +    ~ExtensionKey();
 | 
| +    const ExtensionId id;
 | 
| +    const base::Time install_time;
 | 
| +  };
 | 
| +
 | 
| +  struct ExtensionKeyComparator {
 | 
| +    bool operator()(const ExtensionKey& lhs, const ExtensionKey& rhs) const;
 | 
| +  };
 | 
| +
 | 
| +  using RulesMap = std::map<ExtensionKey,
 | 
| +                            std::unique_ptr<ExtensionIndexedRulesetMatcher>,
 | 
| +                            ExtensionKeyComparator>;
 | 
| +
 | 
| +  RulesetManager(InfoMap* info_map);
 | 
| +  ~RulesetManager();
 | 
| +  void AddRuleset(
 | 
| +      ExtensionId extension_id,
 | 
| +      std::unique_ptr<ExtensionIndexedRulesetMatcher> ruleset_matcher);
 | 
| +  void RemoveRuleset(ExtensionId extension_id);
 | 
| +
 | 
| +  const RulesMap* rules_map() const { return &rules_; }
 | 
| +
 | 
| + private:
 | 
| +  InfoMap* info_map_;  // Weak. Owns us.
 | 
| +  RulesMap rules_;
 | 
| +
 | 
| +  DISALLOW_COPY_AND_ASSIGN(RulesetManager);
 | 
| +};
 | 
| +
 | 
| +}  // namespace declarative_net_request
 | 
| +}  // namespace extensions
 | 
| +
 | 
| +#endif  // EXTENSIONS_BROWSER_API_DECLARATIVE_NET_REQUEST_RULESET_MANAGER_H_
 | 
| 
 |