Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Unified Diff: third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp

Issue 2011763006: Add an iframe permissions= attribute for implementing permission delegation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permission-delegation-1-flag
Patch Set: Blink-side Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLIFrameElement.h ('k') | third_party/WebKit/Source/core/html/HTMLIFrameElement.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698