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

Unified Diff: third_party/WebKit/Source/core/dom/Fullscreen.cpp

Issue 2499373002: Implementation for feature policy - fullscreen (Closed)
Patch Set: Bug fix: handling the case when frame parent does not exist Created 4 years 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/dom/Fullscreen.cpp
diff --git a/third_party/WebKit/Source/core/dom/Fullscreen.cpp b/third_party/WebKit/Source/core/dom/Fullscreen.cpp
index ff1331bd4cadc423dc311e1626746ce7ce733867..d3539bd4f9210ac1e77848dd3e29ac1049c4f4a1 100644
--- a/third_party/WebKit/Source/core/dom/Fullscreen.cpp
+++ b/third_party/WebKit/Source/core/dom/Fullscreen.cpp
@@ -29,6 +29,7 @@
#include "core/dom/Fullscreen.h"
+#include "bindings/core/v8/ConditionalFeatures.h"
#include "core/dom/Document.h"
#include "core/dom/ElementTraversal.h"
#include "core/dom/StyleEngine.h"
@@ -100,10 +101,43 @@ bool allowedToRequestFullscreen(Document& document) {
}
// https://fullscreen.spec.whatwg.org/#fullscreen-is-supported
-bool fullscreenIsSupported(const Document& document) {
+// TODO(lunalu): update the placement of the feature policy code once it is in
+// https://fullscreen.spec.whatwg.org/.
+bool fullscreenIsSupported(Document& document) {
+ LocalFrame* frame = document.frame();
+ if (!frame)
+ return false;
+
// Fullscreen is supported if there is no previously-established user
// preference, security risk, or platform limitation.
- return !document.settings() || document.settings()->fullscreenSupported();
+ bool fullscreenSupported =
+ !document.settings() || document.settings()->fullscreenSupported();
+
+ if (!RuntimeEnabledFeatures::featurePolicyEnabled()) {
+ return fullscreenSupported;
+ }
+
+ // TODO(lunalu): clean all of this up once iframe attributes are supported
+ // for feature policy.
+ if (Frame* parent = frame->tree().parent()) {
+ // If FeaturePolicy is enabled, check the fullscreen is not disabled by
+ // policy in the parent frame.
+ if (fullscreenSupported &&
+ parent->securityContext()->getFeaturePolicy()->isFeatureEnabled(
foolip 2016/12/07 16:09:25 I was working on https://codereview.chromium.org/2
+ kFullscreenFeature)) {
+ return true;
+ }
+ }
+ // Even if the iframe allowfullscreen attribute is not present, allow
+ // fullscreen to be enabled by feature policy.
+ else if (isFeatureEnabledInFrame(kFullscreenFeature, frame)) {
+ return true;
+ }
+
+ document.addConsoleMessage(ConsoleMessage::create(
+ JSMessageSource, WarningMessageLevel,
+ "Fullscreen API is disabled by feature policy for this frame"));
+ return false;
}
// https://fullscreen.spec.whatwg.org/#fullscreen-element-ready-check

Powered by Google App Engine
This is Rietveld 408576698