Bug 1433505 P2 Make various class members on ServiceWorkerRegistrationInfo private. r=asuth

This commit is contained in:
Ben Kelly 2018-01-31 08:29:49 -08:00
Родитель fcf562611d
Коммит 84065537b6
7 изменённых файлов: 109 добавлений и 66 удалений

Просмотреть файл

@ -192,7 +192,7 @@ PopulateRegistrationData(nsIPrincipal* aPrincipal,
return rv;
}
aData.scope() = aRegistration->mScope;
aData.scope() = aRegistration->Scope();
RefPtr<ServiceWorkerInfo> newest = aRegistration->Newest();
if (NS_WARN_IF(!newest)) {
@ -465,7 +465,7 @@ class ServiceWorkerResolveWindowPromiseOnRegisterCallback final : public Service
RefPtr<ServiceWorkerRegistrationInfo> reg = registerJob->GetRegistration();
RefPtr<ServiceWorkerRegistration> swr =
window->GetServiceWorkerRegistration(NS_ConvertUTF8toUTF16(reg->mScope));
window->GetServiceWorkerRegistration(NS_ConvertUTF8toUTF16(reg->Scope()));
promise->MaybeResolve(swr);
}
@ -1003,7 +1003,7 @@ public:
for (uint32_t i = 0; i < data->mOrderedScopes.Length(); ++i) {
RefPtr<ServiceWorkerRegistrationInfo> info =
data->mInfos.GetWeak(data->mOrderedScopes[i]);
if (info->mPendingUninstall) {
if (info->IsPendingUninstall()) {
continue;
}
@ -1146,7 +1146,7 @@ public:
return NS_OK;
}
NS_ConvertUTF8toUTF16 scope(registration->mScope);
NS_ConvertUTF8toUTF16 scope(registration->Scope());
RefPtr<ServiceWorkerRegistration> swr =
mWindow->GetServiceWorkerRegistration(scope);
mPromise->MaybeResolve(swr);
@ -1463,7 +1463,7 @@ ServiceWorkerManager::CheckReadyPromise(nsPIDOMWindowInner* aWindow,
GetServiceWorkerRegistrationInfo(principal, aURI);
if (registration && registration->GetActive()) {
NS_ConvertUTF8toUTF16 scope(registration->mScope);
NS_ConvertUTF8toUTF16 scope(registration->Scope());
RefPtr<ServiceWorkerRegistration> swr =
aWindow->GetServiceWorkerRegistration(scope);
aPromise->MaybeResolve(swr);
@ -1651,7 +1651,7 @@ ServiceWorkerManager::WorkerIsIdle(ServiceWorkerInfo* aWorker)
return;
}
if (!reg->IsControllingClients() && reg->mPendingUninstall) {
if (!reg->IsControllingClients() && reg->IsPendingUninstall()) {
RemoveRegistration(reg);
return;
}
@ -1840,8 +1840,8 @@ ServiceWorkerManager::LoadRegistration(
const nsCString& currentWorkerURL = aRegistration.currentWorkerURL();
if (!currentWorkerURL.IsEmpty()) {
registration->SetActive(
new ServiceWorkerInfo(registration->mPrincipal,
registration->mScope,
new ServiceWorkerInfo(registration->Principal(),
registration->Scope(),
currentWorkerURL,
aRegistration.cacheName(),
importsLoadFlags));
@ -1962,12 +1962,12 @@ ServiceWorkerManager::GetServiceWorkerRegistrationInfo(const nsACString& aScopeK
#ifdef DEBUG
nsAutoCString origin;
rv = registration->mPrincipal->GetOrigin(origin);
rv = registration->Principal()->GetOrigin(origin);
MOZ_ASSERT(NS_SUCCEEDED(rv));
MOZ_ASSERT(origin.Equals(aScopeKey));
#endif
if (registration->mPendingUninstall) {
if (registration->IsPendingUninstall()) {
return nullptr;
}
return registration.forget();
@ -2015,7 +2015,7 @@ ServiceWorkerManager::AddScopeAndRegistration(const nsACString& aScope,
ServiceWorkerRegistrationInfo* aInfo)
{
MOZ_ASSERT(aInfo);
MOZ_ASSERT(aInfo->mPrincipal);
MOZ_ASSERT(aInfo->Principal());
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
if (!swm) {
@ -2024,7 +2024,7 @@ ServiceWorkerManager::AddScopeAndRegistration(const nsACString& aScope,
}
nsAutoCString scopeKey;
nsresult rv = swm->PrincipalToScopeKey(aInfo->mPrincipal, scopeKey);
nsresult rv = swm->PrincipalToScopeKey(aInfo->Principal(), scopeKey);
if (NS_WARN_IF(NS_FAILED(rv))) {
return;
}
@ -2118,7 +2118,7 @@ ServiceWorkerManager::RemoveScopeAndRegistration(ServiceWorkerRegistrationInfo*
}
nsAutoCString scopeKey;
nsresult rv = swm->PrincipalToScopeKey(aRegistration->mPrincipal, scopeKey);
nsresult rv = swm->PrincipalToScopeKey(aRegistration->Principal(), scopeKey);
if (NS_WARN_IF(NS_FAILED(rv))) {
return;
}
@ -2128,7 +2128,7 @@ ServiceWorkerManager::RemoveScopeAndRegistration(ServiceWorkerRegistrationInfo*
return;
}
if (auto entry = data->mUpdateTimers.Lookup(aRegistration->mScope)) {
if (auto entry = data->mUpdateTimers.Lookup(aRegistration->Scope())) {
entry.Data()->Cancel();
entry.Remove();
}
@ -2136,8 +2136,8 @@ ServiceWorkerManager::RemoveScopeAndRegistration(ServiceWorkerRegistrationInfo*
// Verify there are no controlled clients for the purged registration.
for (auto iter = swm->mControlledClients.Iter(); !iter.Done(); iter.Next()) {
auto& reg = iter.UserData()->mRegistrationInfo;
if (reg->mScope.Equals(aRegistration->mScope) &&
reg->mPrincipal->Equals(aRegistration->mPrincipal)) {
if (reg->Scope().Equals(aRegistration->Scope()) &&
reg->Principal()->Equals(aRegistration->Principal())) {
MOZ_DIAGNOSTIC_ASSERT(false,
"controlled client when removing registration");
iter.Remove();
@ -2146,8 +2146,8 @@ ServiceWorkerManager::RemoveScopeAndRegistration(ServiceWorkerRegistrationInfo*
}
RefPtr<ServiceWorkerRegistrationInfo> info;
data->mInfos.Remove(aRegistration->mScope, getter_AddRefs(info));
data->mOrderedScopes.RemoveElement(aRegistration->mScope);
data->mInfos.Remove(aRegistration->Scope(), getter_AddRefs(info));
data->mOrderedScopes.RemoveElement(aRegistration->Scope());
swm->NotifyListenersOnUnregister(info);
swm->MaybeRemoveRegistrationInfo(scopeKey);
@ -2216,7 +2216,7 @@ ServiceWorkerManager::StopControllingRegistration(ServiceWorkerRegistrationInfo*
return;
}
if (aRegistration->mPendingUninstall) {
if (aRegistration->IsPendingUninstall()) {
RemoveRegistration(aRegistration);
return;
}
@ -2246,7 +2246,7 @@ ServiceWorkerManager::GetScopeForUrl(nsIPrincipal* aPrincipal,
return NS_ERROR_FAILURE;
}
aScope = NS_ConvertUTF8toUTF16(r->mScope);
aScope = NS_ConvertUTF8toUTF16(r->Scope());
return NS_OK;
}
@ -2302,7 +2302,7 @@ ServiceWorkerManager::FireUpdateFoundOnServiceWorkerRegistrations(
MOZ_ASSERT(!regScope.IsEmpty());
NS_ConvertUTF16toUTF8 utf8Scope(regScope);
if (utf8Scope.Equals(aRegistration->mScope)) {
if (utf8Scope.Equals(aRegistration->Scope())) {
target->UpdateFound();
}
}
@ -2669,7 +2669,7 @@ ServiceWorkerManager::TransitionServiceWorkerRegistrationWorker(ServiceWorkerReg
NS_ConvertUTF16toUTF8 utf8Scope(regScope);
if (utf8Scope.Equals(aRegistration->mScope)) {
if (utf8Scope.Equals(aRegistration->Scope())) {
target->TransitionWorker(aWhichOne);
}
}
@ -2689,7 +2689,7 @@ ServiceWorkerManager::InvalidateServiceWorkerRegistrationWorker(ServiceWorkerReg
NS_ConvertUTF16toUTF8 utf8Scope(regScope);
if (utf8Scope.Equals(aRegistration->mScope)) {
if (utf8Scope.Equals(aRegistration->Scope())) {
target->InvalidateWorkers(aWhichOnes);
}
}
@ -2708,7 +2708,7 @@ ServiceWorkerManager::NotifyServiceWorkerRegistrationRemoved(ServiceWorkerRegist
NS_ConvertUTF16toUTF8 utf8Scope(regScope);
if (utf8Scope.Equals(aRegistration->mScope)) {
if (utf8Scope.Equals(aRegistration->Scope())) {
target->RegistrationRemoved();
}
}
@ -2816,7 +2816,7 @@ ServiceWorkerManager::SoftUpdateInternal(const OriginAttributes& aOriginAttribut
}
// "If registration's uninstalling flag is set, abort these steps."
if (registration->mPendingUninstall) {
if (registration->IsPendingUninstall()) {
return;
}
@ -2841,7 +2841,7 @@ ServiceWorkerManager::SoftUpdateInternal(const OriginAttributes& aOriginAttribut
aScope);
RefPtr<ServiceWorkerUpdateJob> job =
new ServiceWorkerUpdateJob(principal, registration->mScope,
new ServiceWorkerUpdateJob(principal, registration->Scope(),
newest->ScriptSpec(), nullptr,
registration->GetUpdateViaCache());
@ -2916,7 +2916,7 @@ ServiceWorkerManager::UpdateInternal(nsIPrincipal* aPrincipal,
// "Invoke Update algorithm, or its equivalent, with client, registration as
// its argument."
RefPtr<ServiceWorkerUpdateJob> job =
new ServiceWorkerUpdateJob(aPrincipal, registration->mScope,
new ServiceWorkerUpdateJob(aPrincipal, registration->Scope(),
newest->ScriptSpec(), nullptr,
registration->GetUpdateViaCache());
@ -2936,7 +2936,7 @@ ServiceWorkerManager::MaybeClaimClient(nsIDocument* aDocument,
RefPtr<GenericPromise> ref;
// Same origin check
if (!aWorkerRegistration->mPrincipal->Equals(aDocument->NodePrincipal())) {
if (!aWorkerRegistration->Principal()->Equals(aDocument->NodePrincipal())) {
ref = GenericPromise::CreateAndReject(NS_ERROR_DOM_SECURITY_ERR, __func__);
return ref.forget();
}
@ -3144,7 +3144,7 @@ ServiceWorkerManager::MaybeRemoveRegistration(ServiceWorkerRegistrationInfo* aRe
{
MOZ_ASSERT(aRegistration);
RefPtr<ServiceWorkerInfo> newest = aRegistration->Newest();
if (!newest && HasScope(aRegistration->mPrincipal, aRegistration->mScope)) {
if (!newest && HasScope(aRegistration->Principal(), aRegistration->Scope())) {
RemoveRegistration(aRegistration);
}
}
@ -3165,10 +3165,10 @@ ServiceWorkerManager::RemoveRegistration(ServiceWorkerRegistrationInfo* aRegistr
// null workers (case 3).
#ifdef DEBUG
RefPtr<ServiceWorkerInfo> newest = aRegistration->Newest();
MOZ_ASSERT(aRegistration->mPendingUninstall || !newest);
MOZ_ASSERT(aRegistration->IsPendingUninstall() || !newest);
#endif
MOZ_ASSERT(HasScope(aRegistration->mPrincipal, aRegistration->mScope));
MOZ_ASSERT(HasScope(aRegistration->Principal(), aRegistration->Scope()));
// When a registration is removed, we must clear its contents since the DOM
// object may be held by content script.
@ -3236,7 +3236,7 @@ ServiceWorkerManager::GetAllRegistrations(nsIArray** aResult)
ServiceWorkerRegistrationInfo* reg = it2.UserData();
MOZ_ASSERT(reg);
if (reg->mPendingUninstall) {
if (reg->IsPendingUninstall()) {
continue;
}
@ -3257,18 +3257,18 @@ ServiceWorkerManager::ForceUnregister(RegistrationDataPerPrincipal* aRegistratio
MOZ_ASSERT(aRegistration);
RefPtr<ServiceWorkerJobQueue> queue;
aRegistrationData->mJobQueues.Get(aRegistration->mScope, getter_AddRefs(queue));
aRegistrationData->mJobQueues.Get(aRegistration->Scope(), getter_AddRefs(queue));
if (queue) {
queue->CancelAll();
}
if (auto entry = aRegistrationData->mUpdateTimers.Lookup(aRegistration->mScope)) {
if (auto entry = aRegistrationData->mUpdateTimers.Lookup(aRegistration->Scope())) {
entry.Data()->Cancel();
entry.Remove();
}
// Since Unregister is async, it is ok to call it in an enumeration.
Unregister(aRegistration->mPrincipal, nullptr, NS_ConvertUTF8toUTF16(aRegistration->mScope));
Unregister(aRegistration->Principal(), nullptr, NS_ConvertUTF8toUTF16(aRegistration->Scope()));
}
NS_IMETHODIMP
@ -3345,10 +3345,10 @@ ServiceWorkerManager::RemoveAllRegistrations(OriginAttributesPattern* aPattern)
ServiceWorkerRegistrationInfo* reg = it2.UserData();
MOZ_ASSERT(reg);
MOZ_ASSERT(reg->mPrincipal);
MOZ_ASSERT(reg->Principal());
bool matches =
aPattern->Matches(reg->mPrincipal->OriginAttributesRef());
aPattern->Matches(reg->Principal()->OriginAttributesRef());
if (!matches) {
continue;
}

Просмотреть файл

@ -44,8 +44,8 @@ ServiceWorkerRegisterJob::AsyncExecute()
// it to disk again. We preemptively removed it earlier during
// unregister so that closing the window by shutting down the browser
// results in the registration being gone on restart.
if (registration->mPendingUninstall) {
registration->mPendingUninstall = false;
if (registration->IsPendingUninstall()) {
registration->ClearPendingUninstall();
swm->StoreRegistration(mPrincipal, registration);
// Its possible that a ready promise is created between when the
// uninstalling flag is set and when we resurrect the registration

Просмотреть файл

@ -85,14 +85,14 @@ ServiceWorkerRegistrationInfo::ServiceWorkerRegistrationInfo(
const nsACString& aScope,
nsIPrincipal* aPrincipal,
ServiceWorkerUpdateViaCache aUpdateViaCache)
: mControlledClientsCounter(0)
: mScope(aScope)
, mPrincipal(aPrincipal)
, mControlledClientsCounter(0)
, mUpdateState(NoUpdate)
, mCreationTime(PR_Now())
, mCreationTimeStamp(TimeStamp::Now())
, mLastUpdateTime(0)
, mUpdateViaCache(aUpdateViaCache)
, mScope(aScope)
, mPrincipal(aPrincipal)
, mPendingUninstall(false)
{}
@ -101,6 +101,36 @@ ServiceWorkerRegistrationInfo::~ServiceWorkerRegistrationInfo()
MOZ_DIAGNOSTIC_ASSERT(!IsControllingClients());
}
const nsCString&
ServiceWorkerRegistrationInfo::Scope() const
{
return mScope;
}
nsIPrincipal*
ServiceWorkerRegistrationInfo::Principal() const
{
return mPrincipal;
}
bool
ServiceWorkerRegistrationInfo::IsPendingUninstall() const
{
return mPendingUninstall;
}
void
ServiceWorkerRegistrationInfo::SetPendingUninstall()
{
mPendingUninstall = true;
}
void
ServiceWorkerRegistrationInfo::ClearPendingUninstall()
{
mPendingUninstall = false;
}
NS_IMPL_ISUPPORTS(ServiceWorkerRegistrationInfo, nsIServiceWorkerRegistrationInfo)
NS_IMETHODIMP

Просмотреть файл

@ -18,6 +18,10 @@ namespace dom {
class ServiceWorkerRegistrationInfo final
: public nsIServiceWorkerRegistrationInfo
{
const nsCString mScope;
nsCOMPtr<nsIPrincipal> mPrincipal;
nsTArray<nsCOMPtr<nsIServiceWorkerRegistrationInfoListener>> mListeners;
uint32_t mControlledClientsCounter;
enum
@ -42,25 +46,34 @@ class ServiceWorkerRegistrationInfo final
virtual ~ServiceWorkerRegistrationInfo();
public:
NS_DECL_ISUPPORTS
NS_DECL_NSISERVICEWORKERREGISTRATIONINFO
const nsCString mScope;
nsCOMPtr<nsIPrincipal> mPrincipal;
nsTArray<nsCOMPtr<nsIServiceWorkerRegistrationInfoListener>> mListeners;
// When unregister() is called on a registration, it is not immediately
// removed since documents may be controlled. It is marked as
// pendingUninstall and when all controlling documents go away, removed.
bool mPendingUninstall;
public:
NS_DECL_ISUPPORTS
NS_DECL_NSISERVICEWORKERREGISTRATIONINFO
ServiceWorkerRegistrationInfo(const nsACString& aScope,
nsIPrincipal* aPrincipal,
ServiceWorkerUpdateViaCache aUpdateViaCache);
const nsCString&
Scope() const;
nsIPrincipal*
Principal() const;
bool
IsPendingUninstall() const;
void
SetPendingUninstall();
void
ClearPendingUninstall();
already_AddRefed<ServiceWorkerInfo>
Newest() const
{

Просмотреть файл

@ -981,8 +981,8 @@ CompareNetwork::OnStreamComplete(nsIStreamLoader* aLoader, nsISupports* aContext
statusAsText.AppendInt(status);
ServiceWorkerManager::LocalizeAndReportToAllClients(
mRegistration->mScope, "ServiceWorkerRegisterNetworkError",
nsTArray<nsString> { NS_ConvertUTF8toUTF16(mRegistration->mScope),
mRegistration->Scope(), "ServiceWorkerRegisterNetworkError",
nsTArray<nsString> { NS_ConvertUTF8toUTF16(mRegistration->Scope()),
statusAsText, mURL });
rv = NS_ERROR_FAILURE;
@ -1016,8 +1016,8 @@ CompareNetwork::OnStreamComplete(nsIStreamLoader* aLoader, nsISupports* aContext
!mimeType.LowerCaseEqualsLiteral("application/x-javascript") &&
!mimeType.LowerCaseEqualsLiteral("application/javascript")) {
ServiceWorkerManager::LocalizeAndReportToAllClients(
mRegistration->mScope, "ServiceWorkerRegisterMimeTypeError",
nsTArray<nsString> { NS_ConvertUTF8toUTF16(mRegistration->mScope),
mRegistration->Scope(), "ServiceWorkerRegisterMimeTypeError",
nsTArray<nsString> { NS_ConvertUTF8toUTF16(mRegistration->Scope()),
NS_ConvertUTF8toUTF16(mimeType), mURL });
rv = NS_ERROR_DOM_SECURITY_ERR;
return rv;

Просмотреть файл

@ -120,17 +120,17 @@ ServiceWorkerUnregisterJob::Unregister()
}
// Note, we send the message to remove the registration from disk now even
// though we may only set the mPendingUninstall flag below. This is
// though we may only set the pending uninstall flag below. This is
// necessary to ensure the registration is removed if the controlled
// clients are closed by shutting down the browser. If the registration
// is resurrected by clearing mPendingUninstall then it should be saved
// is resurrected by clearing pending uninstall then it should be saved
// to disk again.
if (mSendToParent && !registration->mPendingUninstall) {
if (mSendToParent && !registration->IsPendingUninstall()) {
swm->MaybeSendUnregister(mPrincipal, mScope);
}
// "Set registration's uninstalling flag."
registration->mPendingUninstall = true;
registration->SetPendingUninstall();
// "Resolve promise with true"
mResult = true;

Просмотреть файл

@ -260,7 +260,7 @@ ServiceWorkerUpdateJob::AsyncExecute()
RefPtr<ServiceWorkerRegistrationInfo> registration =
swm->GetRegistration(mPrincipal, mScope);
if (!registration || registration->mPendingUninstall) {
if (!registration || registration->IsPendingUninstall()) {
ErrorResult rv;
rv.ThrowTypeError<MSG_SW_UPDATE_BAD_REGISTRATION>(NS_ConvertUTF8toUTF16(mScope),
NS_LITERAL_STRING("uninstalled"));
@ -399,9 +399,9 @@ ServiceWorkerUpdateJob::ComparisonResult(nsresult aStatus,
}
}
if (!StringBeginsWith(mRegistration->mScope, maxPrefix)) {
if (!StringBeginsWith(mRegistration->Scope(), maxPrefix)) {
nsAutoString message;
NS_ConvertUTF8toUTF16 reportScope(mRegistration->mScope);
NS_ConvertUTF8toUTF16 reportScope(mRegistration->Scope());
NS_ConvertUTF8toUTF16 reportMaxPrefix(maxPrefix);
const char16_t* params[] = { reportScope.get(), reportMaxPrefix.get() };
@ -434,8 +434,8 @@ ServiceWorkerUpdateJob::ComparisonResult(nsresult aStatus,
}
RefPtr<ServiceWorkerInfo> sw =
new ServiceWorkerInfo(mRegistration->mPrincipal,
mRegistration->mScope,
new ServiceWorkerInfo(mRegistration->Principal(),
mRegistration->Scope(),
mScriptSpec,
aNewCacheName,
flags);
@ -475,7 +475,7 @@ ServiceWorkerUpdateJob::ContinueUpdateAfterScriptEval(bool aScriptEvaluationResu
ErrorResult error;
NS_ConvertUTF8toUTF16 scriptSpec(mScriptSpec);
NS_ConvertUTF8toUTF16 scope(mRegistration->mScope);
NS_ConvertUTF8toUTF16 scope(mRegistration->Scope());
error.ThrowTypeError<MSG_SW_SCRIPT_THREW>(scriptSpec, scope);
FailUpdateJob(error);
return;