gecko-dev/layout/style/URLExtraData.cpp
Cameron McCormack 7649df02be Bug 1474793 - Part 2: Allow references to static C++ URLExtraData objects from Rust UrlExtraData. r=emilio
Each user agent style sheet has a unique URLExtraData object containing
its URL, but since they are refcounted objects, we can't share them
easily across processes.  Rather than adding support for copying them
into a shared memory buffer like we will do with the Rust objects, here
we just set up a static array of URLExtraData objects per UA style
sheet.  The array will be filled in in a later patch.

Rust UrlExtraData objects, once they are transformed into their
sharable form and copied into the shared memory buffer, will reference
them by an index.

Depends on D17181

Differential Revision: https://phabricator.services.mozilla.com/D17182

--HG--
extra : moz-landing-system : lando
2019-03-30 00:15:43 +00:00

42 lines
1.3 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/. */
/* thread-safe container of information for resolving url values */
#include "mozilla/URLExtraData.h"
#include "mozilla/NullPrincipalURI.h"
#include "nsProxyRelease.h"
#include "mozilla/net/ReferrerPolicy.h"
namespace mozilla {
StaticRefPtr<URLExtraData> URLExtraData::sDummy;
/* static */
void URLExtraData::InitDummy() {
RefPtr<nsIURI> baseURI = NullPrincipalURI::Create();
RefPtr<nsIURI> referrer = baseURI;
sDummy = new URLExtraData(baseURI.forget(), referrer.forget(),
NullPrincipal::CreateWithoutOriginAttributes(),
net::RP_Unset);
}
/* static */
void URLExtraData::ReleaseDummy() { sDummy = nullptr; }
URLExtraData::~URLExtraData() {
if (!NS_IsMainThread()) {
NS_ReleaseOnMainThreadSystemGroup("URLExtraData::mPrincipal",
mPrincipal.forget());
}
}
StaticRefPtr<URLExtraData>
URLExtraData::sShared[size_t(UserAgentStyleSheetID::Count)];
} // namespace mozilla