Issue #1587 - Part 4: Implement FetchObserver

This commit is contained in:
Moonchild 2020-06-11 08:22:04 +00:00 • committed by Roy Tam
commit 6722d7f4b4
11 changed files with 223 additions and 0 deletions

View file

@ -0,0 +1,66 @@
/* -*- 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/. */
#include "FetchObserver.h"
#include "WorkerPrivate.h"
namespace mozilla {
namespace dom {
NS_IMPL_CYCLE_COLLECTION_CLASS(FetchObserver)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(FetchObserver,
DOMEventTargetHelper)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(FetchObserver,
DOMEventTargetHelper)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(FetchObserver)
NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
NS_IMPL_ADDREF_INHERITED(FetchObserver, DOMEventTargetHelper)
NS_IMPL_RELEASE_INHERITED(FetchObserver, DOMEventTargetHelper)
/* static */ bool
FetchObserver::IsEnabled(JSContext* aCx, JSObject* aGlobal)
{
if (NS_IsMainThread()) {
return Preferences::GetBool("dom.fetchObserver.enabled", false);
}
using namespace workers;
// Otherwise, check the pref via the WorkerPrivate
WorkerPrivate* workerPrivate = GetWorkerPrivateFromContext(aCx);
if (!workerPrivate) {
return false;
}
return workerPrivate->FetchObserverEnabled();
}
FetchObserver::FetchObserver(nsIGlobalObject* aGlobal,
FetchState aState)
: DOMEventTargetHelper(aGlobal)
, mState(aState)
{}
JSObject*
FetchObserver::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
{
return FetchObserverBinding::Wrap(aCx, this, aGivenProto);
}
FetchState
FetchObserver::State() const
{
return mState;
}
} // dom namespace
} // mozilla namespace

46
dom/fetch/FetchObserver.h Normal file
View file

@ -0,0 +1,46 @@
/* -*- 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_FetchObserver_h
#define mozilla_dom_FetchObserver_h
#include "mozilla/DOMEventTargetHelper.h"
#include "mozilla/dom/FetchObserverBinding.h"
namespace mozilla {
namespace dom {
class FetchObserver final : public DOMEventTargetHelper
{
public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(FetchObserver, DOMEventTargetHelper)
static bool
IsEnabled(JSContext* aCx, JSObject* aGlobal);
FetchObserver(nsIGlobalObject* aGlobal, FetchState aState);
JSObject*
WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
FetchState
State() const;
IMPL_EVENT_HANDLER(statechange);
IMPL_EVENT_HANDLER(requestprogress);
IMPL_EVENT_HANDLER(responseprogress);
private:
~FetchObserver() = default;
FetchState mState;
};
} // dom namespace
} // mozilla namespace
#endif // mozilla_dom_FetchObserver_h

View file

@ -10,6 +10,7 @@ EXPORTS.mozilla.dom += [
'FetchController.h',
'FetchDriver.h',
'FetchIPCTypes.h',
'FetchObserver.h',
'FetchSignal.h',
'FetchUtil.h',
'Headers.h',
@ -31,6 +32,7 @@ SOURCES += [
'ChannelInfo.cpp',
'FetchController.cpp',
'FetchDriver.cpp',
'FetchObserver.cpp',
'FetchSignal.cpp',
'FetchUtil.cpp',
'Headers.cpp',