forked from mirrors/gecko-dev
After PFetch is enabled, fetch() call in workers will not create a channel in the content process anymore. Although netmonitor watches channels and NetEvents, stack traces are only caught in the content process. That means PFetch should notify the netmonitor about the stack trace of the fetch at the proper moment. In original fetch steps, FetchDriver would notify the netmonitor the fetch stack trace at https://searchfox.org/mozilla-central/rev/cdddec7fd690700efa4d6b48532cf70155e0386b/dom/fetch/FetchDriver.cpp#834 When PFetch is enabled, PFetch needs also to propagate this notification back to the content process. Depends on D174442 Differential Revision: https://phabricator.services.mozilla.com/D174443
91 lines
2.8 KiB
C++
91 lines
2.8 KiB
C++
/* 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_fetchChild_h__
|
|
#define mozilla_dom_fetchChild_h__
|
|
|
|
#include "mozilla/dom/AbortSignal.h"
|
|
#include "mozilla/dom/AbortFollower.h"
|
|
#include "mozilla/dom/FlippedOnce.h"
|
|
#include "mozilla/dom/PFetchChild.h"
|
|
#include "mozilla/dom/SerializedStackHolder.h"
|
|
#include "nsIConsoleReportCollector.h"
|
|
#include "nsIContentSecurityPolicy.h"
|
|
#include "nsISupports.h"
|
|
#include "nsIWorkerChannelInfo.h"
|
|
|
|
namespace mozilla::dom {
|
|
|
|
class FetchObserver;
|
|
class ThreadSafeWorkerRef;
|
|
class Promise;
|
|
class WorkerPrivate;
|
|
|
|
class FetchChild final : public PFetchChild, public AbortFollower {
|
|
friend class PFetchChild;
|
|
|
|
public:
|
|
NS_DECL_THREADSAFE_ISUPPORTS
|
|
|
|
mozilla::ipc::IPCResult Recv__delete__(const nsresult&& aResult);
|
|
|
|
mozilla::ipc::IPCResult RecvOnResponseAvailableInternal(
|
|
ParentToChildInternalResponse&& aResponse);
|
|
|
|
mozilla::ipc::IPCResult RecvOnResponseEnd(ResponseEndArgs&& aArgs);
|
|
|
|
mozilla::ipc::IPCResult RecvOnDataAvailable();
|
|
|
|
mozilla::ipc::IPCResult RecvOnFlushConsoleReport(
|
|
nsTArray<net::ConsoleReportCollected>&& aReports);
|
|
|
|
mozilla::ipc::IPCResult RecvOnCSPViolationEvent(const nsAString& aJSon);
|
|
|
|
mozilla::ipc::IPCResult RecvOnReportPerformanceTiming(
|
|
ResponseTiming&& aTiming);
|
|
|
|
mozilla::ipc::IPCResult RecvOnNotifyNetworkMonitorAlternateStack(
|
|
uint64_t aChannelID);
|
|
|
|
void SetCSPEventListener(nsICSPEventListener* aListener);
|
|
|
|
static RefPtr<FetchChild> Create(WorkerPrivate* aWorkerPrivate,
|
|
RefPtr<Promise> aPromise,
|
|
RefPtr<AbortSignalImpl> aSignalImpl,
|
|
RefPtr<FetchObserver> aObserver);
|
|
|
|
FetchChild(RefPtr<Promise>&& aPromise, RefPtr<AbortSignalImpl>&& aSignalImpl,
|
|
RefPtr<FetchObserver>&& aObserver);
|
|
|
|
// AbortFollower
|
|
void RunAbortAlgorithm() override;
|
|
|
|
void DoFetchOp(const FetchOpArgs& aArgs);
|
|
|
|
void SetOriginStack(UniquePtr<SerializedStackHolder>&& aStack) {
|
|
MOZ_ASSERT(!mOriginStack);
|
|
mOriginStack = std::move(aStack);
|
|
}
|
|
|
|
private:
|
|
~FetchChild() = default;
|
|
|
|
// WorkerPrivate shutdown callback.
|
|
void Shutdown();
|
|
void ActorDestroy(ActorDestroyReason aReason) override;
|
|
|
|
RefPtr<ThreadSafeWorkerRef> mWorkerRef;
|
|
RefPtr<Promise> mPromise;
|
|
RefPtr<AbortSignalImpl> mSignalImpl;
|
|
RefPtr<FetchObserver> mFetchObserver;
|
|
UniquePtr<SerializedStackHolder> mOriginStack;
|
|
nsCOMPtr<nsICSPEventListener> mCSPEventListener;
|
|
nsCOMPtr<nsIConsoleReportCollector> mReporter;
|
|
FlippedOnce<false> mIsShutdown;
|
|
nsCOMPtr<nsIWorkerChannelInfo> mWorkerChannelInfo;
|
|
};
|
|
|
|
} // namespace mozilla::dom
|
|
|
|
#endif
|