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

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..cb505efc816098d156bd49a856750f2cb47afbd2 100644
--- a/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp
@@ -39,6 +39,7 @@ inline HTMLIFrameElement::HTMLIFrameElement(Document& document)
: HTMLFrameElementBase(iframeTag, document)
, m_didLoadNonEmptyDocument(false)
, m_sandbox(HTMLIFrameElementSandbox::create(this))
+ , m_permissions(HTMLIFrameElementPermissions::create(this))
sof 2016/06/27 08:38:52 As this isn't commonly accessed (or enabled by def
raymes 2016/06/28 01:19:03 Done.
, m_referrerPolicy(ReferrerPolicyDefault)
{
}
@@ -48,8 +49,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 +62,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 +115,8 @@ void HTMLIFrameElement::parseAttribute(const QualifiedName& name, const AtomicSt
m_allowFullscreen = !value.isNull();
if (m_allowFullscreen != oldAllowFullscreen)
frameOwnerPropertiesChanged();
+ } else if (name == permissionsAttr) {
+ 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 (!RuntimeEnabledFeatures::permissionDelegationEnabled())
+ 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));
« 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