mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-01 12:57:31 +09:00
Revert "Bug 1182569 - Skip security check for plugins using newstream attribute"
This reverts commit 5b0f4649b3fee771379af60ec04d43b8a525cf80.
This commit is contained in:
parent
9faac1b961
commit
ca1f03fbae
5 changed files with 24 additions and 47 deletions
|
|
@ -13888,8 +13888,7 @@ public:
|
||||||
const nsAString& aFileName,
|
const nsAString& aFileName,
|
||||||
nsIInputStream* aPostDataStream,
|
nsIInputStream* aPostDataStream,
|
||||||
nsIInputStream* aHeadersDataStream,
|
nsIInputStream* aHeadersDataStream,
|
||||||
bool aIsTrusted,
|
bool aIsTrusted);
|
||||||
nsIPrincipal* aTriggeringPrincipal);
|
|
||||||
|
|
||||||
NS_IMETHOD Run() override
|
NS_IMETHOD Run() override
|
||||||
{
|
{
|
||||||
|
|
@ -13905,7 +13904,7 @@ public:
|
||||||
mHandler->OnLinkClickSync(mContent, mURI,
|
mHandler->OnLinkClickSync(mContent, mURI,
|
||||||
mTargetSpec.get(), mFileName,
|
mTargetSpec.get(), mFileName,
|
||||||
mPostDataStream, mHeadersDataStream,
|
mPostDataStream, mHeadersDataStream,
|
||||||
nullptr, nullptr, mTriggeringPrincipal);
|
nullptr, nullptr);
|
||||||
}
|
}
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
@ -13920,7 +13919,6 @@ private:
|
||||||
nsCOMPtr<nsIContent> mContent;
|
nsCOMPtr<nsIContent> mContent;
|
||||||
PopupControlState mPopupState;
|
PopupControlState mPopupState;
|
||||||
bool mIsTrusted;
|
bool mIsTrusted;
|
||||||
nsCOMPtr<nsIPrincipal> mTriggeringPrincipal;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
OnLinkClickEvent::OnLinkClickEvent(nsDocShell* aHandler,
|
OnLinkClickEvent::OnLinkClickEvent(nsDocShell* aHandler,
|
||||||
|
|
@ -13930,8 +13928,7 @@ OnLinkClickEvent::OnLinkClickEvent(nsDocShell* aHandler,
|
||||||
const nsAString& aFileName,
|
const nsAString& aFileName,
|
||||||
nsIInputStream* aPostDataStream,
|
nsIInputStream* aPostDataStream,
|
||||||
nsIInputStream* aHeadersDataStream,
|
nsIInputStream* aHeadersDataStream,
|
||||||
bool aIsTrusted,
|
bool aIsTrusted)
|
||||||
nsIPrincipal* aTriggeringPrincipal)
|
|
||||||
: mHandler(aHandler)
|
: mHandler(aHandler)
|
||||||
, mURI(aURI)
|
, mURI(aURI)
|
||||||
, mTargetSpec(aTargetSpec)
|
, mTargetSpec(aTargetSpec)
|
||||||
|
|
@ -13941,7 +13938,6 @@ OnLinkClickEvent::OnLinkClickEvent(nsDocShell* aHandler,
|
||||||
, mContent(aContent)
|
, mContent(aContent)
|
||||||
, mPopupState(mHandler->mScriptGlobal->GetPopupControlState())
|
, mPopupState(mHandler->mScriptGlobal->GetPopupControlState())
|
||||||
, mIsTrusted(aIsTrusted)
|
, mIsTrusted(aIsTrusted)
|
||||||
, mTriggeringPrincipal(aTriggeringPrincipal)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -13952,8 +13948,7 @@ nsDocShell::OnLinkClick(nsIContent* aContent,
|
||||||
const nsAString& aFileName,
|
const nsAString& aFileName,
|
||||||
nsIInputStream* aPostDataStream,
|
nsIInputStream* aPostDataStream,
|
||||||
nsIInputStream* aHeadersDataStream,
|
nsIInputStream* aHeadersDataStream,
|
||||||
bool aIsTrusted,
|
bool aIsTrusted)
|
||||||
nsIPrincipal* aTriggeringPrincipal)
|
|
||||||
{
|
{
|
||||||
NS_ASSERTION(NS_IsMainThread(), "wrong thread");
|
NS_ASSERTION(NS_IsMainThread(), "wrong thread");
|
||||||
|
|
||||||
|
|
@ -13992,8 +13987,7 @@ nsDocShell::OnLinkClick(nsIContent* aContent,
|
||||||
|
|
||||||
nsCOMPtr<nsIRunnable> ev =
|
nsCOMPtr<nsIRunnable> ev =
|
||||||
new OnLinkClickEvent(this, aContent, aURI, target.get(), aFileName,
|
new OnLinkClickEvent(this, aContent, aURI, target.get(), aFileName,
|
||||||
aPostDataStream, aHeadersDataStream,
|
aPostDataStream, aHeadersDataStream, aIsTrusted);
|
||||||
aIsTrusted, aTriggeringPrincipal);
|
|
||||||
return NS_DispatchToCurrentThread(ev);
|
return NS_DispatchToCurrentThread(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -14005,8 +13999,7 @@ nsDocShell::OnLinkClickSync(nsIContent* aContent,
|
||||||
nsIInputStream* aPostDataStream,
|
nsIInputStream* aPostDataStream,
|
||||||
nsIInputStream* aHeadersDataStream,
|
nsIInputStream* aHeadersDataStream,
|
||||||
nsIDocShell** aDocShell,
|
nsIDocShell** aDocShell,
|
||||||
nsIRequest** aRequest,
|
nsIRequest** aRequest)
|
||||||
nsIPrincipal* aTriggeringPrincipal)
|
|
||||||
{
|
{
|
||||||
// Initialize the DocShell / Request
|
// Initialize the DocShell / Request
|
||||||
if (aDocShell) {
|
if (aDocShell) {
|
||||||
|
|
@ -14129,18 +14122,13 @@ nsDocShell::OnLinkClickSync(nsIContent* aContent,
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the triggeringPrincipal is not passed explicitly, then we
|
|
||||||
// fall back to using doc->NodePrincipal() as the triggeringPrincipal.
|
|
||||||
nsCOMPtr<nsIPrincipal> triggeringPrincipal =
|
|
||||||
aTriggeringPrincipal ? aTriggeringPrincipal
|
|
||||||
: aContent->NodePrincipal();
|
|
||||||
|
|
||||||
nsresult rv = InternalLoad(clonedURI, // New URI
|
nsresult rv = InternalLoad(clonedURI, // New URI
|
||||||
nullptr, // Original URI
|
nullptr, // Original URI
|
||||||
false, // LoadReplace
|
false, // LoadReplace
|
||||||
referer, // Referer URI
|
referer, // Referer URI
|
||||||
refererPolicy, // Referer policy
|
refererPolicy, // Referer policy
|
||||||
triggeringPrincipal,
|
aContent->NodePrincipal(), // Triggering is our node's
|
||||||
|
// principal
|
||||||
aContent->NodePrincipal(),
|
aContent->NodePrincipal(),
|
||||||
flags,
|
flags,
|
||||||
target, // Window target
|
target, // Window target
|
||||||
|
|
|
||||||
|
|
@ -201,8 +201,7 @@ public:
|
||||||
const nsAString& aFileName,
|
const nsAString& aFileName,
|
||||||
nsIInputStream* aPostDataStream,
|
nsIInputStream* aPostDataStream,
|
||||||
nsIInputStream* aHeadersDataStream,
|
nsIInputStream* aHeadersDataStream,
|
||||||
bool aIsTrusted,
|
bool aIsTrusted) override;
|
||||||
nsIPrincipal* aTriggeringPrincipal) override;
|
|
||||||
NS_IMETHOD OnLinkClickSync(nsIContent* aContent,
|
NS_IMETHOD OnLinkClickSync(nsIContent* aContent,
|
||||||
nsIURI* aURI,
|
nsIURI* aURI,
|
||||||
const char16_t* aTargetSpec,
|
const char16_t* aTargetSpec,
|
||||||
|
|
@ -210,8 +209,7 @@ public:
|
||||||
nsIInputStream* aPostDataStream = 0,
|
nsIInputStream* aPostDataStream = 0,
|
||||||
nsIInputStream* aHeadersDataStream = 0,
|
nsIInputStream* aHeadersDataStream = 0,
|
||||||
nsIDocShell** aDocShell = 0,
|
nsIDocShell** aDocShell = 0,
|
||||||
nsIRequest** aRequest = 0,
|
nsIRequest** aRequest = 0) override;
|
||||||
nsIPrincipal* aTriggeringPrincipal = nullptr) override;
|
|
||||||
NS_IMETHOD OnOverLink(nsIContent* aContent,
|
NS_IMETHOD OnOverLink(nsIContent* aContent,
|
||||||
nsIURI* aURI,
|
nsIURI* aURI,
|
||||||
const char16_t* aTargetSpec) override;
|
const char16_t* aTargetSpec) override;
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,6 @@ public:
|
||||||
* @param aFileName non-null when the link should be downloaded as the given file
|
* @param aFileName non-null when the link should be downloaded as the given file
|
||||||
* @param aHeadersDataStream ???
|
* @param aHeadersDataStream ???
|
||||||
* @param aIsTrusted false if the triggerer is an untrusted DOM event.
|
* @param aIsTrusted false if the triggerer is an untrusted DOM event.
|
||||||
* @param aTriggeringPrincipal, if not passed explicitly we fall back to
|
|
||||||
* the document's principal.
|
|
||||||
*/
|
*/
|
||||||
NS_IMETHOD OnLinkClick(nsIContent* aContent,
|
NS_IMETHOD OnLinkClick(nsIContent* aContent,
|
||||||
nsIURI* aURI,
|
nsIURI* aURI,
|
||||||
|
|
@ -46,8 +44,7 @@ public:
|
||||||
const nsAString& aFileName,
|
const nsAString& aFileName,
|
||||||
nsIInputStream* aPostDataStream,
|
nsIInputStream* aPostDataStream,
|
||||||
nsIInputStream* aHeadersDataStream,
|
nsIInputStream* aHeadersDataStream,
|
||||||
bool aIsTrusted,
|
bool aIsTrusted) = 0;
|
||||||
nsIPrincipal* aTriggeringPrincipal) = 0;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process a click on a link.
|
* Process a click on a link.
|
||||||
|
|
@ -64,8 +61,6 @@ public:
|
||||||
* @param aHeadersDataStream ???
|
* @param aHeadersDataStream ???
|
||||||
* @param aDocShell (out-param) the DocShell that the request was opened on
|
* @param aDocShell (out-param) the DocShell that the request was opened on
|
||||||
* @param aRequest the request that was opened
|
* @param aRequest the request that was opened
|
||||||
* @param aTriggeringPrincipal, if not passed explicitly we fall back to
|
|
||||||
* the document's principal.
|
|
||||||
*/
|
*/
|
||||||
NS_IMETHOD OnLinkClickSync(nsIContent* aContent,
|
NS_IMETHOD OnLinkClickSync(nsIContent* aContent,
|
||||||
nsIURI* aURI,
|
nsIURI* aURI,
|
||||||
|
|
@ -74,8 +69,7 @@ public:
|
||||||
nsIInputStream* aPostDataStream = 0,
|
nsIInputStream* aPostDataStream = 0,
|
||||||
nsIInputStream* aHeadersDataStream = 0,
|
nsIInputStream* aHeadersDataStream = 0,
|
||||||
nsIDocShell** aDocShell = 0,
|
nsIDocShell** aDocShell = 0,
|
||||||
nsIRequest** aRequest = 0,
|
nsIRequest** aRequest = 0) = 0;
|
||||||
nsIPrincipal* aTriggeringPrincipal = nullptr) = 0;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process a mouse-over a link.
|
* Process a mouse-over a link.
|
||||||
|
|
|
||||||
|
|
@ -5100,7 +5100,7 @@ nsContentUtils::TriggerLink(nsIContent *aContent, nsPresContext *aPresContext,
|
||||||
|
|
||||||
handler->OnLinkClick(aContent, aLinkURI,
|
handler->OnLinkClick(aContent, aLinkURI,
|
||||||
fileName.IsVoid() ? aTargetSpec.get() : EmptyString().get(),
|
fileName.IsVoid() ? aTargetSpec.get() : EmptyString().get(),
|
||||||
fileName, nullptr, nullptr, aIsTrusted, aContent->NodePrincipal());
|
fileName, nullptr, nullptr, aIsTrusted);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -535,6 +535,16 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL,
|
||||||
nsresult rv = NS_NewURI(getter_AddRefs(uri), aURL, baseURI);
|
nsresult rv = NS_NewURI(getter_AddRefs(uri), aURL, baseURI);
|
||||||
NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE);
|
NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
|
if (aDoCheckLoadURIChecks) {
|
||||||
|
nsCOMPtr<nsIScriptSecurityManager> secMan(
|
||||||
|
do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv));
|
||||||
|
NS_ENSURE_TRUE(secMan, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
|
rv = secMan->CheckLoadURIWithPrincipal(content->NodePrincipal(), uri,
|
||||||
|
nsIScriptSecurityManager::STANDARD);
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIInputStream> headersDataStream;
|
nsCOMPtr<nsIInputStream> headersDataStream;
|
||||||
if (aPostStream && aHeadersData) {
|
if (aPostStream && aHeadersData) {
|
||||||
if (!aHeadersDataLen)
|
if (!aHeadersDataLen)
|
||||||
|
|
@ -553,21 +563,8 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL,
|
||||||
Preferences::GetInt("privacy.popups.disable_from_plugins");
|
Preferences::GetInt("privacy.popups.disable_from_plugins");
|
||||||
nsAutoPopupStatePusher popupStatePusher((PopupControlState)blockPopups);
|
nsAutoPopupStatePusher popupStatePusher((PopupControlState)blockPopups);
|
||||||
|
|
||||||
|
|
||||||
// if security checks (in particular CheckLoadURIWithPrincipal) needs
|
|
||||||
// to be skipped we are creating a codebasePrincipal to make sure
|
|
||||||
// that security check succeeds. Please note that we do not want to
|
|
||||||
// fall back to using the systemPrincipal, because that would also
|
|
||||||
// bypass ContentPolicy checks which should still be enforced.
|
|
||||||
nsCOMPtr<nsIPrincipal> triggeringPrincipal;
|
|
||||||
if (!aDoCheckLoadURIChecks) {
|
|
||||||
mozilla::PrincipalOriginAttributes attrs =
|
|
||||||
BasePrincipal::Cast(content->NodePrincipal())->OriginAttributesRef();
|
|
||||||
triggeringPrincipal = BasePrincipal::CreateCodebasePrincipal(uri, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
rv = lh->OnLinkClick(content, uri, unitarget.get(), NullString(),
|
rv = lh->OnLinkClick(content, uri, unitarget.get(), NullString(),
|
||||||
aPostStream, headersDataStream, true, triggeringPrincipal);
|
aPostStream, headersDataStream, true);
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue