import changes from `dev' branch of rmottola/Arctic-Fox:

- bug 1204614 - use h2 per stream flow control to deal with suspended channels r=hurley (1f8f4fe7f1)
- bug 1142384 - eventtokenbucket thread management r=hurley (a7bbb17cf8)
- bug 1179560 - some 421 retries dont work r=hurley (57b9d738e7)
- bug 1187239 - ontransportstatus SENDING_TO should not use request stream re-entrantly r=hurley r=bz (ca9fe4e299)
- bug 1196882 - dont enforce h1 framing on non 2xx r=bagder (5fbafc06af)
- bug 1206771 - fix reentrantFlag compiler warning on >= beta r=jduell (de1fbf71cd)
- bug 1148237 restart verifier null pattern r=honzab (32953a08dd)
- Bug 1166349: Use a fallible allocation in nsXMLHttpRequest::StreamReaderFunc. r=smaug (36825e2213)
- Bug 1199796 - Refactor Request and XHR request method validation. r=nsm (95639c3097)
- Bug 1154411 - Do not close same fd twice r=bent (d92f48ce05)
- Bug 1199862 - In the case of a DivertToParent a message or error prompt may block in a OnStartRequest or OnDataAvailable and therefore we need to suspend receiving further OnDataAvailable or OnStopRequest, etc. r=jduell (05d42bb4ac)
- Bug 1206894 - Enable asynchronous dispatching of fetch events; r=jdm (e74982babf)
- Bug 1176073 - Missing mIPCClosed check in SendReportSecurityMessage. r=honza (369d25cf44)
- missing bits of Bug 1184971 - Expose cookieBehavior and cookieLifetimePolicy preference variants from nsICookieService. r=ehsan (311867e5b0)
- Bug 1184275 - Remove warnings that URI is not a file URI. r=jduell (19cde2bb7f)
- Bug 1184798 - Ensure workers loads are treated as non-subresource fetches. r=jdm (996df180be)
- Bug 1187217 - Fix deref nullptr loadInfo in nsDocShell::LoadStream. r=bz (6e734e7688)
- code style (9b783b1235)
- Bug 1184260 - Remove warning if GetRootScrollFrame returns null in GetCurScrollPos. r=smaug (7d667886f5)
- Bug 1196290 - Do not update orientation lock when app docshell is activated. r=smaug (1c42abec55)
- Bug 1191178 - Part 1: Add a function to check frame timing preference value. r=smaug (cb6fa1b1e4)
- Bug 1191178 - Part 0: Fix unified build in dom/base. Add missing headers and sorting them. r=smaug (64814477f7)
- Bug 1191178 - Part 0.1: GetSriLog() is needed to avoid unified build failure. r=francois (80e29ae34a)
- Bug 1191178 - Part 0.2: Include nsBaseHashTable in nsScriptNameSpaceManager.h explicitly to avoid unified build errors. r=njn (cf98949e2d)
- Bug 1191178 - Part 2: Add PerformanceRenderTiming and PerformanceCompositeTiming. r=smaug (954df4283c)
- Bug 1163545 - Bypass AppCache completely when Service Workers supported & registered, r=jdm (2ee23b3ee9)
- Bug 1192946 - Use channel->ascynOpen2 in widget/windows/WinUtils.cpp (r=sicking) (931b4d6bee)
- Bug 1048048 - add preload content policy types for images (r=seth) (824b404ee1)
- Bug 895274 part.11 Rename NS_KEY_DOWN to eKeyDown r=smaug (411fd23491)
- Bug 895274 part.12 Rename NS_KEY_BEFORE_DOWN to eBeforeKeyDown r=smaug (2246daafa8)
- Bug 895274 part.13 Rename NS_KEY_AFTERE_DOWN to eAfterKeyDown r=smaug (3be7824e25)
- Bug 895274 part.14 Rename NS_KEY_BEFORE_UP to eBeforeKeyUp r=smaug (a93199c8c9)
- Bug 895274 part.15 Rename NS_KEY_AFTER_UP to eAfterKeyUp r=smaug (57d0905783)
- Bug 895274 part.16 Rename NS_RESIZE to eResize r=smaug (7833338de2)
- Bug 895274 part.17 Rename NS_SCROLL_EVENT to eScroll r=smaug (ff6d0cdfd4)
- Bug 895274 part.95 Rename NS_MUTATION_NODEINSERTEDINTODOCUMENT to eLegacyNodeInsertedIntoDocument r=smaug (3f3d730ee2)
- Bug 895274 part.96 Rename NS_MUTATION_START to eLegacyMutationEventFirst r=smaug (98c31b5e38)
- Bug 895274 part.97 Rename NS_MUTATION_NODEREMOVEDFROMDOCUMENT to eLegacyNodeRemovedFromDocument r=smaug (1ba815caae)
- Bug 895274 part.98 Rename NS_MUTATION_CHARACTERDATAMODIFIED to eLegacyCharacterDataModified r=smaug (16e625cbb6)
- Bug 895274 part.99 Rename NS_MUTATION_SUBTREEMODIFIED to eLegacySubtreeModified r=smaug (7ec172cef7)
- Bug 895274 part.100 Rename NS_MUTATION_NODEINSERTED to eLegacyNodeInserted r=smaug (a4d22eb9cd)
- Bug 895274 part.101 Rename NS_MUTATION_NODEREMOVED to eLegacyNodeRemoved r=smaug (746766bc0a)
- Bug 895274 part.102 Rename NS_MUTATION_ATTRMODIFIED to eLegacyAttrModified r=smaug (eef12e69bc)
- Bug 895274 part.103 Rename NS_MUTATION_END to eLegacyMutationEventLast r=smaug (d3b375d3fe)
- Bug 895274 part.149 Rename NS_USER_DEFINED_EVENT to eUnidentifiedEvent r=smaug (0fe272aa46)
- Bug 1205533 - Fix and disallow warnings in gfx/qcms/. r=jrmuizel. (6cf4efeb47)
- Bug 1188347 - Properly handle OOM during script cloning. r=jandem (93934b2aff)
- Bug 1188347 - Part 2: Fix bustage. r=jandem (61fcb2b899)
- Bug 1175442 Make nsContentUtils::SendKeyEvent() take nsIWidget* rather than nsCOMPtr<nsIWidget> r=smaug (2115e04234)
- Bug 1188347 - Part 3: Only run test relying on debug builds in debug builds. r=bustage (25e84b0a2c)
- Bug 1188347 - Part 4: Root LazyScript* in CloneScriptIntoFunction. r=bustage (18dd9e84ca)
- spacing (b45fe5d45b)
- Bug 1162791 - Add-ons should be enabled by default when installed r=ferjm (d5062d5592)
- Bug 1173666 - Expose the URL of the page that calls mozApps.connect to the app exposing the port. r=ferjm, r=baku (74b106fac5)
- Bug 1191516 - Make checkInstalled return a DOMApplication object. r=fabrice (01dfb29190)
This commit is contained in:
2022-03-31 11:14:57 +08:00
parent e76a0e8c24
commit 50e77397ba
128 changed files with 1747 additions and 511 deletions
+88 -23
View File
@@ -80,6 +80,7 @@
#include "IHistory.h"
#include "nsViewSourceHandler.h"
#include "nsWhitespaceTokenizer.h"
#include "nsICookieService.h"
// we want to explore making the document own the load group
// so we can associate the document URI with the load group.
@@ -210,10 +211,6 @@
#endif
#include "mozIThirdPartyUtil.h"
// Values for the network.cookie.cookieBehavior pref are documented in
// nsCookieService.cpp
#define COOKIE_BEHAVIOR_ACCEPT 0 // Allow all cookies.
#define COOKIE_BEHAVIOR_REJECT_FOREIGN 1 // Reject all third-party cookies.
static NS_DEFINE_CID(kAppShellCID, NS_APPSHELL_CID);
@@ -233,12 +230,11 @@ using namespace mozilla;
using namespace mozilla::dom;
using mozilla::dom::workers::ServiceWorkerManager;
// True means sUseErrorPages and sInterceptionEnabled has been added to
// True means sUseErrorPages has been added to
// preferences var cache.
static bool gAddedPreferencesVarCache = false;
bool nsDocShell::sUseErrorPages = false;
bool nsDocShell::sInterceptionEnabled = false;
// Number of documents currently loading
static int32_t gNumberOfDocumentsLoading = 0;
@@ -1614,20 +1610,22 @@ nsDocShell::LoadStream(nsIInputStream* aStream, nsIURI* aURI,
}
uint32_t loadType = LOAD_NORMAL;
nsCOMPtr<nsIPrincipal> requestingPrincipal;
if (aLoadInfo) {
nsDocShellInfoLoadType lt = nsIDocShellLoadInfo::loadNormal;
(void)aLoadInfo->GetLoadType(&lt);
// Get the appropriate LoadType from nsIDocShellLoadInfo type
loadType = ConvertDocShellLoadInfoToLoadType(lt);
nsCOMPtr<nsISupports> owner;
aLoadInfo->GetOwner(getter_AddRefs(owner));
requestingPrincipal = do_QueryInterface(owner);
}
NS_ENSURE_SUCCESS(Stop(nsIWebNavigation::STOP_NETWORK), NS_ERROR_FAILURE);
mLoadType = loadType;
nsCOMPtr<nsISupports> owner;
aLoadInfo->GetOwner(getter_AddRefs(owner));
nsCOMPtr<nsIPrincipal> requestingPrincipal = do_QueryInterface(owner);
if (!requestingPrincipal) {
requestingPrincipal = nsContentUtils::GetSystemPrincipal();
}
@@ -5650,9 +5648,6 @@ nsDocShell::Create()
Preferences::AddBoolVarCache(&sUseErrorPages,
"browser.xul.error_pages.enabled",
mUseErrorPages);
Preferences::AddBoolVarCache(&sInterceptionEnabled,
"dom.serviceWorkers.interception.enabled",
false);
gAddedPreferencesVarCache = true;
}
@@ -6081,7 +6076,10 @@ nsDocShell::SetIsActive(bool aIsActive)
if (mScriptGlobal) {
mScriptGlobal->SetIsBackground(!aIsActive);
if (nsCOMPtr<nsIDocument> doc = mScriptGlobal->GetExtantDoc()) {
if (aIsActive) {
// Update orientation when the top-level browsing context becomes active.
// We make an exception for apps because they currently rely on
// orientation locks persisting across browsing contexts.
if (aIsActive && !GetIsApp()) {
nsCOMPtr<nsIDocShellTreeItem> parent;
GetSameTypeParent(getter_AddRefs(parent));
if (!parent) {
@@ -6399,7 +6397,9 @@ nsDocShell::GetCurScrollPos(int32_t aScrollOrientation, int32_t* aCurPos)
NS_ENSURE_ARG_POINTER(aCurPos);
nsIScrollableFrame* sf = GetRootScrollFrame();
NS_ENSURE_TRUE(sf, NS_ERROR_FAILURE);
if (!sf) {
return NS_ERROR_FAILURE;
}
nsPoint pt = sf->GetScrollPosition();
@@ -10299,7 +10299,9 @@ nsDocShell::InternalLoad2(nsIURI* aURI,
// lock the orientation of the document to the document's default
// orientation. We don't explicitly check for a top-level browsing context
// here because orientation is only set on top-level browsing contexts.
if (OrientationLock() != eScreenOrientation_None) {
// We make an exception for apps because they currently rely on
// orientation locks persisting across browsing contexts.
if (OrientationLock() != eScreenOrientation_None && !GetIsApp()) {
#ifdef DEBUG
nsCOMPtr<nsIDocShellTreeItem> parent;
GetSameTypeParent(getter_AddRefs(parent));
@@ -14152,11 +14154,12 @@ nsDocShell::MaybeNotifyKeywordSearchLoading(const nsString& aProvider,
NS_IMETHODIMP
nsDocShell::ShouldPrepareForIntercept(nsIURI* aURI, bool aIsNavigate,
nsContentPolicyType aLoadContentType,
bool* aShouldIntercept)
{
*aShouldIntercept = false;
// Preffed off.
if (!sInterceptionEnabled) {
if (!nsContentUtils::ServiceWorkerInterceptionEnabled()) {
return NS_OK;
}
@@ -14191,17 +14194,20 @@ nsDocShell::ShouldPrepareForIntercept(nsIURI* aURI, bool aIsNavigate,
bool isThirdPartyURI = true;
result = thirdPartyUtil->IsThirdPartyURI(mCurrentURI, aURI,
&isThirdPartyURI);
NS_ENSURE_SUCCESS(result, result);
if (NS_FAILED(result)) {
return result;
}
if (isThirdPartyURI &&
(Preferences::GetInt("network.cookie.cookieBehavior",
COOKIE_BEHAVIOR_ACCEPT) ==
COOKIE_BEHAVIOR_REJECT_FOREIGN)) {
nsICookieService::BEHAVIOR_ACCEPT) ==
nsICookieService::BEHAVIOR_REJECT_FOREIGN)) {
return NS_OK;
}
}
}
if (aIsNavigate) {
if (aIsNavigate || nsContentUtils::IsWorkerLoad(aLoadContentType)) {
OriginAttributes attrs(GetAppId(), GetIsInBrowserElement());
*aShouldIntercept = swm->IsAvailable(attrs, aURI);
return NS_OK;
@@ -14221,8 +14227,55 @@ nsDocShell::ShouldPrepareForIntercept(nsIURI* aURI, bool aIsNavigate,
return NS_OK;
}
namespace {
class FetchEventDispatcher final : public nsIFetchEventDispatcher
{
public:
FetchEventDispatcher(nsIInterceptedChannel* aChannel,
nsIRunnable* aContinueRunnable)
: mChannel(aChannel)
, mContinueRunnable(aContinueRunnable)
{
}
NS_DECL_ISUPPORTS
NS_DECL_NSIFETCHEVENTDISPATCHER
private:
~FetchEventDispatcher()
{
}
nsCOMPtr<nsIInterceptedChannel> mChannel;
nsCOMPtr<nsIRunnable> mContinueRunnable;
};
NS_IMPL_ISUPPORTS(FetchEventDispatcher, nsIFetchEventDispatcher)
NS_IMETHODIMP
nsDocShell::ChannelIntercepted(nsIInterceptedChannel* aChannel)
FetchEventDispatcher::Dispatch()
{
nsRefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
if (!swm) {
mChannel->Cancel(NS_ERROR_INTERCEPTION_FAILED);
return NS_OK;
}
ErrorResult error;
swm->DispatchPreparedFetchEvent(mChannel, mContinueRunnable, error);
if (NS_WARN_IF(error.Failed())) {
return error.StealNSResult();
}
return NS_OK;
}
}
NS_IMETHODIMP
nsDocShell::ChannelIntercepted(nsIInterceptedChannel* aChannel,
nsIFetchEventDispatcher** aFetchDispatcher)
{
nsRefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
if (!swm) {
@@ -14234,9 +14287,15 @@ nsDocShell::ChannelIntercepted(nsIInterceptedChannel* aChannel)
nsresult rv = aChannel->GetIsNavigation(&isNavigation);
NS_ENSURE_SUCCESS(rv, rv);
nsContentPolicyType loadType;
rv = aChannel->GetInternalContentPolicyType(&loadType);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIDocument> doc;
if (!isNavigation) {
bool isSubresourceLoad = !isNavigation &&
!nsContentUtils::IsWorkerLoad(loadType);
if (isSubresourceLoad) {
doc = GetDocument();
if (!doc) {
return NS_ERROR_NOT_AVAILABLE;
@@ -14248,11 +14307,17 @@ nsDocShell::ChannelIntercepted(nsIInterceptedChannel* aChannel)
OriginAttributes attrs(GetAppId(), GetIsInBrowserElement());
ErrorResult error;
swm->DispatchFetchEvent(attrs, doc, aChannel, isReload, error);
nsCOMPtr<nsIRunnable> runnable =
swm->PrepareFetchEvent(attrs, doc, aChannel, isReload, isSubresourceLoad, error);
if (NS_WARN_IF(error.Failed())) {
return error.StealNSResult();
}
MOZ_ASSERT(runnable);
nsRefPtr<FetchEventDispatcher> dispatcher =
new FetchEventDispatcher(aChannel, runnable);
dispatcher.forget(aFetchDispatcher);
return NS_OK;
}