text: "use strict";
  
  exports.availableDocumentFeatures = [
    "FetchExternalResources",
    "ProcessExternalResources",
    "SkipExternalResources"
  ];
  
  exports.defaultDocumentFeatures = {
    FetchExternalResources: ["script", "link"], // omitted by default: "frame"
    ProcessExternalResources: ["script"], // omitted by default: "frame", "iframe"
    SkipExternalResources: false
  };
  
  exports.applyDocumentFeatures = (documentImpl, features) => {
    features = features || {};
  
    for (let i = 0; i < exports.availableDocumentFeatures.length; ++i) {
      const featureName = exports.availableDocumentFeatures[i];
      let featureSource;
  
      if (features[featureName] !== undefined) {
        featureSource = features[featureName];
        // We have to check the lowercase version also because the Document feature
        // methods convert everything to lowercase.
      } else if (typeof features[featureName.toLowerCase()] !== "undefined") {
        featureSource = features[featureName.toLowerCase()];
      } else if (exports.defaultDocumentFeatures[featureName]) {
        featureSource = exports.defaultDocumentFeatures[featureName];
      } else {
        continue;
      }
  
      const implImpl = documentImpl._implementation;
      implImpl._removeFeature(featureName);
  
      if (featureSource !== undefined) {
        if (Array.isArray(featureSource)) {
          for (let j = 0; j < featureSource.length; ++j) {
            implImpl._addFeature(featureName, featureSource[j]);
          }
        } else {
          implImpl._addFeature(featureName, featureSource);
        }
      }
    }
  };
  