blob: 8267dc4732f7f4fb1fef767b1ce9427ee1e23442 [file] [log] [blame]
// Copyright 2013 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_URL_MATCHER_URL_MATCHER_FACTORY_H_
#define COMPONENTS_URL_MATCHER_URL_MATCHER_FACTORY_H_
#include <memory>
#include <string>
#include "base/macros.h"
#include "components/url_matcher/url_matcher.h"
#include "components/url_matcher/url_matcher_export.h"
namespace base {
class DictionaryValue;
class Value;
}
namespace url_matcher {
class URL_MATCHER_EXPORT URLMatcherFactory {
public:
// Creates a URLMatcherConditionSet from a UrlFilter dictionary as defined in
// the declarative API. |url_fetcher_dict| contains the dictionary passed
// by the extension, |id| is the identifier assigned to the created
// URLMatcherConditionSet. In case of an error, |error| is set to contain
// an error message.
//
// Note: In case this function fails or if you don't register the
// URLMatcherConditionSet to the URLMatcher, you need to call
// URLMatcher::ClearUnusedConditionSets() on the URLMatcher that owns this
// URLMatcherFactory. Otherwise you leak memory.
static scoped_refptr<URLMatcherConditionSet> CreateFromURLFilterDictionary(
URLMatcherConditionFactory* url_matcher_condition_factory,
const base::DictionaryValue* url_filter_dict,
URLMatcherConditionSet::ID id,
std::string* error);
private:
// Returns whether a condition attribute with name |condition_attribute_name|
// needs to be handled by the URLMatcher.
static bool IsURLMatcherConditionAttribute(
const std::string& condition_attribute_name);
// Factory method of for URLMatcherConditions.
static URLMatcherCondition CreateURLMatcherCondition(
URLMatcherConditionFactory* url_matcher_condition_factory,
const std::string& condition_attribute_name,
const base::Value* value,
std::string* error);
static std::unique_ptr<URLMatcherSchemeFilter> CreateURLMatcherScheme(
const base::Value* value,
std::string* error);
static std::unique_ptr<URLMatcherPortFilter> CreateURLMatcherPorts(
const base::Value* value,
std::string* error);
DISALLOW_IMPLICIT_CONSTRUCTORS(URLMatcherFactory);
};
} // namespace url_matcher
#endif // COMPONENTS_URL_MATCHER_URL_MATCHER_FACTORY_H_