mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 1173439 P2 Parse Response URL query as a separate field. r=ehsan
This commit is contained in:
parent
18e16a0fa2
commit
2a2c3fa17d
2
dom/cache/Cache.cpp
vendored
2
dom/cache/Cache.cpp
vendored
@ -41,7 +41,7 @@ IsValidPutRequestURL(const nsAString& aUrl, ErrorResult& aRv)
|
||||
// make a copy because ProcessURL strips the fragmet
|
||||
NS_ConvertUTF16toUTF8 url(aUrl);
|
||||
|
||||
TypeUtils::ProcessURL(url, &validScheme, nullptr, aRv);
|
||||
TypeUtils::ProcessURL(url, &validScheme, nullptr, nullptr, aRv);
|
||||
if (aRv.Failed()) {
|
||||
return false;
|
||||
}
|
||||
|
1
dom/cache/CacheTypes.ipdlh
vendored
1
dom/cache/CacheTypes.ipdlh
vendored
@ -55,6 +55,7 @@ struct CacheRequest
|
||||
nsCString method;
|
||||
nsCString url;
|
||||
nsCString urlWithoutQuery;
|
||||
nsCString urlQuery;
|
||||
HeadersEntry[] headers;
|
||||
HeadersGuardEnum headersGuard;
|
||||
nsString referrer;
|
||||
|
27
dom/cache/DBSchema.cpp
vendored
27
dom/cache/DBSchema.cpp
vendored
@ -263,6 +263,7 @@ CreateSchema(mozIStorageConnection* aConn)
|
||||
"request_method TEXT NOT NULL, "
|
||||
"request_url TEXT NOT NULL, "
|
||||
"request_url_no_query TEXT NOT NULL, "
|
||||
"request_url_query TEXT NOT NULL, "
|
||||
"request_referrer TEXT NOT NULL, "
|
||||
"request_headers_guard INTEGER NOT NULL, "
|
||||
"request_mode INTEGER NOT NULL, "
|
||||
@ -1433,6 +1434,7 @@ InsertEntry(mozIStorageConnection* aConn, CacheId aCacheId,
|
||||
"request_method, "
|
||||
"request_url, "
|
||||
"request_url_no_query, "
|
||||
"request_url_query, "
|
||||
"request_referrer, "
|
||||
"request_headers_guard, "
|
||||
"request_mode, "
|
||||
@ -1454,6 +1456,7 @@ InsertEntry(mozIStorageConnection* aConn, CacheId aCacheId,
|
||||
":request_method, "
|
||||
":request_url, "
|
||||
":request_url_no_query, "
|
||||
":request_url_query, "
|
||||
":request_referrer, "
|
||||
":request_headers_guard, "
|
||||
":request_mode, "
|
||||
@ -1487,6 +1490,10 @@ InsertEntry(mozIStorageConnection* aConn, CacheId aCacheId,
|
||||
aRequest.urlWithoutQuery());
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
|
||||
rv = state->BindUTF8StringByName(NS_LITERAL_CSTRING("request_url_query"),
|
||||
aRequest.urlQuery());
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
|
||||
rv = state->BindStringByName(NS_LITERAL_CSTRING("request_referrer"),
|
||||
aRequest.referrer());
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
@ -1745,6 +1752,7 @@ ReadRequest(mozIStorageConnection* aConn, EntryId aEntryId,
|
||||
"request_method, "
|
||||
"request_url, "
|
||||
"request_url_no_query, "
|
||||
"request_url_query, "
|
||||
"request_referrer, "
|
||||
"request_headers_guard, "
|
||||
"request_mode, "
|
||||
@ -1773,45 +1781,48 @@ ReadRequest(mozIStorageConnection* aConn, EntryId aEntryId,
|
||||
rv = state->GetUTF8String(2, aSavedRequestOut->mValue.urlWithoutQuery());
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
|
||||
rv = state->GetString(3, aSavedRequestOut->mValue.referrer());
|
||||
rv = state->GetUTF8String(3, aSavedRequestOut->mValue.urlQuery());
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
|
||||
rv = state->GetString(4, aSavedRequestOut->mValue.referrer());
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
|
||||
int32_t guard;
|
||||
rv = state->GetInt32(4, &guard);
|
||||
rv = state->GetInt32(5, &guard);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
aSavedRequestOut->mValue.headersGuard() =
|
||||
static_cast<HeadersGuardEnum>(guard);
|
||||
|
||||
int32_t mode;
|
||||
rv = state->GetInt32(5, &mode);
|
||||
rv = state->GetInt32(6, &mode);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
aSavedRequestOut->mValue.mode() = static_cast<RequestMode>(mode);
|
||||
|
||||
int32_t credentials;
|
||||
rv = state->GetInt32(6, &credentials);
|
||||
rv = state->GetInt32(7, &credentials);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
aSavedRequestOut->mValue.credentials() =
|
||||
static_cast<RequestCredentials>(credentials);
|
||||
|
||||
int32_t requestContentPolicyType;
|
||||
rv = state->GetInt32(7, &requestContentPolicyType);
|
||||
rv = state->GetInt32(8, &requestContentPolicyType);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
aSavedRequestOut->mValue.contentPolicyType() =
|
||||
static_cast<nsContentPolicyType>(requestContentPolicyType);
|
||||
|
||||
int32_t requestCache;
|
||||
rv = state->GetInt32(8, &requestCache);
|
||||
rv = state->GetInt32(9, &requestCache);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
aSavedRequestOut->mValue.requestCache() =
|
||||
static_cast<RequestCache>(requestCache);
|
||||
|
||||
bool nullBody = false;
|
||||
rv = state->GetIsNull(9, &nullBody);
|
||||
rv = state->GetIsNull(10, &nullBody);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
aSavedRequestOut->mHasBodyId = !nullBody;
|
||||
|
||||
if (aSavedRequestOut->mHasBodyId) {
|
||||
rv = ExtractId(state, 9, &aSavedRequestOut->mBodyId);
|
||||
rv = ExtractId(state, 10, &aSavedRequestOut->mBodyId);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
|
||||
}
|
||||
|
||||
|
14
dom/cache/TypeUtils.cpp
vendored
14
dom/cache/TypeUtils.cpp
vendored
@ -154,7 +154,8 @@ TypeUtils::ToCacheRequest(CacheRequest& aOut, InternalRequest* aIn,
|
||||
aIn->GetURL(aOut.url());
|
||||
|
||||
bool schemeValid;
|
||||
ProcessURL(aOut.url(), &schemeValid, &aOut.urlWithoutQuery(), aRv);
|
||||
ProcessURL(aOut.url(), &schemeValid, &aOut.urlWithoutQuery(),
|
||||
&aOut.urlQuery(), aRv);
|
||||
if (aRv.Failed()) {
|
||||
return;
|
||||
}
|
||||
@ -205,7 +206,7 @@ TypeUtils::ToCacheResponseWithoutBody(CacheResponse& aOut,
|
||||
if (aOut.url() != EmptyCString()) {
|
||||
// Pass all Response URL schemes through... The spec only requires we take
|
||||
// action on invalid schemes for Request objects.
|
||||
ProcessURL(aOut.url(), nullptr, nullptr, aRv);
|
||||
ProcessURL(aOut.url(), nullptr, nullptr, nullptr, aRv);
|
||||
if (aRv.Failed()) {
|
||||
return;
|
||||
}
|
||||
@ -373,7 +374,8 @@ TypeUtils::ToInternalHeaders(const nsTArray<HeadersEntry>& aHeadersEntryList,
|
||||
// static
|
||||
void
|
||||
TypeUtils::ProcessURL(nsACString& aUrl, bool* aSchemeValidOut,
|
||||
nsACString* aUrlWithoutQueryOut, ErrorResult& aRv)
|
||||
nsACString* aUrlWithoutQueryOut,nsACString* aUrlQueryOut,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
const nsAFlatCString& flatURL = PromiseFlatCString(aUrl);
|
||||
const char* url = flatURL.get();
|
||||
@ -422,17 +424,19 @@ TypeUtils::ProcessURL(nsACString& aUrl, bool* aSchemeValidOut,
|
||||
return;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(aUrlQueryOut);
|
||||
|
||||
if (queryLen < 0) {
|
||||
*aUrlWithoutQueryOut = aUrl;
|
||||
*aUrlQueryOut = EmptyCString();
|
||||
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);
|
||||
*aUrlQueryOut = Substring(aUrl, queryPos - 1, queryLen + 1);
|
||||
}
|
||||
|
||||
void
|
||||
|
7
dom/cache/TypeUtils.h
vendored
7
dom/cache/TypeUtils.h
vendored
@ -108,11 +108,16 @@ public:
|
||||
// if the aUrl's scheme is valid or not for storing in the cache.
|
||||
// 3) If aUrlWithoutQueryOut is set, then a url string is provided without
|
||||
// the search section.
|
||||
// 4) If aUrlQueryOut is set then its populated with the search section
|
||||
// of the URL. Note, this parameter must be set if aUrlWithoutQueryOut
|
||||
// is set. They must either both be nullptr or set to valid string
|
||||
// pointers.
|
||||
//
|
||||
// Any errors are thrown on ErrorResult.
|
||||
static void
|
||||
ProcessURL(nsACString& aUrl, bool* aSchemeValidOut,
|
||||
nsACString* aUrlWithoutQueryOut, ErrorResult& aRv);
|
||||
nsACString* aUrlWithoutQueryOut, nsACString* aUrlQueryOut,
|
||||
ErrorResult& aRv);
|
||||
|
||||
private:
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user