chrome.declarativeNetRequest _ API _ Chrome for Developers
chrome.declarativeNetRequest _ API _ Chrome for Developers
New in Chrome
Search / English Sign in
Filter
browsingData On this page
certi cateProvider
Home Docs Chrome Extensions Reference API Was this helpful? Description
commands
chrome.declarativeNetRequest
Permissions
Availability
contentSe ings
The chrome.declarativeNetRequest API is used to block or modify network requests by specifying declarative rules.
contextMenus Manifest
This lets extensions modify network requests without intercepting them and viewing their content, thus providing more
desktopCapture The " declarativeNetRequest " and " declarativeNetRequestWithHostAccess " permissions provide the same Enable and disable static rules and rulesets
capabilities. The di erences between them is when permissions are requested or granted.
devtools.inspectedWindow Build rules
"declarativeNetRequest"
devtools.network URL matching
Triggers a permission warning at install time but provides implicit access to allow , allowAllRequests and
devtools.panels URL lter syntax
block rules. Use this when possible to avoid needing to request full access to hosts.
devtools.recorder Enables debugging features for unpacked extensions, speci cally getMatchedRules() and Write good URL conditions
onRuleMatchedDebug .
dns Rule evaluation
"declarativeNetRequestWithHostAccess"
Availability
Chrome 84+
Manifest
In addition to the permissions described previously, certain types of rulesets, static rulesets speci cally, require
declaring the "declarative_net_request" manifest key, which should be a dictionary with a single key called
"rule_resources" . This key is an array containing dictionaries of type Ruleset , as shown in the following. (Note that
the name 'Ruleset' does not appear in the manifest's JSON since it is merely an array.) Static rulesets are explained later
in this document.
{
"name": "My extension",
...
"declarative_net_request" : {
"rule_resources" : [{
"id": "ruleset_1",
"enabled": true,
"path": "rules_1.json"
}, {
"id": "ruleset_2",
"enabled": false,
"path": "rules_2.json"
}]
},
"permissions": [
"declarativeNetRequest",
"declarativeNetRequestFeedback",
],
"host_permissions": [
"http://www.blogger.com/*",
"http://*.google.com/*"
],
...
}
To use this API, specify one or more rulesets. A ruleset contains an array of rules. A single rule does one of the following:
Prevent a request from ge ing blocked by negating any matching blocked rules.
Dynamic
Persist across browser sessions and extension upgrades and are managed using JavaScript while an extension is
in use.
Session
Cleared when the browser shuts down and when a new version of the extension is installed. Session rules are
managed using JavaScript while an extension is in use.
Static
Packaged, installed, and updated when an extension is installed or upgraded. Static rules are stored in JSON-
forma ed rule les and listed in the manifest le.
Dynamic and session rulesets are managed using JavaScript while an extension is in use.
Session rules are cleared when the browser shuts down and when a new version of the extension is installed.
There is only one each of these ruleset types. An extension can add or remove rules to them dynamically by calling
updateDynamicRules() and updateSessionRules() , provided the rule limits aren't exceeded. For information on
rule limits, see Rule limits. You can see an example of this under code examples.
Static rulesets
Unlike dynamic and session rules, static rules are packaged, installed, and updated when an extension is installed or
upgraded. They're stored in rule les in JSON format, which are indicated to the extension using the
"declarative_net_request" and "rule_resources" keys as described above, as well as one or more Ruleset
dictionaries. A Ruleset dictionary contains a path to the rule le, an ID for the ruleset contained in the le, and
whether the ruleset is enabled or disabled. The last two are important when you enable or disable a ruleset
programmatically.
{
...
"declarative_net_request" : {
"rule_resources" : [{
"id": "ruleset_1",
"enabled": true,
"path": "rules_1.json"
},
...
]
}
...
}
To test rule les, load your extension unpacked. Errors and warnings about invalid static rules are only displayed for
unpacked extensions. Invalid static rules in packed extensions are ignored.
Expedited review
Changes to static rulesets may be eligible for expedited review. See expedited review for eligible changes.
Both individual static rules and complete static rulesets may be enabled or disabled at runtime.
The set of enabled static rules and rulesets is persisted across browser sessions. Neither are persisted across extension
updates, meaning that only rules you chose to leave in your rule les are available a er an update.
For performance reasons there are also limits to the number of rules and rulesets that may be enabled at one time. Call
getAvailableStaticRuleCount() to check the number of additional rules that may be enabled. For information on
rule limits, see Rule limits.
To enable or disable static rules, call updateStaticRules() . This method takes an UpdateStaticRulesOptions
object, which contains arrays of IDs of rules to enable or disable. The IDs are de ned using the "id" key of the
Ruleset dictionary. There is a maximum limit of 5000 disabled static rules.
To enable or disable static rulesets, call updateEnabledRulesets() . This method takes an UpdateRulesetOptions
object, which contains arrays of IDs of rulesets to enable or disable. The IDs are de ned using the "id" key of the
Ruleset dictionary.
Build rules
Regardless of type, a rule starts with four elds as shown in the following. While the "id" and "priority" keys take a
number, the "action" and "condition" keys may provide several blocking and redirecting conditions. The following
rule blocks all script requests originating from "foo.com" to any URL with "abc" as a substring.
{
"id" : 1,
"priority": 1,
"action" : { "type" : "block" },
"condition" : {
"urlFilter" : "abc",
"initiatorDomains" : ["foo.com"],
"resourceTypes" : ["script"]
}
}
URL matching
Declarative Net Request provides the ability to match URLs with either a pa ern matching syntax or regular
expressions.
A rule's "condition" key allows a "urlFilter" key for acting on URLs under a speci ed domain. You create pa erns
using pa ern matching tokens. Here are a few examples.
Regular expressions
Conditions can also use regular expressions. See the "regexFilter" key. To learn about the limits that apply to these
conditions, see Rules that use regular expressions.
Take care when writing rules to always match an entire domain. Otherwise, your rule may match in situations that are
unexpected. For example, when using the pa ern matching syntax:
Consider using:
Similarly, use the ^ and / characters to anchor a regular expression. For example, ^https:\/\/www\.google\.com\/
matches any path on h ps://www.google.com.
Rule evaluation
DNR rules are applied by the browser across various stages of the network request lifecycle.
Before a request is made, an extension can block or redirect (including upgrading the scheme from HTTP to HTTPS) it
with a matching rule.
For each extension, the browser determines a list of matching rules. Rules with a modifyHeaders action are not
included here as they will be handled later. Additionally, rules with a responseHeaders condition will be considered
later (when response headers are available) and are not included.
Then, for each extension, Chrome picks at most one candidate per request. Chrome nds a matching rule, by ordering
all matching rules by priority. Rules with the same priority are ordered by action ( allow or allowAllRequests >
block > upgradeScheme > redirect ).
If the candidate is an allow or allowAllRequests rule, or the frame the request is being made in previously matched
an allowAllRequests rule of higher or equal priority from this extension, the request is "allowed" and the extension
won't have any e ect on the request.
If more than one extension wants to block or redirect this request, a single action to take is chosen. Chrome does this
by sorting the rules in the order block > redirect or upgradeScheme > allow or allowAllRequests . If two rules
are of the same type, Chrome chooses the rule from the most recently installed extension.
Caution: Browser vendors have agreed not to standardize the order in which rules with the same action and priority run. This can
change between runs or browser versions, even when spread between multiple types of ruleset (such as a static rule and a session
rule). When ordering is important, you should always explicitly specify a priority.
Before Chrome sends request headers to the server, the headers are updated based on matching modifyHeaders
rules.
Within a single extension, Chrome builds the list of modi cations to perform by nding all matching modifyHeaders
rules. Similar to before, only rules which have a higher priority than any matching allow or allowAllRequests rules
are included.
These rules are applied by Chrome in an order such that rules from a more recently installed extension are always
evaluated before rules from an older extension. Additionally, rules of a higher priority from one extension are always
applied before rules of a lower priority from the same extension. Notably, even across extensions:
If a rule appends to a header, then lower priority rules can only append to that header. Set and remove operations
are not allowed.
If a rule sets a header, then only lower priority rules from the same extension can append to that header. No other
modi cations are allowed.
If a rule removes a header, then lower priority rules cannot further modify the header.
Once the response headers have been received, Chrome evaluates rules with a responseHeaders condition.
A er sorting these rules by action and priority and excluding any rules made redundant by a matching allow or
allowAllRequests rule (this happens identically to the steps in "Before the request"), Chrome may block or redirect
the request on behalf of an extension.
Note that if a request made it to this stage, the request has already been sent to the server and the server has received
data like the request body. A block or redirect rule with a response headers condition will still run–but cannot actually
block or redirect the request.
In the case of a block rule, this is handled by the page which made the request receiving a blocked response and
Chrome terminating the request early. In the case of a redirect rule, Chrome makes a new request to the redirected
URL. Make sure to consider if these behaviors meet the privacy expectations for your extension.
If the request is not blocked or redirected, Chrome applies any modifyHeaders rules. Applying modi cations to
response headers works in the same way as described in "Before request headers are sent". Applying modi cations to
request headers does nothing, since the request has already been made.
Safe rules
Safe rules are de ned as rules with an action of block , allow , allowAllRequests or upgradeScheme . These rules
are subject to an increased dynamic rules quota.
Rule limits
There is a performance overhead to loading and evaluating rules in the browser, so some limits apply when using the
API. Limits depend on the type of rule you're using.
Static rules
Static rules are those speci ed in rule les declared in the manifest le. An extension can specify up to 100 static
rulesets as part of the "rule_resources" manifest key, but only 50 of these rulesets can be enabled at a time. The
la er is called the MAX_NUMBER_OF_ENABLED_STATIC_RULESETS . Collectively, those rulesets are guaranteed at least
30,000 rules. This is called the GUARANTEED_MINIMUM_STATIC_RULES .
Note: Prior to Chrome 120, extensions were limited to a total of 50 static rulesets, and only 10 of these could be enabled at the
same time. Use the minimum_chrome_version manifest eld to limit which Chrome versions can install your extension.
The number of rules available a er that depends on how many rules are enabled by all the extensions installed on a
user's browser. You can nd this number at runtime by calling getAvailableStaticRuleCount() . You can see an
example of this under code examples.
Note: Starting with Chrome 128, if a user disables an extension through chrome://extensions, the extension's static rules will no
longer count towards the global static rule limit. This potentially frees up static rule quota for other extensions, but also means that
when the extension gets re-enabled, it might have fewer static rules available than before.
Session rules
An extension can have up to 5000 session rules. This is exposed as the MAX_NUMBER_OF_SESSION_RULES .
Before Chrome 120, there was a limit of 5000 combined dynamic and session rules.
Dynamic rules
An extension can have at least 5000 dynamic rules. This is exposed as the MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES .
Starting in Chrome 121, there is a larger limit of 30,000 rules available for safe dynamic rules, exposed as the
MAX_NUMBER_OF_DYNAMIC_RULES . Any unsafe rules added within the limit of 5000 will also count towards this limit.
Before Chrome 120, there was a 5000 combined dynamic and session rules limit.
All types of rules can use regular expressions; however, the total number of regular expression rules of each type
cannot exceed 1000. This is called the MAX_NUMBER_OF_REGEX_RULES.
Additionally, each rule must be less than 2KB once compiled. This roughly correlates with the complexity of the rule. If
you try to load a rule that exceeds this limit, you will see a warning like the following and the rule will be ignored.
A declarativeNetRequest only applies to requests that reach the network stack. This includes responses from the HTTP
cache, but may not include responses that go through a service worker's onfetch handler. declarativeNetRequest
won't a ect responses generated by the service worker or retrieved from CacheStorage , but it will a ect calls to
fetch() made in a service worker.
A declarativeNetRequest rule cannot redirect from a public resource request to a resource that is not web accessible.
Doing so triggers an error. This is true even if the speci ed web accessible resource is owned by the redirecting
extension. To declare resources for declarativeNetRequest, use the manifest's "web_accessible_resources" array.
The append operation is only supported for the following headers: accept , accept-encoding , accept-language ,
access-control-request-headers , cache-control , connection , content-language , cookie , forwarded , if-
match , if-none-match , keep-alive , range , te , trailer , transfer-encoding , upgrade , user-agent , via ,
want-digest , x-forwarded-for .
Examples
Code examples
The following example shows how to call updateDynamicRules() . The procedure for updateSessionRules() is the
same.
The following example shows how to enable and disable rulesets while considering the number of available and the
maximum number of enabled static rulesets. You would do this when the number of static rules you need exceeds the
number allowed. For this to work, some of your rulesets should be installed with some of your rulesets disabled (se ing
"Enabled" to false within the manifest le).
Rule examples
The following examples illustrate how Chrome prioritizes rules in an extension. When reviewing them, you may want to
open the prioritization rules in a separate window.
To work out the priority of a particular URL, look at the (developer-de ned) "priority" key, the "action" key and
the "urlFilter" key. These examples refer to the example rule le shown below them.
Navigation to h ps://google.com
Two rules cover this URL: the rules with IDs 1 and 4. The rule with ID 1 applies because "block" actions have a
higher priority than "redirect" actions. The remaining rules don't apply because they are for longer URLs.
Navigation to h ps://google.com/1234
Because of the longer URL, the rule with ID 2 now matches in addition to the rules with IDs 1 and 4. The rule with ID
2 applies because "allow" has a higher priority than "block" and "redirect" .
Navigation to h ps://google.com/12345
All four rules match this URL. The rule with ID 3 applies because its developer-de ned priority is the highest of the
group.
[
{
"id": 1,
"priority": 1,
"action": { "type": "block" },
"condition": {"urlFilter": "||google.com/", "resourceTypes": ["main_frame"] }
},
{
"id": 2,
"priority": 1,
"action": { "type": "allow" },
"condition": { "urlFilter": "||google.com/123", "resourceTypes": ["main_frame"] }
},
{
"id": 3,
"priority": 2,
"action": { "type": "block" },
"condition": { "urlFilter": "||google.com/12345", "resourceTypes": ["main_frame"] }
},
{
"id": 4,
"priority": 1,
"action": { "type": "redirect", "redirect": { "url": "https://example.com" } },
"condition": { "urlFilter": "||google.com/", "resourceTypes": ["main_frame"] }
},
]
Redirects
The following example shows how to redirect a request from example.com to a page within the extension itself. The
extension path /a.jpg resolves to chrome-extension://EXTENSION_ID/a.jpg , where EXTENSION_ID is the ID of
your extension. For this to work the manifest should declare /a.jpg as a web accessible resource.
{
"id": 1,
"priority": 1,
"action": { "type": "redirect", "redirect": { "extensionPath": "/a.jpg" } },
"condition": {
"urlFilter": "||https://www.example.com/",
"resourceTypes": ["main_frame"]
}
}
The following uses the "transform" key to redirect to a subdomain of example.com. It uses a domain name anchor
("||") to intercept requests with any scheme from example.com. The "scheme" key in "transform" speci es that
redirects to the subdomain will always use "h ps".
{
"id": 1,
"priority": 1,
"action": {
"type": "redirect",
"redirect": {
"transform": { "scheme": "https", "host": "new.example.com" }
}
},
"condition": {
"urlFilter": "||example.com/",
"resourceTypes": ["main_frame"]
}
}
{
"id": 1,
"priority": 1,
"action": {
"type": "redirect",
"redirect": {
"regexSubstitution": "https://\\1.xyz.com/"
}
},
"condition": {
"regexFilter": "^https://www\\.(abc|def)\\.xyz\\.com/",
"resourceTypes": [
"main_frame"
]
}
}
Headers
The following example removes all cookies from both a main frame and any sub frames.
{
"id": 1,
"priority": 1,
"action": {
"type": "modifyHeaders",
"requestHeaders": [{ "header": "cookie", "operation": "remove" }]
},
"condition": { "resourceTypes": ["main_frame", "sub_frame"] }
}
Types
DomainType
This describes whether the request is rst or third party to the frame in which it originated. A request is said to be rst
party if it has the same domain (eTLD+1) as the frame in which the request originated.
ENUM
" rstParty"
The network request is rst party to the frame in which it originated.
"thirdParty"
The network request is third party to the frame in which it originated.
ExtensionActionOptions
Chrome 88+
PROPERTIES
displayActionCountAsBadgeText
boolean optional
Whether to automatically display the action count for a page as the extension's badge text. This preference is persisted
across sessions.
tabUpdate
TabActionCountUpdate optional
Chrome 89+
GetDisabledRuleIdsOptions
Chrome 111+
PROPERTIES
rulesetId
string
GetRulesFilter
Chrome 111+
PROPERTIES
ruleIds
number[] optional
HeaderInfo
Chrome 128+
PROPERTIES
excludedValues
string[] optional
If speci ed, this condition is not matched if the header exists but its value contains at least one element in this list. This
uses the same match pa ern syntax as values .
header
string
The name of the header. This condition matches on the name only if both values and excludedValues are not
speci ed.
values
string[] optional
If speci ed, this condition matches if the header's value matches at least one pa ern in this list. This supports case-
insensitive header value matching plus the following constructs:
'*' and '?' can be escaped with a backslash, e.g. '\*' and '\?'
HeaderOperation
Chrome 86+
ENUM
"append"
Adds a new entry for the speci ed header. This operation is not supported for request headers.
"set"
Sets a new value for the speci ed header, removing any existing headers with the same name.
"remove"
Removes all entries for the speci ed header.
IsRegexSupportedResult
Chrome 87+
PROPERTIES
isSupported
boolean
reason
UnsupportedRegexReason optional
Speci es the reason why the regular expression is not supported. Only provided if isSupported is false.
MatchedRule
PROPERTIES
ruleId
number
rulesetId
string
ID of the Ruleset this rule belongs to. For a rule originating from the set of dynamic rules, this will be equal to
DYNAMIC_RULESET_ID .
MatchedRuleInfo
PROPERTIES
rule
MatchedRule
tabId
number
The tabId of the tab from which the request originated if the tab is still active. Else -1.
timeStamp
number
The time the rule was matched. Timestamps will correspond to the Javascript convention for times, i.e. number of
milliseconds since the epoch.
MatchedRuleInfoDebug
PROPERTIES
request
RequestDetails
Details about the request for which the rule was matched.
rule
MatchedRule
MatchedRulesFilter
PROPERTIES
minTimeStamp
number optional
tabId
number optional
If speci ed, only matches rules for the given tab. Matches rules not associated with any active tab if set to -1.
ModifyHeaderInfo
Chrome 86+
PROPERTIES
header
string
operation
HeaderOperation
value
string optional
The new value for the header. Must be speci ed for append and set operations.
QueryKeyValue
PROPERTIES
key
string
replaceOnly
boolean optional
Chrome 94+
If true, the query key is replaced only if it's already present. Otherwise, the key is also added if it's missing. Defaults to
false.
value
string
QueryTransform
PROPERTIES
addOrReplaceParams
QueryKeyValue[] optional
removeParams
string[] optional
Redirect
PROPERTIES
extensionPath
string optional
regexSubstitution
string optional
Substitution pa ern for rules which specify a regexFilter . The rst match of regexFilter within the url will be
replaced with this pa ern. Within regexSubstitution , backslash-escaped digits (\1 to \9) can be used to insert the
corresponding capture groups. \0 refers to the entire matching text.
transform
URLTransform optional
url
string optional
RegexOptions
Chrome 87+
PROPERTIES
isCaseSensitive
boolean optional
regex
string
requireCapturing
boolean optional
Whether the regex speci ed requires capturing. Capturing is only required for redirect rules which specify a
regexSubstition action. The default is false.
RequestDetails
PROPERTIES
documentId
string optional
Chrome 106+
The unique identi er for the frame's document, if this request is for a frame.
documentLifecycle
DocumentLifecycle optional
Chrome 106+
frameId
number
The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in
which the request happens. If the document of a (sub-)frame is loaded ( type is main_frame or sub_frame ),
frameId indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab.
frameType
FrameType optional
Chrome 106+
initiator
string optional
The origin where the request was initiated. This does not change through redirects. If this is an opaque origin, the string
'null' will be used.
method
string
parentDocumentId
string optional
Chrome 106+
The unique identi er for the frame's parent document, if this request is for a frame and has a parent.
parentFrameId
number
ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists.
requestId
string
The ID of the request. Request IDs are unique within a browser session.
tabId
number
The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab.
type
ResourceType
url
string
RequestMethod
Chrome 91+
ENUM
"connect"
"delete"
"get"
"head"
"options"
"patch"
"post"
"put"
"other"
ResourceType
ENUM
"main_frame"
"sub_frame"
"stylesheet"
"script"
"image"
"font"
"object"
"xmlh prequest"
"ping"
"csp_report"
"media"
"websocket"
"webtransport"
"webbundle"
"other"
Rule
PROPERTIES
action
RuleAction
condition
RuleCondition
id
number
priority
number optional
RuleAction
PROPERTIES
redirect
Redirect optional
Describes how the redirect should be performed. Only valid for redirect rules.
requestHeaders
ModifyHeaderInfo[] optional
Chrome 86+
The request headers to modify for the request. Only valid if RuleActionType is "modifyHeaders".
responseHeaders
ModifyHeaderInfo[] optional
Chrome 86+
The response headers to modify for the request. Only valid if RuleActionType is "modifyHeaders".
type
RuleActionType
RuleActionType
ENUM
"block"
Block the network request.
"redirect"
Redirect the network request.
"allow"
Allow the network request. The request won't be intercepted if there is an allow rule which matches it.
"upgradeScheme"
Upgrade the network request url's scheme to h ps if the request is h p or p.
"modifyHeaders"
Modify request/response headers from the network request.
"allowAllRequests"
Allow all requests within a frame hierarchy, including the frame request itself.
RuleCondition
PROPERTIES
domainType
DomainType optional
Speci es whether the network request is rst-party or third-party to the domain from which it originated. If omi ed, all
requests are accepted.
domains
string[] optional
The rule will only match network requests originating from the list of domains .
excludedDomains
string[] optional
The rule will not match network requests originating from the list of excludedDomains .
excludedInitiatorDomains
string[] optional
Chrome 101+
The rule will not match network requests originating from the list of excludedInitiatorDomains . If the list is empty or
omi ed, no domains are excluded. This takes precedence over initiatorDomains .
Notes:
This matches against the request initiator and not the request url.
excludedRequestDomains
string[] optional
Chrome 101+
The rule will not match network requests when the domains matches one from the list of excludedRequestDomains . If
the list is empty or omi ed, no domains are excluded. This takes precedence over requestDomains .
Notes:
excludedRequestMethods
RequestMethod[] optional
Chrome 91+
List of request methods which the rule won't match. Only one of requestMethods and excludedRequestMethods
should be speci ed. If neither of them is speci ed, all request methods are matched.
excludedResourceTypes
ResourceType[] optional
List of resource types which the rule won't match. Only one of resourceTypes and excludedResourceTypes should
be speci ed. If neither of them is speci ed, all resource types except "main_frame" are blocked.
excludedResponseHeaders
HeaderInfo[] optional
Chrome 128+
Rule does not match if the request matches any response header condition in this list (if speci ed). If both
excludedResponseHeaders and responseHeaders are speci ed, then the excludedResponseHeaders property
takes precedence.
excludedTabIds
number[] optional
Chrome 92+
List of tabs.Tab.id which the rule should not match. An ID of tabs.TAB_ID_NONE excludes requests which don't
originate from a tab. Only supported for session-scoped rules.
initiatorDomains
string[] optional
Chrome 101+
The rule will only match network requests originating from the list of initiatorDomains . If the list is omi ed, the rule is
applied to requests from all domains. An empty list is not allowed.
Notes:
This matches against the request initiator and not the request url.
isUrlFilterCaseSensitive
boolean optional
Whether the urlFilter or regexFilter (whichever is speci ed) is case sensitive. Default is false.
regexFilter
string optional
Regular expression to match against the network request url. This follows the RE2 syntax.
Note: The regexFilter must be composed of only ASCII characters. This is matched against a url where the host is
encoded in the punycode format (in case of internationalized domains) and any other non-ascii characters are url
encoded in u -8.
requestDomains
string[] optional
Chrome 101+
The rule will only match network requests when the domain matches one from the list of requestDomains . If the list is
omi ed, the rule is applied to requests from all domains. An empty list is not allowed.
Notes:
requestMethods
RequestMethod[] optional
Chrome 91+
List of HTTP request methods which the rule can match. An empty list is not allowed.
Note: Specifying a requestMethods rule condition will also exclude non-HTTP(s) requests, whereas specifying
excludedRequestMethods will not.
resourceTypes
ResourceType[] optional
List of resource types which the rule can match. An empty list is not allowed.
Note: this must be speci ed for allowAllRequests rules and may only include the sub_frame and main_frame
resource types.
responseHeaders
HeaderInfo[] optional
Chrome 128+
Rule matches if the request matches any response header condition in this list (if speci ed).
tabIds
number[] optional
Chrome 92+
List of tabs.Tab.id which the rule should match. An ID of tabs.TAB_ID_NONE matches requests which don't
originate from a tab. An empty list is not allowed. Only supported for session-scoped rules.
urlFilter
string optional
The pa ern which is matched against the network request url. Supported constructs:
'|' : Le /right anchor: If used at either end of the pa ern, speci es the beginning/end of the url respectively.
'||' : Domain name anchor: If used at the beginning of the pa ern, speci es the start of a (sub-)domain of the URL.
'^' : Separator character: This matches anything except a le er, a digit, or one of the following: _ , - , . , or % . This also
match the end of the URL.
Therefore urlFilter is composed of the following parts: (optional Le /Domain name anchor) + pa ern + (optional
Right anchor).
If omi ed, all urls are matched. An empty string is not allowed.
Note: The urlFilter must be composed of only ASCII characters. This is matched against a url where the host is
encoded in the punycode format (in case of internationalized domains) and any other non-ascii characters are url
encoded in u -8. For example, when the request url is h p://abc.рф?q=ф, the urlFilter will be matched against the
url h p://abc.xn--p1ai/?q=%D1%84.
Ruleset
PROPERTIES
enabled
boolean
id
string
A non-empty string uniquely identifying the ruleset. IDs beginning with '_' are reserved for internal use.
path
string
RulesMatchedDetails
PROPERTIES
rulesMatchedInfo
MatchedRuleInfo[]
TabActionCountUpdate
Chrome 89+
PROPERTIES
increment
number
The amount to increment the tab's action count by. Negative values will decrement the count.
tabId
number
TestMatchOutcomeResult
Chrome 103+
PROPERTIES
matchedRules
MatchedRule[]
TestMatchRequestDetails
Chrome 103+
PROPERTIES
initiator
string optional
method
RequestMethod optional
Standard HTTP method of the hypothetical request. Defaults to "get" for HTTP requests and is ignored for non-HTTP
requests.
responseHeaders
object optional
Chrome 129+
The headers provided by a hypothetical response if the request does not get blocked or redirected before it is sent.
Represented as an object which maps a header name to a list of string values. If not speci ed, the hypothetical
response would return empty response headers, which can match rules which match on the non-existence of headers.
E.g. {"content-type": ["text/html; charset=utf-8", "multipart/form-data"]}
tabId
number optional
The ID of the tab in which the hypothetical request takes place. Does not need to correspond to a real tab ID. Default is
-1, meaning that the request isn't related to a tab.
type
ResourceType
url
string
UnsupportedRegexReason
Chrome 87+
ENUM
"syntaxError"
The regular expression is syntactically incorrect, or uses features not available in the RE2 syntax.
"memoryLimitExceeded"
The regular expression exceeds the memory limit.
UpdateRuleOptions
Chrome 87+
PROPERTIES
addRules
Rule[] optional
Rules to add.
removeRuleIds
number[] optional
UpdateRulesetOptions
Chrome 87+
PROPERTIES
disableRulesetIds
string[] optional
enableRulesetIds
string[] optional
UpdateStaticRulesOptions
Chrome 111+
PROPERTIES
disableRuleIds
number[] optional
enableRuleIds
number[] optional
rulesetId
string
URLTransform
PROPERTIES
fragment
string optional
The new fragment for the request. Should be either empty, in which case the existing fragment is cleared; or should
begin with '#'.
host
string optional
password
string optional
path
string optional
The new path for the request. If empty, the existing path is cleared.
port
string optional
The new port for the request. If empty, the existing port is cleared.
query
string optional
The new query for the request. Should be either empty, in which case the existing query is cleared; or should begin with
'?'.
queryTransform
QueryTransform optional
scheme
string optional
The new scheme for the request. Allowed values are "h p", "h ps", " p" and "chrome-extension".
username
string optional
Properties
DYNAMIC_RULESET_ID
VALUE
"_dynamic"
GETMATCHEDRULES_QUOTA_INTERVAL
VALUE
10
GUARANTEED_MINIMUM_STATIC_RULES
Chrome 89+
The minimum number of static rules guaranteed to an extension across its enabled static rulesets. Any rules above this
limit will count towards the global static rule limit.
VALUE
30000
MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL
VALUE
20
MAX_NUMBER_OF_DYNAMIC_RULES
VALUE
30000
MAX_NUMBER_OF_ENABLED_STATIC_RULESETS
Chrome 94+
The maximum number of static Rulesets an extension can enable at any one time.
VALUE
50
MAX_NUMBER_OF_REGEX_RULES
The maximum number of regular expression rules that an extension can add. This limit is evaluated separately for the
set of dynamic rules and those speci ed in the rule resources le.
VALUE
1000
MAX_NUMBER_OF_SESSION_RULES
Chrome 120+
The maximum number of session scoped rules that an extension can add.
VALUE
5000
MAX_NUMBER_OF_STATIC_RULESETS
The maximum number of static Rulesets an extension can specify as part of the "rule_resources" manifest key.
VALUE
100
MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES
Chrome 120+
The maximum number of "unsafe" dynamic rules that an extension can add.
VALUE
5000
MAX_NUMBER_OF_UNSAFE_SESSION_RULES
Chrome 120+
The maximum number of "unsafe" session scoped rules that an extension can add.
VALUE
5000
SESSION_RULESET_ID
Chrome 90+
VALUE
"_session"
Methods
getAvailableStaticRuleCount()
chrome.declarativeNetRequest.getAvailableStaticRuleCount(
callback?: function,
)
Returns the number of static rules an extension can enable before the global static rule limit is reached.
PARAMETERS
callback
function optional
count
number
RETURNS
Promise<number>
Chrome 91+
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
getDisabledRuleIds()
chrome.declarativeNetRequest.getDisabledRuleIds(
options: GetDisabledRuleIdsOptions,
callback?: function,
)
Returns the list of static rules in the given Ruleset that are currently disabled.
PARAMETERS
options
GetDisabledRuleIdsOptions
callback
function optional
disabledRuleIds
number[]
RETURNS
Promise<number[]>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
getDynamicRules()
Promise
chrome.declarativeNetRequest.getDynamicRules(
filter?: GetRulesFilter,
callback?: function,
)
Returns the current set of dynamic rules for the extension. Callers can optionally lter the list of fetched rules by
specifying a filter .
PARAMETERS
lter
GetRulesFilter optional
Chrome 111+
callback
function optional
rules
Rule[]
RETURNS
Promise<Rule[]>
Chrome 91+
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
getEnabledRulesets()
Promise
chrome.declarativeNetRequest.getEnabledRulesets(
callback?: function,
)
Returns the ids for the current set of enabled static rulesets.
PARAMETERS
callback
function optional
rulesetIds
string[]
RETURNS
Promise<string[]>
Chrome 91+
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
getMatchedRules()
Promise
chrome.declarativeNetRequest.getMatchedRules(
filter?: MatchedRulesFilter,
callback?: function,
)
Returns all rules matched for the extension. Callers can optionally lter the list of matched rules by specifying a
filter . This method is only available to extensions with the "declarativeNetRequestFeedback" permission or
having the "activeTab" permission granted for the tabId speci ed in filter . Note: Rules not associated with an
active document that were matched more than ve minutes ago will not be returned.
PARAMETERS
lter
MatchedRulesFilter optional
callback
function optional
details
RulesMatchedDetails
RETURNS
Promise<RulesMatchedDetails>
Chrome 91+
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
getSessionRules()
chrome.declarativeNetRequest.getSessionRules(
filter?: GetRulesFilter,
callback?: function,
)
Returns the current set of session scoped rules for the extension. Callers can optionally lter the list of fetched rules by
specifying a filter .
PARAMETERS
lter
GetRulesFilter optional
Chrome 111+
callback
function optional
rules
Rule[]
RETURNS
Promise<Rule[]>
Chrome 91+
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
isRegexSupported()
chrome.declarativeNetRequest.isRegexSupported(
regexOptions: RegexOptions,
callback?: function,
)
Checks if the given regular expression will be supported as a regexFilter rule condition.
PARAMETERS
regexOptions
RegexOptions
callback
function optional
result
IsRegexSupportedResult
RETURNS
Promise<IsRegexSupportedResult>
Chrome 91+
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
setExtensionActionOptions()
chrome.declarativeNetRequest.setExtensionActionOptions(
options: ExtensionActionOptions,
callback?: function,
)
Con gures if the action count for tabs should be displayed as the extension action's badge text and provides a way for
that action count to be incremented.
PARAMETERS
options
ExtensionActionOptions
callback
function optional
Chrome 89+
() => void
RETURNS
Promise<void>
Chrome 91+
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
testMatchOutcome()
chrome.declarativeNetRequest.testMatchOutcome(
request: TestMatchRequestDetails,
callback?: function,
)
Checks if any of the extension's declarativeNetRequest rules would match a hypothetical request. Note: Only available
for unpacked extensions as this is only intended to be used during extension development.
PARAMETERS
request
TestMatchRequestDetails
callback
function optional
result
TestMatchOutcomeResult
RETURNS
Promise<TestMatchOutcomeResult>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
updateDynamicRules()
Promise
chrome.declarativeNetRequest.updateDynamicRules(
options: UpdateRuleOptions,
callback?: function,
)
Modi es the current set of dynamic rules for the extension. The rules with IDs listed in options.removeRuleIds are
rst removed, and then the rules given in options.addRules are added. Notes:
This update happens as a single atomic operation: either all speci ed rules are added and removed, or an error is
returned.
These rules are persisted across browser sessions and across extension updates.
Static rules speci ed as part of the extension package can not be removed using this function.
MAX_NUMBER_OF_DYNAMIC_RULES is the maximum number of dynamic rules an extension can add. The number of
unsafe rules must not exceed MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES .
PARAMETERS
options
UpdateRuleOptions
Chrome 87+
callback
function optional
() => void
RETURNS
Promise<void>
Chrome 91+
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
updateEnabledRulesets()
Promise
chrome.declarativeNetRequest.updateEnabledRulesets(
options: UpdateRulesetOptions,
callback?: function,
)
Updates the set of enabled static rulesets for the extension. The rulesets with IDs listed in
options.disableRulesetIds are rst removed, and then the rulesets listed in options.enableRulesetIds are
added. Note that the set of enabled static rulesets is persisted across sessions but not across extension updates, i.e.
the rule_resources manifest key will determine the set of enabled static rulesets on each extension update.
PARAMETERS
options
UpdateRulesetOptions
Chrome 87+
callback
function optional
() => void
RETURNS
Promise<void>
Chrome 91+
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
updateSessionRules()
chrome.declarativeNetRequest.updateSessionRules(
options: UpdateRuleOptions,
callback?: function,
)
Modi es the current set of session scoped rules for the extension. The rules with IDs listed in options.removeRuleIds
are rst removed, and then the rules given in options.addRules are added. Notes:
This update happens as a single atomic operation: either all speci ed rules are added and removed, or an error is
returned.
These rules are not persisted across sessions and are backed in memory.
PARAMETERS
options
UpdateRuleOptions
callback
function optional
() => void
RETURNS
Promise<void>
Chrome 91+
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
updateStaticRules()
chrome.declarativeNetRequest.updateStaticRules(
options: UpdateStaticRulesOptions,
callback?: function,
)
Disables and enables individual static rules in a Ruleset . Changes to rules belonging to a disabled Ruleset will take
e ect the next time that it becomes enabled.
PARAMETERS
options
UpdateStaticRulesOptions
callback
function optional
() => void
RETURNS
Promise<void>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use
both on the same function call. The promise resolves with the same type that is passed to the callback.
Events
onRuleMatchedDebug
chrome.declarativeNetRequest.onRuleMatchedDebug.addListener(
callback: function,
)
Fired when a rule is matched with a request. Only available for unpacked extensions with the
"declarativeNetRequestFeedback" permission as this is intended to be used for debugging purposes only.
PARAMETERS
callback
function
info
MatchedRuleInfoDebug
Except as otherwise noted, the content of this page is licensed under the Creative Commons A ribution 4.0 License, and code samples are licensed under the
Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its a liates.