mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:30:27 +00:00
import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1137653: Correct the shape of the data object sent over if there are are crashes or the packet is malformed; r=jgriffin (d05804fe4)
- Bug 1121577 - Unset pref at delete_session, r=dburns (d2cefee52)
- Bug 1144907 - Restore previous context after calling marionette's gather_debug. r=davehunt (2d35526d2)
- Bug 1135846 - Expose marionette's actions code to chrome scope where applicable. r=dburns (2c91389b5)
- Bug 1118313 - newSession looks for non-conforming session_id property on Command. r=dburns (d72f256ec)
- Bug 1107706: Part 1: Change context from strings to enum (d4936c869)
- Bug 1107706: Part 2: Add error module and WebDriver error objects (95a58e4fa)
- Bug 1107706: Part 3: Add a command processor to Marionette (4ed444206)
- Bug 1107706: Part 4: Add dispatching mechanism to encapsulate connection (5a0cf4bfa)
- Bug 1107706: Part 5: Refactor Marionette chrome/content communication (a110867e3)
- Bug 1107706: Part 6: Make SpecialPowersError a prototypal Error (bebfc4e13)
- Bug 1107706: Part 7: Add timeout test for async scripts (795921b56)
- Bug 1107706: Part 8: Adapt emulator callbacks (4f0ec4ea3)
- Bug 1165395 Test Cache API after QuotaManager reset. r=janv (27ffd1273)
- Bug 1154325 P1 Add convenience routines to bind and get Blobs as strings. r=asuth (df1f9930a)
- Bug 1154325 P2 Use Blobs for CacheStorage keys to avoid encoding issues. r=ehsan (625588969)
- Bug 1179063 - Cleanup: Rename scopal back to scopeStmt. (r=me) (eaa5d8e3a)
- pointer style (39588e254)
- pointer style (7be6abefc)
- Bug 1162342 Enable sqlite WAL transactions in Cache API. r=ehsan (60a767033)
- Bug 1130452 - Remove support for the prefixMatch option in the service worker cache code; r=bkelly,baku (48d4d62f2)
- Bug 1166577 Use named sqlite params in Cache API code. r=ehsan (a0cbc5674)
- Bug 1166038 De-duplicate security info stored in the Cache API. r=ehsan (cdb8e8396)
- Bug 1166911 Modify Cache API sqlite code to use IS NULL literal when comparing an empty key. r=ehsan (a893706bf)
- Bug 1164620 - Part 1: Remove instances of #ifdef PR_LOGGING in various places. r=froydnj (69f3becd3)
- Bug 1161684 - Allow JAR channels to be intercepted by service workers. r=jdm (292f83299)
- Bug 1146169 - Check mChannel for null-ness in nsIInterceptedChannel::SetSecurityInfo(); r=jdm (9ed238664)
- Bug 1168208 - Refactor the existing logic for syncing the security info between Response and channel objects into a new helper class; r=nsm,jdm,bkelly (ea8852934)
- pointer style (b6ada460f)
- Bug 1163423 - Introduce JS_HasOwnProperty. r=bhackett (c189e58f0)
- pointer style (4693171b0)
- Bug 1163423 - Use JS_HasOwnProperty in WrapperAnswer::RecvHasOwn. r=billm (5029c2787)
- Bug 1168152 P1 Use a smaller sqlite page size and a growth increment in Cache. r=ehsan (9ad7f999f)
- Bug 1120501 P1 Make it easier to use Promise::All() from C++ code. r=nsm (95d1d5e2f)
- Bug 1120501 P2 Move Cache Add/AddAll logic to child process. r=ehsan,smaug (c71f9c49b)
- Bug 1168152 P2 Use a wrapper mozIStorageConnection for shared Cache connections. r=ehsan (f930635ac)
- Bug 1168152 P3 Perform incremental vacuum at tail end of Cache db connections. r=ehsan (df76df80c)
- Bug 1168152 P4 Add a test to verify Cache incremental vacuum works. r=ehsan (320d50436)
- Bug 1168152 P5 Follow-up to use 32kb growth size as intended in previous patches. r=me (92e2d3f27)
- Bug 1144236 - Add tests for the ignoreMethod match mode in DOM cache; r=bkelly (795a31d3c)
- Bug 1150001 - Cache API should not return Response body when matching Request with HEAD method. r=bkelly (690927f85)
This commit is contained in:
Vendored
+75
-100
@@ -15,7 +15,6 @@
|
||||
#include "mozilla/dom/cache/CacheTypes.h"
|
||||
#include "mozilla/dom/cache/ReadStream.h"
|
||||
#include "mozilla/ipc/BackgroundChild.h"
|
||||
#include "mozilla/ipc/FileDescriptorSetChild.h"
|
||||
#include "mozilla/ipc/PBackgroundChild.h"
|
||||
#include "mozilla/ipc/PFileDescriptorSetChild.h"
|
||||
#include "mozilla/ipc/InputStreamUtils.h"
|
||||
@@ -30,85 +29,16 @@
|
||||
#include "nsCRT.h"
|
||||
#include "nsHttp.h"
|
||||
|
||||
namespace {
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
namespace cache {
|
||||
|
||||
using mozilla::ErrorResult;
|
||||
using mozilla::unused;
|
||||
using mozilla::void_t;
|
||||
using mozilla::dom::InternalHeaders;
|
||||
using mozilla::dom::cache::CacheReadStream;
|
||||
using mozilla::dom::cache::HeadersEntry;
|
||||
using mozilla::ipc::BackgroundChild;
|
||||
using mozilla::ipc::FileDescriptor;
|
||||
using mozilla::ipc::PBackgroundChild;
|
||||
using mozilla::ipc::PFileDescriptorSetChild;
|
||||
|
||||
// Utility function to remove the fragment from a URL, check its scheme, and optionally
|
||||
// provide a URL without the query. We're not using nsIURL or URL to do this because
|
||||
// they require going to the main thread.
|
||||
static void
|
||||
ProcessURL(nsAString& aUrl, bool* aSchemeValidOut,
|
||||
nsAString* aUrlWithoutQueryOut, ErrorResult& aRv)
|
||||
{
|
||||
NS_ConvertUTF16toUTF8 flatURL(aUrl);
|
||||
const char* url = flatURL.get();
|
||||
|
||||
// off the main thread URL parsing using nsStdURLParser.
|
||||
nsCOMPtr<nsIURLParser> urlParser = new nsStdURLParser();
|
||||
|
||||
uint32_t pathPos;
|
||||
int32_t pathLen;
|
||||
uint32_t schemePos;
|
||||
int32_t schemeLen;
|
||||
aRv = urlParser->ParseURL(url, flatURL.Length(), &schemePos, &schemeLen,
|
||||
nullptr, nullptr, // ignore authority
|
||||
&pathPos, &pathLen);
|
||||
if (NS_WARN_IF(aRv.Failed())) { return; }
|
||||
|
||||
if (aSchemeValidOut) {
|
||||
nsAutoCString scheme(Substring(flatURL, schemePos, schemeLen));
|
||||
*aSchemeValidOut = scheme.LowerCaseEqualsLiteral("http") ||
|
||||
scheme.LowerCaseEqualsLiteral("https") ||
|
||||
scheme.LowerCaseEqualsLiteral("app");
|
||||
}
|
||||
|
||||
uint32_t queryPos;
|
||||
int32_t queryLen;
|
||||
uint32_t refPos;
|
||||
int32_t refLen;
|
||||
|
||||
aRv = urlParser->ParsePath(url + pathPos, flatURL.Length() - pathPos,
|
||||
nullptr, nullptr, // ignore filepath
|
||||
&queryPos, &queryLen,
|
||||
&refPos, &refLen);
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Remove this once Request/Response properly strip the fragment (bug 1110476)
|
||||
if (refLen >= 0) {
|
||||
// ParsePath gives us ref position relative to the start of the path
|
||||
refPos += pathPos;
|
||||
|
||||
aUrl = Substring(aUrl, 0, refPos - 1);
|
||||
}
|
||||
|
||||
if (!aUrlWithoutQueryOut) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (queryLen < 0) {
|
||||
*aUrlWithoutQueryOut = aUrl;
|
||||
return;
|
||||
}
|
||||
|
||||
// ParsePath gives us query position relative to the start of the path
|
||||
queryPos += pathPos;
|
||||
|
||||
// We want everything before the query sine we already removed the trailing
|
||||
// fragment
|
||||
*aUrlWithoutQueryOut = Substring(aUrl, 0, queryPos - 1);
|
||||
}
|
||||
namespace {
|
||||
|
||||
static bool
|
||||
HasVaryStar(mozilla::dom::InternalHeaders* aHeaders)
|
||||
@@ -174,18 +104,6 @@ ToHeadersEntryList(nsTArray<HeadersEntry>& aOut, InternalHeaders* aHeaders)
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
namespace cache {
|
||||
|
||||
using mozilla::ipc::BackgroundChild;
|
||||
using mozilla::ipc::FileDescriptor;
|
||||
using mozilla::ipc::FileDescriptorSetChild;
|
||||
using mozilla::ipc::PFileDescriptorSetChild;
|
||||
using mozilla::ipc::PBackgroundChild;
|
||||
using mozilla::ipc::OptionalFileDescriptorSet;
|
||||
|
||||
|
||||
already_AddRefed<InternalRequest>
|
||||
TypeUtils::ToInternalRequest(const RequestOrUSVString& aIn,
|
||||
BodyAction aBodyAction, ErrorResult& aRv)
|
||||
@@ -225,9 +143,8 @@ TypeUtils::ToInternalRequest(const OwningRequestOrUSVString& aIn,
|
||||
|
||||
void
|
||||
TypeUtils::ToCacheRequest(CacheRequest& aOut, InternalRequest* aIn,
|
||||
BodyAction aBodyAction,
|
||||
ReferrerAction aReferrerAction,
|
||||
SchemeAction aSchemeAction, ErrorResult& aRv)
|
||||
BodyAction aBodyAction, SchemeAction aSchemeAction,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
MOZ_ASSERT(aIn);
|
||||
|
||||
@@ -249,16 +166,8 @@ TypeUtils::ToCacheRequest(CacheRequest& aOut, InternalRequest* aIn,
|
||||
aRv.ThrowTypeError(MSG_INVALID_URL_SCHEME, &label, &aOut.url());
|
||||
return;
|
||||
}
|
||||
|
||||
if (aSchemeAction == NetworkErrorOnInvalidScheme) {
|
||||
aRv.Throw(NS_ERROR_DOM_NETWORK_ERR);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (aReferrerAction == ExpandReferrer) {
|
||||
UpdateRequestReferrer(GetGlobalObject(), aIn);
|
||||
}
|
||||
aIn->GetReferrer(aOut.referrer());
|
||||
|
||||
nsRefPtr<InternalHeaders> headers = aIn->Headers();
|
||||
@@ -315,7 +224,7 @@ TypeUtils::ToCacheResponseWithoutBody(CacheResponse& aOut,
|
||||
}
|
||||
ToHeadersEntryList(aOut.headers(), headers);
|
||||
aOut.headersGuard() = headers->Guard();
|
||||
aOut.securityInfo() = aIn.GetSecurityInfo();
|
||||
aOut.channelInfo() = aIn.GetChannelInfo().AsIPCChannelInfo();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -352,7 +261,6 @@ TypeUtils::ToCacheQueryParams(CacheQueryParams& aOut,
|
||||
aOut.ignoreSearch() = aIn.mIgnoreSearch;
|
||||
aOut.ignoreMethod() = aIn.mIgnoreMethod;
|
||||
aOut.ignoreVary() = aIn.mIgnoreVary;
|
||||
aOut.prefixMatch() = aIn.mPrefixMatch;
|
||||
aOut.cacheNameSet() = aIn.mCacheName.WasPassed();
|
||||
if (aOut.cacheNameSet()) {
|
||||
aOut.cacheName() = aIn.mCacheName.Value();
|
||||
@@ -382,7 +290,7 @@ TypeUtils::ToResponse(const CacheResponse& aIn)
|
||||
ir->Headers()->Fill(*internalHeaders, result);
|
||||
MOZ_ASSERT(!result.Failed());
|
||||
|
||||
ir->SetSecurityInfo(aIn.securityInfo());
|
||||
ir->InitChannelInfo(aIn.channelInfo());
|
||||
|
||||
nsCOMPtr<nsIInputStream> stream = ReadStream::Create(aIn.body());
|
||||
ir->SetBody(stream);
|
||||
@@ -466,6 +374,73 @@ TypeUtils::ToInternalHeaders(const nsTArray<HeadersEntry>& aHeadersEntryList,
|
||||
return ref.forget();
|
||||
}
|
||||
|
||||
// Utility function to remove the fragment from a URL, check its scheme, and optionally
|
||||
// provide a URL without the query. We're not using nsIURL or URL to do this because
|
||||
// they require going to the main thread.
|
||||
// static
|
||||
void
|
||||
TypeUtils::ProcessURL(nsAString& aUrl, bool* aSchemeValidOut,
|
||||
nsAString* aUrlWithoutQueryOut, ErrorResult& aRv)
|
||||
{
|
||||
NS_ConvertUTF16toUTF8 flatURL(aUrl);
|
||||
const char* url = flatURL.get();
|
||||
|
||||
// off the main thread URL parsing using nsStdURLParser.
|
||||
nsCOMPtr<nsIURLParser> urlParser = new nsStdURLParser();
|
||||
|
||||
uint32_t pathPos;
|
||||
int32_t pathLen;
|
||||
uint32_t schemePos;
|
||||
int32_t schemeLen;
|
||||
aRv = urlParser->ParseURL(url, flatURL.Length(), &schemePos, &schemeLen,
|
||||
nullptr, nullptr, // ignore authority
|
||||
&pathPos, &pathLen);
|
||||
if (NS_WARN_IF(aRv.Failed())) { return; }
|
||||
|
||||
if (aSchemeValidOut) {
|
||||
nsAutoCString scheme(Substring(flatURL, schemePos, schemeLen));
|
||||
*aSchemeValidOut = scheme.LowerCaseEqualsLiteral("http") ||
|
||||
scheme.LowerCaseEqualsLiteral("https");
|
||||
}
|
||||
|
||||
uint32_t queryPos;
|
||||
int32_t queryLen;
|
||||
uint32_t refPos;
|
||||
int32_t refLen;
|
||||
|
||||
aRv = urlParser->ParsePath(url + pathPos, flatURL.Length() - pathPos,
|
||||
nullptr, nullptr, // ignore filepath
|
||||
&queryPos, &queryLen,
|
||||
&refPos, &refLen);
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Remove this once Request/Response properly strip the fragment (bug 1110476)
|
||||
if (refLen >= 0) {
|
||||
// ParsePath gives us ref position relative to the start of the path
|
||||
refPos += pathPos;
|
||||
|
||||
aUrl = Substring(aUrl, 0, refPos - 1);
|
||||
}
|
||||
|
||||
if (!aUrlWithoutQueryOut) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (queryLen < 0) {
|
||||
*aUrlWithoutQueryOut = aUrl;
|
||||
return;
|
||||
}
|
||||
|
||||
// ParsePath gives us query position relative to the start of the path
|
||||
queryPos += pathPos;
|
||||
|
||||
// We want everything before the query sine we already removed the trailing
|
||||
// fragment
|
||||
*aUrlWithoutQueryOut = Substring(aUrl, 0, queryPos - 1);
|
||||
}
|
||||
|
||||
void
|
||||
TypeUtils::CheckAndSetBodyUsed(Request* aRequest, BodyAction aBodyAction,
|
||||
ErrorResult& aRv)
|
||||
|
||||
Reference in New Issue
Block a user