1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880
|
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The <code>chrome.declarativeNetRequest</code> API is used to block or modify
// network requests by specifying declarative rules. This lets extensions
// modify network requests without intercepting them and viewing their content,
// thus providing more privacy.
[generate_error_messages]
namespace declarativeNetRequest {
// This describes the resource type of the network request.
enum ResourceType {
main_frame,
sub_frame,
stylesheet,
script,
image,
font,
object,
xmlhttprequest,
ping,
csp_report,
media,
websocket,
webtransport,
webbundle,
other
};
// This describes the HTTP request method of a network request.
enum RequestMethod {
connect,
delete,
get,
head,
options,
patch,
post,
put,
other
};
// This describes whether the request is first or third party to the frame in
// which it originated. A request is said to be first party if it has the same
// domain (eTLD+1) as the frame in which the request originated.
enum DomainType {
// The network request is first party to the frame in which it originated.
firstParty,
// The network request is third party to the frame in which it originated.
thirdParty
};
// This describes the possible operations for a "modifyHeaders" rule.
enum HeaderOperation {
// Adds a new entry for the specified header. This operation is not
// supported for request headers.
append,
// Sets a new value for the specified header, removing any existing headers
// with the same name.
set,
// Removes all entries for the specified header.
remove
};
// Describes the kind of action to take if a given RuleCondition matches.
enum RuleActionType {
// Block the network request.
block,
// Redirect the network request.
redirect,
// Allow the network request. The request won't be intercepted if there is
// an allow rule which matches it.
allow,
// Upgrade the network request url's scheme to https if the request is http
// or ftp.
upgradeScheme,
// Modify request/response headers from the network request.
modifyHeaders,
// Allow all requests within a frame hierarchy, including the frame request
// itself.
allowAllRequests
};
// Describes the reason why a given regular expression isn't supported.
enum UnsupportedRegexReason {
// The regular expression is syntactically incorrect, or uses features
// not available in the
// <a href = "https://github.com/google/re2/wiki/Syntax">RE2 syntax</a>.
syntaxError,
// The regular expression exceeds the memory limit.
memoryLimitExceeded
};
// Describes a single static ruleset.
dictionary Ruleset {
// A non-empty string uniquely identifying the ruleset. IDs beginning with
// '_' are reserved for internal use.
DOMString id;
// The path of the JSON ruleset relative to the extension directory.
DOMString path;
// Whether the ruleset is enabled by default.
boolean enabled;
};
// Represents a query key-value pair.
dictionary QueryKeyValue {
DOMString key;
DOMString value;
// 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.
boolean? replaceOnly;
};
// Describes modification to the url query.
dictionary QueryTransform {
// The list of query keys to be removed.
DOMString[]? removeParams;
// The list of query key-value pairs to be added or replaced.
QueryKeyValue[]? addOrReplaceParams;
};
// Describes modification to various url components.
dictionary URLTransform {
// The new scheme for the request. Allowed values are "http", "https",
// "ftp" and "chrome-extension".
DOMString? scheme;
// The new host for the request.
DOMString? host;
// The new port for the request. If empty, the existing port is cleared.
DOMString? port;
// The new path for the request. If empty, the existing path is cleared.
DOMString? path;
// The new query for the request. Should be either empty, in which case the
// existing query is cleared; or should begin with '?'.
DOMString? query;
// Add, remove or replace query key-value pairs.
QueryTransform? queryTransform;
// The new fragment for the request. Should be either empty, in which case
// the existing fragment is cleared; or should begin with '#'.
DOMString? fragment;
// The new username for the request.
DOMString? username;
// The new password for the request.
DOMString? password;
};
dictionary Redirect {
// Path relative to the extension directory. Should start with '/'.
DOMString? extensionPath;
// Url transformations to perform.
URLTransform? transform;
// The redirect url. Redirects to JavaScript urls are not allowed.
DOMString? url;
// Substitution pattern for rules which specify a <code>regexFilter</code>.
// The first match of <code>regexFilter</code> within the url will be
// replaced with this pattern. Within <code>regexSubstitution</code>,
// backslash-escaped digits (\1 to \9) can be used to insert the
// corresponding capture groups. \0 refers to the entire matching text.
DOMString? regexSubstitution;
};
dictionary HeaderInfo {
// The name of the header. This condition matches on the name
// only if both `values` and `excludedValues` are not specified.
DOMString header;
// If specified, this condition matches if the header's value matches at
// least one pattern in this list. This supports case-insensitive header
// value matching plus the following constructs:
//
// <b>'*'</b> : Matches any number of characters.
//
// <b>'?'</b> : Matches zero or one character(s).
//
// '*' and '?' can be escaped with a backslash, e.g. '\*' and '\?'
DOMString[]? values;
// If specified, 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 pattern syntax as `values`.
DOMString[]? excludedValues;
};
dictionary RuleCondition {
// The pattern which is matched against the network request url.
// Supported constructs:
//
// <b>'*'</b> : Wildcard: Matches any number of characters.
//
// <b>'|'</b> : Left/right anchor: If used at either end of the pattern,
// specifies the beginning/end of the url respectively.
//
// <b>'||'</b> : Domain name anchor: If used at the beginning of the
// pattern, specifies the start of a (sub-)domain of the URL.
//
// <b>'^'</b> : Separator character: This matches anything except a letter,
// a digit, or one of the following: <code>_</code>,
// <code>-</code>, <code>.</code>, or <code>%</code>. This
// also match the end of the URL.
//
// Therefore <code>urlFilter</code> is composed of the following parts:
// (optional Left/Domain name anchor) + pattern + (optional Right anchor).
//
// If omitted, all urls are matched. An empty string is not allowed.
//
// A pattern beginning with <code>||*</code> is not allowed. Use
// <code>*</code> instead.
//
// Note: Only one of <code>urlFilter</code> or <code>regexFilter</code> can
// be specified.
//
// Note: The <code>urlFilter</code> 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 utf-8.
// For example, when the request url is
// http://abc.рф?q=ф, the
// <code>urlFilter</code> will be matched against the url
// http://abc.xn--p1ai/?q=%D1%84.
DOMString? urlFilter;
// Regular expression to match against the network request url. This follows
// the <a href = "https://github.com/google/re2/wiki/Syntax">RE2 syntax</a>.
//
// Note: Only one of <code>urlFilter</code> or <code>regexFilter</code> can
// be specified.
//
// Note: The <code>regexFilter</code> 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 utf-8.
DOMString? regexFilter;
// Whether the <code>urlFilter</code> or <code>regexFilter</code>
// (whichever is specified) is case sensitive. Default is false.
boolean? isUrlFilterCaseSensitive;
// The rule will only match network requests originating from the list of
// <code>initiatorDomains</code>. If the list is omitted, the rule is
// applied to requests from all domains. An empty list is not allowed.
//
// Notes:
// <ul>
// <li>Sub-domains like "a.example.com" are also allowed.</li>
// <li>The entries must consist of only ascii characters.</li>
// <li>Use punycode encoding for internationalized domains.</li>
// <li>
// This matches against the request initiator and not the request url.
// </li>
// <li>Sub-domains of the listed domains are also matched.</li>
// </ul>
DOMString[]? initiatorDomains;
// The rule will not match network requests originating from the list of
// <code>excludedInitiatorDomains</code>. If the list is empty or omitted,
// no domains are excluded. This takes precedence over
// <code>initiatorDomains</code>.
//
// Notes:
// <ul>
// <li>Sub-domains like "a.example.com" are also allowed.</li>
// <li>The entries must consist of only ascii characters.</li>
// <li>Use punycode encoding for internationalized domains.</li>
// <li>
// This matches against the request initiator and not the request url.
// </li>
// <li>Sub-domains of the listed domains are also excluded.</li>
// </ul>
DOMString[]? excludedInitiatorDomains;
// The rule will only match network requests when the domain matches one
// from the list of <code>requestDomains</code>. If the list is omitted,
// the rule is applied to requests from all domains. An empty list is not
// allowed.
//
// Notes:
// <ul>
// <li>Sub-domains like "a.example.com" are also allowed.</li>
// <li>The entries must consist of only ascii characters.</li>
// <li>Use punycode encoding for internationalized domains.</li>
// <li>Sub-domains of the listed domains are also matched.</li>
// </ul>
DOMString[]? requestDomains;
// The rule will not match network requests when the domains matches one
// from the list of <code>excludedRequestDomains</code>. If the list is
// empty or omitted, no domains are excluded. This takes precedence over
// <code>requestDomains</code>.
//
// Notes:
// <ul>
// <li>Sub-domains like "a.example.com" are also allowed.</li>
// <li>The entries must consist of only ascii characters.</li>
// <li>Use punycode encoding for internationalized domains.</li>
// <li>Sub-domains of the listed domains are also excluded.</li>
// </ul>
DOMString[]? excludedRequestDomains;
// The rule will only match network requests originating from the list of
// <code>domains</code>.
[deprecated="Use $(ref:initiatorDomains) instead"]
DOMString[]? domains;
// The rule will not match network requests originating from the list of
// <code>excludedDomains</code>.
[deprecated="Use $(ref:excludedInitiatorDomains) instead"]
DOMString[]? excludedDomains;
// List of resource types which the rule can match. An empty list is not
// allowed.
//
// Note: this must be specified for <code>allowAllRequests</code> rules and
// may only include the <code>sub_frame</code> and <code>main_frame</code>
// resource types.
ResourceType[]? resourceTypes;
// List of resource types which the rule won't match. Only one of
// <code>resourceTypes</code> and <code>excludedResourceTypes</code> should
// be specified. If neither of them is specified, all resource types except
// "main_frame" are blocked.
ResourceType[]? excludedResourceTypes;
// List of HTTP request methods which the rule can match. An empty list is
// not allowed.
//
// Note: Specifying a <code>requestMethods</code> rule condition will also
// exclude non-HTTP(s) requests, whereas specifying
// <code>excludedRequestMethods</code> will not.
RequestMethod[]? requestMethods;
// List of request methods which the rule won't match. Only one of
// <code>requestMethods</code> and <code>excludedRequestMethods</code>
// should be specified. If neither of them is specified, all request methods
// are matched.
RequestMethod[]? excludedRequestMethods;
// Specifies whether the network request is first-party or third-party to
// the domain from which it originated. If omitted, all requests are
// accepted.
DomainType? domainType;
// List of $(ref:tabs.Tab.id) which the rule should match. An ID of
// $(ref: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.
long[]? tabIds;
// List of $(ref:tabs.Tab.id) which the rule should not match. An ID of
// $(ref:tabs.TAB_ID_NONE) excludes requests which don't originate from a
// tab. Only supported for session-scoped rules.
long[]? excludedTabIds;
// Rule matches if the request matches any response header condition in this
// list (if specified).
HeaderInfo[]? responseHeaders;
// Rule does not match if the request matches any response header
// condition in this list (if specified). If both `excludedResponseHeaders`
// and `responseHeaders` are specified, then the `excludedResponseHeaders`
// property takes precedence.
HeaderInfo[]? excludedResponseHeaders;
};
// Options for regex filters and substitutions for headers.
[nodoc] dictionary HeaderRegexOptions {
// Whether the regex should match all groups for the value. This is only
// relevant if a regex substitution is present and would thus need to be
// applied onto all matching groups. Equivalent to the "g" flag.
// Defaults to false.
boolean? matchAll;
};
dictionary ModifyHeaderInfo {
// The name of the header to be modified.
DOMString header;
// The operation to be performed on a header.
// <!-- TODO(crbug.com/352093575): Make this field optional: It is ignored
// if `regexSubstitution` is specified but is required otherwise. -->
HeaderOperation operation;
// The new value for the header. Must be specified for <code>append</code>
// and <code>set</code> operations.
// <!-- TODO(crbug.com/352093575): Ignored if `regexSubstitution` is
// specified, -->
DOMString? value;
// A regular expression to match against the header value. This follows the
// RE2 syntax for consistency with the rest of the API.
[nodoc] DOMString? regexFilter;
// Substitution pattern for the response header. `regexFilter` must be
// specified for this to be valid. Takes precedence over `value` and
// `operation` if specified and valid.
[nodoc] DOMString? regexSubstitution;
// Options for the regex filter. If not specified, all options will be
// default.
[nodoc] HeaderRegexOptions? regexOptions;
};
dictionary RuleAction {
// The type of action to perform.
RuleActionType type;
// Describes how the redirect should be performed. Only valid for redirect
// rules.
Redirect? redirect;
// The request headers to modify for the request. Only valid if
// RuleActionType is "modifyHeaders".
ModifyHeaderInfo[]? requestHeaders;
// The response headers to modify for the request. Only valid if
// RuleActionType is "modifyHeaders".
ModifyHeaderInfo[]? responseHeaders;
};
dictionary Rule {
// An id which uniquely identifies a rule. Mandatory and should be >= 1.
long id;
// Rule priority. Defaults to 1. When specified, should be >= 1.
long? priority;
// The condition under which this rule is triggered.
RuleCondition condition;
// The action to take if this rule is matched.
RuleAction action;
};
// Uniquely describes a declarative rule specified by the extension.
dictionary MatchedRule {
// A matching rule's ID.
long ruleId;
// ID of the $(ref:Ruleset) this rule belongs to. For a rule originating
// from the set of dynamic rules, this will be equal to
// $(ref:DYNAMIC_RULESET_ID).
DOMString rulesetId;
};
dictionary GetRulesFilter {
// If specified, only rules with matching IDs are included.
long[]? ruleIds;
};
dictionary MatchedRuleInfo {
MatchedRule rule;
// The time the rule was matched. Timestamps will correspond to the
// Javascript convention for times, i.e. number of milliseconds since the
// epoch.
double timeStamp;
// The tabId of the tab from which the request originated if the tab is
// still active. Else -1.
long tabId;
};
dictionary MatchedRulesFilter {
// If specified, only matches rules for the given tab. Matches rules not
// associated with any active tab if set to -1.
long? tabId;
// If specified, only matches rules after the given timestamp.
double? minTimeStamp;
};
dictionary RulesMatchedDetails {
// Rules matching the given filter.
MatchedRuleInfo[] rulesMatchedInfo;
};
dictionary RequestDetails {
// The ID of the request. Request IDs are unique within a browser session.
DOMString requestId;
// The URL of the request.
DOMString url;
// 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.
DOMString? initiator;
// Standard HTTP method.
DOMString method;
// 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 (<code>type</code> is
// <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code>
// indicates the ID of this frame, not the ID of the outer frame. Frame IDs
// are unique within a tab.
long frameId;
// The unique identifier for the frame's document, if this request is for a
// frame.
DOMString? documentId;
// The type of the frame, if this request is for a frame.
extensionTypes.FrameType? frameType;
// The lifecycle of the frame's document, if this request is for a
// frame.
extensionTypes.DocumentLifecycle? documentLifecycle;
// ID of frame that wraps the frame which sent the request. Set to -1 if no
// parent frame exists.
long parentFrameId;
// The unique identifier for the frame's parent document, if this request
// is for a frame and has a parent.
DOMString? parentDocumentId;
// The ID of the tab in which the request takes place. Set to -1 if the
// request isn't related to a tab.
long tabId;
// The resource type of the request.
ResourceType type;
};
dictionary TestMatchRequestDetails {
// The URL of the hypothetical request.
DOMString url;
// The initiator URL (if any) for the hypothetical request.
DOMString? initiator;
// Standard HTTP method of the hypothetical request. Defaults to "get" for
// HTTP requests and is ignored for non-HTTP requests.
RequestMethod? method;
// The resource type of the hypothetical request.
ResourceType type;
// 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.
long? tabId;
// 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 specified,
// the hypothetical response would return empty response headers, which can
// match rules which match on the non-existence of headers.
// E.g. <code>{"content-type": ["text/html; charset=utf-8",
// "multipart/form-data"]}</code>
object? responseHeaders;
};
dictionary MatchedRuleInfoDebug {
MatchedRule rule;
// Details about the request for which the rule was matched.
RequestDetails request;
};
[nodoc] dictionary DNRInfo {
Ruleset[] rule_resources;
};
[nodoc] dictionary ManifestKeys {
DNRInfo declarative_net_request;
};
dictionary RegexOptions {
// The regular expresson to check.
DOMString regex;
// Whether the <code>regex</code> specified is case sensitive. Default is
// true.
boolean? isCaseSensitive;
// Whether the <code>regex</code> specified requires capturing. Capturing is
// only required for redirect rules which specify a
// <code>regexSubstition</code> action. The default is false.
boolean? requireCapturing;
};
dictionary IsRegexSupportedResult {
boolean isSupported;
// Specifies the reason why the regular expression is not supported. Only
// provided if <code>isSupported</code> is false.
UnsupportedRegexReason? reason;
};
dictionary TestMatchOutcomeResult {
// The rules (if any) that match the hypothetical request.
MatchedRule[] matchedRules;
};
dictionary UpdateRuleOptions {
// IDs of the rules to remove. Any invalid IDs will be ignored.
long[]? removeRuleIds;
// Rules to add.
Rule[]? addRules;
};
dictionary UpdateRulesetOptions {
// The set of ids corresponding to a static $(ref:Ruleset) that should be
// disabled.
DOMString[]? disableRulesetIds;
// The set of ids corresponding to a static $(ref:Ruleset) that should be
// enabled.
DOMString[]? enableRulesetIds;
};
dictionary UpdateStaticRulesOptions {
// The id corresponding to a static $(ref:Ruleset).
DOMString rulesetId;
// Set of ids corresponding to rules in the $(ref:Ruleset) to disable.
long[]? disableRuleIds;
// Set of ids corresponding to rules in the $(ref:Ruleset) to enable.
long[]? enableRuleIds;
};
dictionary GetDisabledRuleIdsOptions {
// The id corresponding to a static $(ref:Ruleset).
DOMString rulesetId;
};
dictionary TabActionCountUpdate {
// The tab for which to update the action count.
long tabId;
// The amount to increment the tab's action count by. Negative values will
// decrement the count.
long increment;
};
dictionary ExtensionActionOptions {
// Whether to automatically display the action count for a page as the
// extension's badge text. This preference is persisted across sessions.
boolean? displayActionCountAsBadgeText;
// Details of how the tab's action count should be adjusted.
TabActionCountUpdate? tabUpdate;
};
callback EmptyCallback = void();
callback GetAllowedPagesCallback = void(DOMString[] result);
callback GetRulesCallback = void(Rule[] rules);
callback GetMatchedRulesCallback = void(RulesMatchedDetails details);
callback GetEnabledRulesetsCallback = void(DOMString[] rulesetIds);
callback GetDisabledRuleIdsCallback = void(long[] disabledRuleIds);
callback IsRegexSupportedCallback = void(IsRegexSupportedResult result);
callback GetAvailableStaticRuleCountCallback = void(long count);
callback TestMatchOutcomeCallback = void(TestMatchOutcomeResult result);
interface Functions {
// Modifies the current set of dynamic rules for the extension.
// The rules with IDs listed in <code>options.removeRuleIds</code> are first
// removed, and then the rules given in <code>options.addRules</code> are
// added. Notes:
// <ul>
// <li>This update happens as a single atomic operation: either all
// specified rules are added and removed, or an error is returned.</li>
// <li>These rules are persisted across browser sessions and across
// extension updates.</li>
// <li>Static rules specified as part of the extension package can not be
// removed using this function.</li>
// <li>$(ref:MAX_NUMBER_OF_DYNAMIC_RULES) is the maximum number
// of dynamic rules an extension can add. The number of
// <a href="#safe_rules">unsafe rules</a> must not exceed
// $(ref:MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES).</li>
// </ul>
// |callback|: Called once the update is complete or has failed. In case of
// an error, $(ref:runtime.lastError) will be set and no change will be made
// to the rule set. This can happen for multiple reasons, such as invalid
// rule format, duplicate rule ID, rule count limit exceeded, internal
// errors, and others.
static void updateDynamicRules(
UpdateRuleOptions options,
optional EmptyCallback callback);
// Returns the current set of dynamic rules for the extension. Callers can
// optionally filter the list of fetched rules by specifying a
// <code>filter</code>.
// |filter|: An object to filter the list of fetched rules.
// |callback|: Called with the set of dynamic rules. An error might be
// raised in case of transient internal errors.
static void getDynamicRules(
optional GetRulesFilter filter,
GetRulesCallback callback);
// Modifies the current set of session scoped rules for the extension.
// The rules with IDs listed in <code>options.removeRuleIds</code> are first
// removed, and then the rules given in <code>options.addRules</code> are
// added. Notes:
// <ul>
// <li>This update happens as a single atomic operation: either all
// specified rules are added and removed, or an error is returned.</li>
// <li>These rules are not persisted across sessions and are backed in
// memory.</li>
// <li>$(ref:MAX_NUMBER_OF_SESSION_RULES) is the maximum number
// of session rules an extension can add.</li>
// </ul>
// |callback|: Called once the update is complete or has failed. In case of
// an error, $(ref:runtime.lastError) will be set and no change will be made
// to the rule set. This can happen for multiple reasons, such as invalid
// rule format, duplicate rule ID, rule count limit exceeded, and others.
static void updateSessionRules(
UpdateRuleOptions options,
optional EmptyCallback callback);
// Returns the current set of session scoped rules for the extension.
// Callers can optionally filter the list of fetched rules by specifying a
// <code>filter</code>.
// |filter|: An object to filter the list of fetched rules.
// |callback|: Called with the set of session scoped rules.
static void getSessionRules(
optional GetRulesFilter filter,
GetRulesCallback callback);
// Updates the set of enabled static rulesets for the extension. The
// rulesets with IDs listed in <code>options.disableRulesetIds</code> are
// first removed, and then the rulesets listed in
// <code>options.enableRulesetIds</code> are added.<br/>
// Note that the set of enabled static rulesets is persisted across sessions
// but not across extension updates, i.e. the <code>rule_resources</code>
// manifest key will determine the set of enabled static rulesets on each
// extension update.
// |callback|: Called once the update is complete. In case of an error,
// $(ref:runtime.lastError) will be set and no change will be made to set of
// enabled rulesets. This can happen for multiple reasons, such as invalid
// ruleset IDs, rule count limit exceeded, or internal errors.
static void updateEnabledRulesets(
UpdateRulesetOptions options,
optional EmptyCallback callback);
// Returns the ids for the current set of enabled static rulesets.
// |callback|: Called with a list of ids, where each id corresponds to an
// enabled static $(ref:Ruleset).
static void getEnabledRulesets(
GetEnabledRulesetsCallback callback);
// Disables and enables individual static rules in a $(ref:Ruleset).
// Changes to rules belonging to a disabled $(ref:Ruleset) will take
// effect the next time that it becomes enabled.
// |callback|: Called once the update is complete. In case of an error,
// $(ref:runtime.lastError) will be set and no change will be made to the
// enabled static rules.
static void updateStaticRules(
UpdateStaticRulesOptions options,
optional EmptyCallback callback);
// Returns the list of static rules in the given $(ref:Ruleset) that are
// currently disabled.
// |options|: Specifies the ruleset to query.
// |callback|: Called with a list of ids that correspond to the disabled
// rules in that ruleset.
static void getDisabledRuleIds(
GetDisabledRuleIdsOptions options,
GetDisabledRuleIdsCallback callback);
// Returns all rules matched for the extension. Callers can optionally
// filter the list of matched rules by specifying a <code>filter</code>.
// This method is only available to extensions with the
// <code>"declarativeNetRequestFeedback"</code> permission or having the
// <code>"activeTab"</code> permission granted for the <code>tabId</code>
// specified in <code>filter</code>.
// Note: Rules not associated with an active document that were matched more
// than five minutes ago will not be returned.
// |filter|: An object to filter the list of matched rules.
// |callback|: Called once the list of matched rules has been fetched. In
// case of an error, $(ref:runtime.lastError) will be set and no rules will
// be returned. This can happen for multiple reasons, such as insufficient
// permissions, or exceeding the quota.
static void getMatchedRules(
optional MatchedRulesFilter filter,
GetMatchedRulesCallback callback);
// Configures 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.
static void setExtensionActionOptions(
ExtensionActionOptions options,
optional EmptyCallback callback);
// Checks if the given regular expression will be supported as a
// <code>regexFilter</code> rule condition.
// |regexOptions|: The regular expression to check.
// |callback|: Called with details consisting of whether the regular
// expression is supported and the reason if not.
static void isRegexSupported(
RegexOptions regexOptions,
IsRegexSupportedCallback callback);
// Returns the number of static rules an extension can enable before the
// <a href="#global-static-rule-limit">global static rule limit</a> is
// reached.
static void getAvailableStaticRuleCount(
GetAvailableStaticRuleCountCallback callback);
// 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.
// |requestDetails|: The request details to test.
// |callback|: Called with the details of matched rules.
static void testMatchOutcome(
TestMatchRequestDetails request,
TestMatchOutcomeCallback callback);
};
interface Properties {
// The minimum number of static rules guaranteed to an extension across its
// enabled static rulesets. Any rules above this limit will count towards
// the <a href="#global-static-rule-limit">global static rule limit</a>.
[value=30000] static long GUARANTEED_MINIMUM_STATIC_RULES();
// The maximum number of combined dynamic and session scoped rules an
// extension can add.
[nodoc, value=5000, deprecated="There is no longer a combined limit. See $(ref:MAX_NUMBER_OF_DYNAMIC_RULES) and $(ref:MAX_NUMBER_OF_SESSION_RULES)."] static long MAX_NUMBER_OF_DYNAMIC_AND_SESSION_RULES();
// The maximum number of dynamic rules that an extension can add.
[value=30000] static long MAX_NUMBER_OF_DYNAMIC_RULES();
// The maximum number of "unsafe" dynamic rules that an extension can add.
[value=5000] static long MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES();
// The maximum number of session scoped rules that an extension can add.
[value=5000] static long MAX_NUMBER_OF_SESSION_RULES();
// The maximum number of "unsafe" session scoped rules that an extension can
// add.
[value=5000] static long MAX_NUMBER_OF_UNSAFE_SESSION_RULES();
// Time interval within which <code>MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL
// getMatchedRules</code> calls can be made, specified in minutes.
// Additional calls will fail immediately and set $(ref:runtime.lastError).
// Note: <code>getMatchedRules</code> calls associated with a user gesture
// are exempt from the quota.
[value=10] static long GETMATCHEDRULES_QUOTA_INTERVAL();
// The number of times <code>getMatchedRules</code> can be called within a
// period of <code>GETMATCHEDRULES_QUOTA_INTERVAL</code>.
[value=20] static long MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL();
// 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 specified in the rule resources file.
[value=1000] static long MAX_NUMBER_OF_REGEX_RULES();
// The maximum number of static <code>Rulesets</code> an extension can
// specify as part of the <code>"rule_resources"</code> manifest key.
[value=100] static long MAX_NUMBER_OF_STATIC_RULESETS();
// The maximum number of static <code>Rulesets</code> an extension can
// enable at any one time.
[value=50] static long MAX_NUMBER_OF_ENABLED_STATIC_RULESETS();
// Ruleset ID for the dynamic rules added by the extension.
[value="_dynamic"] static DOMString DYNAMIC_RULESET_ID();
// Ruleset ID for the session-scoped rules added by the extension.
[value="_session"] static DOMString SESSION_RULESET_ID();
};
interface Events {
// Fired when a rule is matched with a request. Only available for unpacked
// extensions with the <code>"declarativeNetRequestFeedback"</code> permission
// as this is intended to be used for debugging purposes only.
// |info|: The rule that has been matched along with information about the
// associated request.
static void onRuleMatchedDebug(MatchedRuleInfoDebug info);
};
};
|