diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-08-30 10:22:43 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-08-30 12:36:28 +0000 |
commit | 271a6c3487a14599023a9106329505597638d793 (patch) | |
tree | e040d58ffc86c1480b79ca8528020ca9ec919bf8 /chromium/third_party/blink/renderer/core/feature_policy | |
parent | 7b2ffa587235a47d4094787d72f38102089f402a (diff) | |
download | qtwebengine-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')
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_; } |