[tbb-commits] [tor-browser] 29/34: Bug 1755081 - Allow more containers to participate in FeaturePolicy r=smaug, ckerschb a=RyanVM

gitolite role git at cupani.torproject.org
Wed Apr 27 16:05:10 UTC 2022


This is an automated email from the git hooks/post-receive script.

richard pushed a commit to branch tor-browser-91.9esr-11.0-1
in repository tor-browser.

commit b5eee973c99f788f0e6ee3def15e153219be6be3
Author: Andreas Farre <farre at mozilla.com>
AuthorDate: Tue Apr 12 11:47:50 2022 +0000

    Bug 1755081 - Allow more containers to participate in FeaturePolicy r=smaug,ckerschb a=RyanVM
    
    Differential Revision: https://phabricator.services.mozilla.com/D142216
---
 dom/base/Document.cpp               | 19 +++++++++++++++++++
 dom/base/nsObjectLoadingContent.cpp | 31 +++++++++++++++++++++++++++++++
 dom/base/nsObjectLoadingContent.h   |  6 ++++++
 3 files changed, 56 insertions(+)

diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp
index 4152a6d69217a..5be50a0ba1876 100644
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
@@ -3692,6 +3692,20 @@ nsresult Document::InitCSP(nsIChannel* aChannel) {
   return NS_OK;
 }
 
+static Document* GetInProcessParentDocumentFrom(BrowsingContext* aContext) {
+  BrowsingContext* parentContext = aContext->GetParent();
+  if (!parentContext) {
+    return nullptr;
+  }
+
+  WindowContext* windowContext = parentContext->GetCurrentWindowContext();
+  if (!windowContext) {
+    return nullptr;
+  }
+
+  return windowContext->GetDocument();
+}
+
 already_AddRefed<dom::FeaturePolicy> Document::GetParentFeaturePolicy() {
   BrowsingContext* browsingContext = GetBrowsingContext();
   if (!browsingContext) {
@@ -3711,6 +3725,11 @@ already_AddRefed<dom::FeaturePolicy> Document::GetParentFeaturePolicy() {
     return do_AddRef(browsingContext->Canonical()->GetContainerFeaturePolicy());
   }
 
+  if (Document* parentDocument =
+          GetInProcessParentDocumentFrom(browsingContext)) {
+    return do_AddRef(parentDocument->FeaturePolicy());
+  }
+
   WindowContext* windowContext = browsingContext->GetCurrentWindowContext();
   if (!windowContext) {
     return nullptr;
diff --git a/dom/base/nsObjectLoadingContent.cpp b/dom/base/nsObjectLoadingContent.cpp
index db3297eb69e76..f8f4712c9e448 100644
--- a/dom/base/nsObjectLoadingContent.cpp
+++ b/dom/base/nsObjectLoadingContent.cpp
@@ -83,6 +83,7 @@
 #include "mozilla/IMEStateManager.h"
 #include "mozilla/widget/IMEData.h"
 #include "mozilla/IntegerPrintfMacros.h"
+#include "mozilla/dom/ContentChild.h"
 #include "mozilla/dom/HTMLObjectElementBinding.h"
 #include "mozilla/dom/HTMLEmbedElement.h"
 #include "mozilla/dom/HTMLObjectElement.h"
@@ -362,6 +363,8 @@ already_AddRefed<nsIDocShell> nsObjectLoadingContent::SetupDocShell(
     return nullptr;
   }
 
+  MaybeStoreCrossOriginFeaturePolicy();
+
   return docShell.forget();
 }
 
@@ -2364,3 +2367,31 @@ void nsObjectLoadingContent::SubdocumentIntrinsicSizeOrRatioChanged(
     sdf->SubdocumentIntrinsicSizeOrRatioChanged();
   }
 }
+
+void nsObjectLoadingContent::MaybeStoreCrossOriginFeaturePolicy() {
+  MOZ_DIAGNOSTIC_ASSERT(mFrameLoader);
+
+  // If the browsingContext is not ready (because docshell is dead), don't try
+  // to create one.
+  if (!mFrameLoader->IsRemoteFrame() && !mFrameLoader->GetExistingDocShell()) {
+    return;
+  }
+
+  RefPtr<BrowsingContext> browsingContext = mFrameLoader->GetBrowsingContext();
+
+  if (!browsingContext || !browsingContext->IsContentSubframe()) {
+    return;
+  }
+
+  nsCOMPtr<nsIContent> thisContent = AsContent();
+
+  if (!thisContent->IsInComposedDoc()) {
+    return;
+  }
+
+  FeaturePolicy* featurePolicy = thisContent->OwnerDoc()->FeaturePolicy();
+
+  if (ContentChild* cc = ContentChild::GetSingleton()) {
+    Unused << cc->SendSetContainerFeaturePolicy(browsingContext, featurePolicy);
+  }
+}
diff --git a/dom/base/nsObjectLoadingContent.h b/dom/base/nsObjectLoadingContent.h
index efe0b610be427..71c68ff5c9e20 100644
--- a/dom/base/nsObjectLoadingContent.h
+++ b/dom/base/nsObjectLoadingContent.h
@@ -490,6 +490,12 @@ class nsObjectLoadingContent : public nsImageLoadingContent,
   // Utility for firing an error event, if we're an <object>.
   void MaybeFireErrorEvent();
 
+  /**
+   * Store feature policy in container browsing context so that it can be
+   * accessed cross process.
+   */
+  void MaybeStoreCrossOriginFeaturePolicy();
+
   // The final listener for mChannel (uriloader, pluginstreamlistener, etc.)
   nsCOMPtr<nsIStreamListener> mFinalListener;
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the tbb-commits mailing list