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

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: 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..f2504d24da24ee7e1b521a6464464f8417e2218a 100644
--- a/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp
@@ -33,12 +33,59 @@
namespace blink {
+namespace {
+
+class SandboxObserver : public GarbageCollected<SandboxObserver>, public DOMTokenListObserver {
+ USING_GARBAGE_COLLECTED_MIXIN(SandboxObserver);
+public:
+ SandboxObserver(HTMLIFrameElement* element) : m_element(element) {}
+
+ void valueWasSet() override
+ {
+ m_element->sandboxValueWasSet();
+ }
+
+ DEFINE_INLINE_VIRTUAL_TRACE()
+ {
+ visitor->trace(m_element);
+ DOMTokenListObserver::trace(visitor);
+ }
+
+private:
+ Member<HTMLIFrameElement> m_element;
+};
+
+class PermissionsObserver : public GarbageCollected<PermissionsObserver>, public DOMTokenListObserver {
+ USING_GARBAGE_COLLECTED_MIXIN(PermissionsObserver);
+public:
+ PermissionsObserver(HTMLIFrameElement* element) : m_element(element)
+ {
+ }
+
+ void valueWasSet() override
+ {
+ m_element->permissionsValueWasSet();
+ }
+
+ DEFINE_INLINE_VIRTUAL_TRACE()
+ {
+ visitor->trace(m_element);
+ DOMTokenListObserver::trace(visitor);
+ }
+
+private:
+ Member<HTMLIFrameElement> m_element;
+};
+
+} // namespace
+
using namespace HTMLNames;
inline HTMLIFrameElement::HTMLIFrameElement(Document& document)
: HTMLFrameElementBase(iframeTag, document)
, m_didLoadNonEmptyDocument(false)
- , m_sandbox(HTMLIFrameElementSandbox::create(this))
+ , m_sandbox(HTMLIFrameElementSandbox::create(new SandboxObserver(this)))
+ , m_permissions(HTMLIFrameElementPermissions::create(new PermissionsObserver(this)))
, m_referrerPolicy(ReferrerPolicyDefault)
{
}
@@ -48,8 +95,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 +108,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 +161,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 +201,17 @@ bool HTMLIFrameElement::isInteractiveContent() const
return true;
}
-void HTMLIFrameElement::valueWasSet()
+void HTMLIFrameElement::permissionsValueWasSet()
dominicc (has gone to gerrit) 2016/06/17 04:55:06 Um, I might have missed something but it looks lik
raymes 2016/06/22 06:43:32 Thanks for catching this - I had assumed that some
+{
+ 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