116 lines
3.6 KiB
C++
116 lines
3.6 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef mozilla_dom_CacheablePerformanceTimingData_h
|
|
#define mozilla_dom_CacheablePerformanceTimingData_h
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "nsCOMPtr.h"
|
|
#include "nsITimedChannel.h"
|
|
#include "nsStringFwd.h"
|
|
#include "nsTArray.h"
|
|
|
|
class nsIHttpChannel;
|
|
|
|
namespace mozilla::dom {
|
|
|
|
class IPCPerformanceTimingData;
|
|
|
|
// The subset of PerformanceResourceTiming data that can be cached for the
|
|
// subsequent requests from a compatible principal.
|
|
//
|
|
// This includes the data extracted from the server response, but doesn't
|
|
// include any timing data.
|
|
class CacheablePerformanceTimingData {
|
|
public:
|
|
CacheablePerformanceTimingData() = default;
|
|
|
|
CacheablePerformanceTimingData(nsITimedChannel* aChannel,
|
|
nsIHttpChannel* aHttpChannel);
|
|
|
|
protected:
|
|
explicit CacheablePerformanceTimingData(
|
|
const CacheablePerformanceTimingData& aOther);
|
|
|
|
explicit CacheablePerformanceTimingData(
|
|
const IPCPerformanceTimingData& aIPCData);
|
|
|
|
public:
|
|
bool IsInitialized() const { return mInitialized; }
|
|
|
|
const nsString& NextHopProtocol() const { return mNextHopProtocol; }
|
|
|
|
uint64_t EncodedBodySize() const { return mEncodedBodySize; }
|
|
|
|
uint64_t DecodedBodySize() const { return mDecodedBodySize; }
|
|
|
|
uint16_t ResponseStatus() const { return mResponseStatus; }
|
|
|
|
const nsString& ContentType() const { return mContentType; }
|
|
|
|
uint8_t RedirectCountReal() const { return mRedirectCount; }
|
|
uint8_t GetRedirectCount() const;
|
|
|
|
bool AllRedirectsSameOrigin() const { return mAllRedirectsSameOrigin; }
|
|
|
|
// Cached result of CheckBodyInfoAccessAllowedForOrigin.
|
|
nsITimedChannel::BodyInfoAccess BodyInfoAccessAllowed() const {
|
|
return mBodyInfoAccessAllowed;
|
|
}
|
|
|
|
// Cached result of CheckTimingAllowedForOrigin. If false, security sensitive
|
|
// attributes of the resourceTiming object will be set to 0
|
|
bool TimingAllowed() const { return mTimingAllowed; }
|
|
|
|
nsTArray<nsCOMPtr<nsIServerTiming>> GetServerTiming();
|
|
|
|
protected:
|
|
void SetCacheablePropertiesFromHttpChannel(nsIHttpChannel* aHttpChannel,
|
|
nsITimedChannel* aChannel);
|
|
|
|
private:
|
|
// Checks if the bodyInfo for Resource and Navigation Timing should be
|
|
// kept opaque or exposed, per Fetch spec.
|
|
nsITimedChannel::BodyInfoAccess CheckBodyInfoAccessAllowedForOrigin(
|
|
nsIHttpChannel* aResourceChannel, nsITimedChannel* aChannel);
|
|
|
|
// Checks if the resource is either same origin as the page that started
|
|
// the load, or if the response contains the Timing-Allow-Origin header
|
|
// with a value of * or matching the domain of the loading Principal
|
|
bool CheckTimingAllowedForOrigin(nsIHttpChannel* aResourceChannel,
|
|
nsITimedChannel* aChannel);
|
|
|
|
protected:
|
|
uint64_t mEncodedBodySize = 0;
|
|
uint64_t mDecodedBodySize = 0;
|
|
|
|
uint16_t mResponseStatus = 0;
|
|
|
|
uint8_t mRedirectCount = 0;
|
|
|
|
nsITimedChannel::BodyInfoAccess mBodyInfoAccessAllowed =
|
|
nsITimedChannel::BodyInfoAccess::DISALLOWED;
|
|
|
|
bool mAllRedirectsSameOrigin = false;
|
|
|
|
bool mAllRedirectsPassTAO = false;
|
|
|
|
bool mSecureConnection = false;
|
|
|
|
bool mTimingAllowed = false;
|
|
|
|
bool mInitialized = false;
|
|
|
|
nsString mNextHopProtocol;
|
|
nsString mContentType;
|
|
|
|
nsTArray<nsCOMPtr<nsIServerTiming>> mServerTiming;
|
|
};
|
|
|
|
} // namespace mozilla::dom
|
|
|
|
#endif // mozilla_dom_CacheablePerformanceTimingData_h
|