| Index: third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp b/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp
|
| index 61b06a393572f1e03d12b0c31684176cb9adc66a..71a42e5b6bd23f8a49e4bd30ecc18550a24ab784 100644
|
| --- a/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp
|
| +++ b/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp
|
| @@ -48,8 +48,8 @@ DEFINE_NODE_FACTORY(HTMLIFrameElement)
|
| DEFINE_TRACE(HTMLIFrameElement)
|
| {
|
| visitor->trace(m_sandbox);
|
| + visitor->trace(m_permissions);
|
| HTMLFrameElementBase::trace(visitor);
|
| - DOMTokenListObserver::trace(visitor);
|
| }
|
|
|
| HTMLIFrameElement::~HTMLIFrameElement()
|
| @@ -61,6 +61,11 @@ DOMTokenList* HTMLIFrameElement::sandbox() const
|
| return m_sandbox.get();
|
| }
|
|
|
| +DOMTokenList* HTMLIFrameElement::permissions() const
|
| +{
|
| + return m_permissions.get();
|
| +}
|
| +
|
| bool HTMLIFrameElement::isPresentationAttribute(const QualifiedName& name) const
|
| {
|
| if (name == widthAttr || name == heightAttr || name == alignAttr || name == frameborderAttr)
|
| @@ -109,6 +114,9 @@ void HTMLIFrameElement::parseAttribute(const QualifiedName& name, const AtomicSt
|
| m_allowFullscreen = !value.isNull();
|
| if (m_allowFullscreen != oldAllowFullscreen)
|
| frameOwnerPropertiesChanged();
|
| + } else if (name == permissionsAttr) {
|
| + if (initializePermissionsAttribute())
|
| + m_permissions->setValue(value);
|
| } else {
|
| if (name == srcAttr)
|
| logUpdateAttributeIfIsolatedWorldAndInDocument("iframe", srcAttr, oldValue, value);
|
| @@ -147,7 +155,20 @@ bool HTMLIFrameElement::isInteractiveContent() const
|
| return true;
|
| }
|
|
|
| -void HTMLIFrameElement::valueWasSet()
|
| +void HTMLIFrameElement::permissionsValueWasSet()
|
| +{
|
| + if (!initializePermissionsAttribute())
|
| + return;
|
| +
|
| + String invalidTokens;
|
| + m_delegatedPermissions = m_permissions->parseDelegatedPermissions(invalidTokens);
|
| + if (!invalidTokens.isNull())
|
| + document().addConsoleMessage(ConsoleMessage::create(OtherMessageSource, ErrorMessageLevel, "Error while parsing the 'permissions' attribute: " + invalidTokens));
|
| + setSynchronizedLazyAttribute(permissionsAttr, m_permissions->value());
|
| + frameOwnerPropertiesChanged();
|
| +}
|
| +
|
| +void HTMLIFrameElement::sandboxValueWasSet()
|
| {
|
| String invalidTokens;
|
| setSandboxFlags(m_sandbox->value().isNull() ? SandboxNone : parseSandboxPolicy(m_sandbox->tokens(), invalidTokens));
|
| @@ -160,4 +181,15 @@ ReferrerPolicy HTMLIFrameElement::referrerPolicyAttribute()
|
| {
|
| return m_referrerPolicy;
|
| }
|
| +
|
| +bool HTMLIFrameElement::initializePermissionsAttribute()
|
| +{
|
| + if (!RuntimeEnabledFeatures::permissionDelegationEnabled())
|
| + return false;
|
| +
|
| + if (!m_permissions)
|
| + m_permissions = HTMLIFrameElementPermissions::create(this);
|
| + return true;
|
| +}
|
| +
|
| } // namespace blink
|
|
|