summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/feature_policy
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-08-30 10:22:43 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-08-30 12:36:28 +0000
commit271a6c3487a14599023a9106329505597638d793 (patch)
treee040d58ffc86c1480b79ca8528020ca9ec919bf8 /chromium/third_party/blink/renderer/core/feature_policy
parent7b2ffa587235a47d4094787d72f38102089f402a (diff)
downloadqtwebengine-chromium-271a6c3487a14599023a9106329505597638d793.tar.gz
BASELINE: Update Chromium to 77.0.3865.59
Change-Id: I1e89a5f3b009a9519a6705102ad65c92fe736f21 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/core/feature_policy')
-rw-r--r--chromium/third_party/blink/renderer/core/feature_policy/BUILD.gn1
-rw-r--r--chromium/third_party/blink/renderer/core/feature_policy/feature_policy_features.json55
-rw-r--r--chromium/third_party/blink/renderer/core/feature_policy/feature_policy_helper.h4
-rw-r--r--chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc46
-rw-r--r--chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h12
-rw-r--r--chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser_delegate.h23
-rw-r--r--chromium/third_party/blink/renderer/core/feature_policy/feature_policy_value_fuzzer.cc15
-rw-r--r--chromium/third_party/blink/renderer/core/feature_policy/layout_animations_policy.cc4
-rw-r--r--chromium/third_party/blink/renderer/core/feature_policy/layout_animations_policy.h2
-rw-r--r--chromium/third_party/blink/renderer/core/feature_policy/policy_test.cc12
10 files changed, 71 insertions, 53 deletions
diff --git a/chromium/third_party/blink/renderer/core/feature_policy/BUILD.gn b/chromium/third_party/blink/renderer/core/feature_policy/BUILD.gn
index 9aec8ac93f8..631d4f71465 100644
--- a/chromium/third_party/blink/renderer/core/feature_policy/BUILD.gn
+++ b/chromium/third_party/blink/renderer/core/feature_policy/BUILD.gn
@@ -12,6 +12,7 @@ blink_core_sources("feature_policy") {
"feature_policy_helper.h",
"feature_policy_parser.cc",
"feature_policy_parser.h",
+ "feature_policy_parser_delegate.h",
"iframe_policy.h",
"layout_animations_policy.cc",
"layout_animations_policy.h",
diff --git a/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_features.json5 b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_features.json5
index 7e768dd1e23..e98ceff4967 100644
--- a/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_features.json5
+++ b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_features.json5
@@ -107,7 +107,6 @@
{
name: "DocumentDomain",
feature_policy_name: "document-domain",
- depends_on: ["ExperimentalProductivityFeatures"],
},
{
name: "DocumentWrite",
@@ -255,10 +254,6 @@
depends_on: ["Serial"],
},
{
- name: "Speaker",
- feature_policy_name: "speaker",
- },
- {
name: "SyncScript",
feature_policy_name: "sync-script",
depends_on: ["ExperimentalProductivityFeatures"],
diff --git a/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_helper.h b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_helper.h
index 921fb2a0833..f7542617e95 100644
--- a/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_helper.h
+++ b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_helper.h
@@ -14,7 +14,7 @@ namespace blink {
using FeatureNameMap = HashMap<String, mojom::FeaturePolicyFeature>;
-class ExecutionContext;
+class FeatureContext;
// This method defines the feature names which will be recognized by the parser
// for the Feature-Policy HTTP header and the <iframe> "allow" attribute, as
@@ -24,7 +24,7 @@ const FeatureNameMap& GetDefaultFeatureNameMap();
// Returns true if this feature is currently disabled by an origin trial (it is
// origin trial controlled, and the origin trial is not enabled).
-bool DisabledByOriginTrial(const String&, ExecutionContext*);
+bool DisabledByOriginTrial(const String&, FeatureContext*);
} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc
index 5bbfc8d5c3e..5260f89ce0b 100644
--- a/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc
+++ b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc
@@ -11,9 +11,9 @@
#include "base/metrics/histogram_macros.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
-#include "third_party/blink/renderer/core/frame/use_counter.h"
#include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h"
#include "third_party/blink/renderer/core/origin_trials/origin_trials.h"
+#include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
#include "third_party/blink/renderer/platform/json/json_values.h"
#include "third_party/blink/renderer/platform/network/http_parsers.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
@@ -28,9 +28,9 @@ ParsedFeaturePolicy FeaturePolicyParser::ParseHeader(
const String& policy,
scoped_refptr<const SecurityOrigin> origin,
Vector<String>* messages,
- ExecutionContext* execution_context) {
+ FeaturePolicyParserDelegate* delegate) {
return Parse(policy, origin, nullptr, messages, GetDefaultFeatureNameMap(),
- execution_context);
+ delegate);
}
ParsedFeaturePolicy FeaturePolicyParser::ParseAttribute(
@@ -49,7 +49,7 @@ ParsedFeaturePolicy FeaturePolicyParser::Parse(
scoped_refptr<const SecurityOrigin> src_origin,
Vector<String>* messages,
const FeatureNameMap& feature_names,
- ExecutionContext* execution_context) {
+ FeaturePolicyParserDelegate* delegate) {
ParsedFeaturePolicy allowlists;
std::bitset<static_cast<size_t>(mojom::FeaturePolicyFeature::kMaxValue) + 1>
features_specified;
@@ -61,18 +61,16 @@ ParsedFeaturePolicy FeaturePolicyParser::Parse(
Vector<String> policy_items;
// policy_items = [ policy *( "," [ policy ] ) ]
policy.Split(',', policy_items);
- if (policy_items.size() > 1) {
- UseCounter::Count(
- execution_context,
+ if (policy_items.size() > 1 && delegate) {
+ delegate->CountFeaturePolicyUsage(
mojom::WebFeature::kFeaturePolicyCommaSeparatedDeclarations);
}
for (const String& item : policy_items) {
Vector<String> entry_list;
// entry_list = [ entry *( ";" [ entry ] ) ]
item.Split(';', entry_list);
- if (entry_list.size() > 1) {
- UseCounter::Count(
- execution_context,
+ if (entry_list.size() > 1 && delegate) {
+ delegate->CountFeaturePolicyUsage(
mojom::WebFeature::kFeaturePolicySemicolonSeparatedDeclarations);
}
for (const String& entry : entry_list) {
@@ -92,7 +90,7 @@ ParsedFeaturePolicy FeaturePolicyParser::Parse(
continue;
}
- if (DisabledByOriginTrial(feature_name, execution_context)) {
+ if (DisabledByOriginTrial(feature_name, delegate)) {
if (messages) {
messages->push_back("Origin trial controlled feature not enabled: '" +
tokens[0] + "'.");
@@ -110,13 +108,9 @@ ParsedFeaturePolicy FeaturePolicyParser::Parse(
// Count the use of this feature policy.
if (src_origin) {
- Document* document = DynamicTo<Document>(execution_context);
- if (!document || !document->IsParsedFeaturePolicy(feature)) {
+ if (!delegate || !delegate->FeaturePolicyFeatureObserved(feature)) {
UMA_HISTOGRAM_ENUMERATION("Blink.UseCounter.FeaturePolicy.Allow",
feature);
- if (document) {
- document->SetParsedFeaturePolicy(feature);
- }
}
} else {
UMA_HISTOGRAM_ENUMERATION("Blink.UseCounter.FeaturePolicy.Header",
@@ -139,16 +133,20 @@ ParsedFeaturePolicy FeaturePolicyParser::Parse(
feature == mojom::FeaturePolicyFeature::kUnoptimizedLosslessImages ||
feature ==
mojom::FeaturePolicyFeature::kUnoptimizedLosslessImagesStrict) {
- UseCounter::Count(execution_context,
- mojom::WebFeature::kUnoptimizedImagePolicies);
+ if (delegate) {
+ delegate->CountFeaturePolicyUsage(
+ mojom::WebFeature::kUnoptimizedImagePolicies);
+ }
// Don't analyze allowlists for origin trial features.
count_allowlist_type = false;
}
// Detect usage of UnsizedMediaPolicy origin trial
if (feature == mojom::FeaturePolicyFeature::kUnsizedMedia) {
- UseCounter::Count(execution_context,
- mojom::WebFeature::kUnsizedMediaPolicy);
+ if (delegate) {
+ delegate->CountFeaturePolicyUsage(
+ mojom::WebFeature::kUnsizedMediaPolicy);
+ }
// Don't analyze allowlists for origin trial features.
count_allowlist_type = false;
}
@@ -275,7 +273,6 @@ ParsedFeaturePolicy FeaturePolicyParser::Parse(
} else if (target_is_opaque) {
allowlist.opaque_value = value;
} else {
- DCHECK(!target_origin.opaque());
values[target_origin] = value;
}
}
@@ -403,6 +400,13 @@ PolicyValue FeaturePolicyParser::ParseValueForType(
return value;
}
+void FeaturePolicyParser::ParseValueForFuzzer(
+ blink::mojom::PolicyValueType feature_type,
+ const WTF::String& value_string) {
+ bool ok;
+ ParseValueForType(feature_type, value_string, &ok);
+}
+
bool IsFeatureDeclared(mojom::FeaturePolicyFeature feature,
const ParsedFeaturePolicy& policy) {
return std::any_of(policy.begin(), policy.end(),
diff --git a/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h
index 5739397fc6a..7a9725ccce2 100644
--- a/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h
+++ b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h
@@ -16,13 +16,11 @@
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
-// Forward declare for friendship.
-void ParseValueForFuzzer(blink::mojom::PolicyValueType, const WTF::String&);
-
namespace blink {
class Document;
class ExecutionContext;
+class FeaturePolicyParserDelegate;
// These values match the "FeaturePolicyAllowlistType" enum in
// tools/metrics/histograms/enums.xml. Entries should not be renumbered and
@@ -66,7 +64,7 @@ class CORE_EXPORT FeaturePolicyParser {
const String& policy,
scoped_refptr<const SecurityOrigin>,
Vector<String>* messages,
- ExecutionContext* execution_context = nullptr);
+ FeaturePolicyParserDelegate* delegate = nullptr);
// Converts a container policy string into a vector of allowlists, given self
// and src origins provided, one for each feature specified. Unrecognized
@@ -93,10 +91,12 @@ class CORE_EXPORT FeaturePolicyParser {
scoped_refptr<const SecurityOrigin> src_origin,
Vector<String>* messages,
const FeatureNameMap& feature_names,
- ExecutionContext* execution_context = nullptr);
+ FeaturePolicyParserDelegate* delegate = nullptr);
+
+ // Used for LLVM fuzzer test
+ static void ParseValueForFuzzer(mojom::PolicyValueType, const String&);
private:
- friend void ::ParseValueForFuzzer(mojom::PolicyValueType, const String&);
static PolicyValue GetFallbackValueForFeature(
mojom::FeaturePolicyFeature feature);
static PolicyValue ParseValueForType(mojom::PolicyValueType feature_type,
diff --git a/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser_delegate.h b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser_delegate.h
new file mode 100644
index 00000000000..3d7cbf11d47
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_parser_delegate.h
@@ -0,0 +1,23 @@
+// Copyright 2019 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 THIRD_PARTY_BLINK_RENDERER_CORE_FEATURE_POLICY_FEATURE_POLICY_PARSER_DELEGATE_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_FEATURE_POLICY_FEATURE_POLICY_PARSER_DELEGATE_H_
+
+#include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom-blink.h"
+#include "third_party/blink/renderer/core/frame/web_feature.h"
+#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+
+namespace blink {
+
+class FeaturePolicyParserDelegate : public FeatureContext {
+ public:
+ virtual void CountFeaturePolicyUsage(mojom::WebFeature feature) = 0;
+ virtual bool FeaturePolicyFeatureObserved(
+ mojom::FeaturePolicyFeature feature) = 0;
+};
+
+} // namespace blink
+
+#endif // THIRD_PARTY_BLINK_RENDERER_CORE_FEATURE_POLICY_FEATURE_POLICY_PARSER_DELEGATE_H_
diff --git a/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_value_fuzzer.cc b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_value_fuzzer.cc
index 7f8e6aa984b..1455636e495 100644
--- a/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_value_fuzzer.cc
+++ b/chromium/third_party/blink/renderer/core/feature_policy/feature_policy_value_fuzzer.cc
@@ -13,19 +13,12 @@
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
-void ParseValueForFuzzer(blink::mojom::PolicyValueType feature_type,
- const WTF::String& value_string) {
- bool ok;
- blink::FeaturePolicyParser::ParseValueForType(feature_type, value_string,
- &ok);
-}
-
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
static blink::BlinkFuzzerTestSupport test_support =
blink::BlinkFuzzerTestSupport();
- ParseValueForFuzzer(blink::mojom::PolicyValueType::kBool,
- WTF::String(data, size));
- ParseValueForFuzzer(blink::mojom::PolicyValueType::kDecDouble,
- WTF::String(data, size));
+ blink::FeaturePolicyParser::ParseValueForFuzzer(
+ blink::mojom::PolicyValueType::kBool, WTF::String(data, size));
+ blink::FeaturePolicyParser::ParseValueForFuzzer(
+ blink::mojom::PolicyValueType::kDecDouble, WTF::String(data, size));
return 0;
}
diff --git a/chromium/third_party/blink/renderer/core/feature_policy/layout_animations_policy.cc b/chromium/third_party/blink/renderer/core/feature_policy/layout_animations_policy.cc
index 3b08064a6b2..53c870bd734 100644
--- a/chromium/third_party/blink/renderer/core/feature_policy/layout_animations_policy.cc
+++ b/chromium/third_party/blink/renderer/core/feature_policy/layout_animations_policy.cc
@@ -15,10 +15,10 @@ String GetViolationMessage(const CSSProperty& property) {
return String::Format(
"Feature policy violation: CSS property '%s' violates feature policy "
"'%s' which is disabled in this document",
- property.GetPropertyNameString().Utf8().data(),
+ property.GetPropertyNameString().Utf8().c_str(),
GetNameForFeature(mojom::FeaturePolicyFeature::kLayoutAnimations)
.Utf8()
- .data());
+ .c_str());
}
} // namespace
diff --git a/chromium/third_party/blink/renderer/core/feature_policy/layout_animations_policy.h b/chromium/third_party/blink/renderer/core/feature_policy/layout_animations_policy.h
index 3efcff1dcce..d2d5bced360 100644
--- a/chromium/third_party/blink/renderer/core/feature_policy/layout_animations_policy.h
+++ b/chromium/third_party/blink/renderer/core/feature_policy/layout_animations_policy.h
@@ -6,7 +6,7 @@
#define THIRD_PARTY_BLINK_RENDERER_CORE_FEATURE_POLICY_LAYOUT_ANIMATIONS_POLICY_H_
#include "third_party/blink/public/common/feature_policy/feature_policy.h"
-#include "third_party/blink/renderer/platform/wtf/allocator.h"
+#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "third_party/blink/renderer/platform/wtf/hash_set.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
diff --git a/chromium/third_party/blink/renderer/core/feature_policy/policy_test.cc b/chromium/third_party/blink/renderer/core/feature_policy/policy_test.cc
index f7bd73eeff6..d915fd5f4bf 100644
--- a/chromium/third_party/blink/renderer/core/feature_policy/policy_test.cc
+++ b/chromium/third_party/blink/renderer/core/feature_policy/policy_test.cc
@@ -24,11 +24,13 @@ using testing::UnorderedElementsAre;
class PolicyTest : public testing::Test {
public:
void SetUp() override {
- document_ = MakeGarbageCollected<Document>();
- document_->SetSecurityOrigin(SecurityOrigin::CreateFromString(kSelfOrigin));
- document_->ApplyFeaturePolicyFromHeader(
- "fullscreen *; payment 'self'; midi 'none'; camera 'self' "
- "https://example.com https://example.net");
+ DocumentInit init =
+ DocumentInit::Create()
+ .WithOriginToCommit(SecurityOrigin::CreateFromString(kSelfOrigin))
+ .WithFeaturePolicyHeader(
+ "fullscreen *; payment 'self'; midi 'none'; camera 'self' "
+ "https://example.com https://example.net");
+ document_ = MakeGarbageCollected<Document>(init);
}
DOMFeaturePolicy* GetPolicy() const { return policy_; }