Bug 1499408 - Part 2: Have css::URLValue get URLExtraData from its CssUrlData. r=emilio

MozReview-Commit-ID: IqZGzkHlSZD

Depends on D8874

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

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Cameron McCormack 2018-10-17 09:43:32 +00:00
Родитель b5d216cfa1
Коммит a7510da8d0
15 изменённых файлов: 58 добавлений и 51 удалений

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

@ -622,7 +622,7 @@ Element::WrapObject(JSContext *aCx, JS::Handle<JSObject*> aGivenProto)
if (bindingURL) {
nsCOMPtr<nsIURI> uri = bindingURL->GetURI();
nsCOMPtr<nsIPrincipal> principal = bindingURL->mExtraData->Principal();
nsCOMPtr<nsIPrincipal> principal = bindingURL->ExtraData()->Principal();
// We have a binding that must be installed.
bool dummy;

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

@ -2426,7 +2426,7 @@ nsCSSFrameConstructor::ConstructDocElementFrame(Element* aDocEle
RefPtr<nsXBLBinding> binding;
rv = xblService->LoadBindings(aDocElement, display->mBinding->GetURI(),
display->mBinding->mExtraData->Principal(),
display->mBinding->ExtraData()->Principal(),
getter_AddRefs(binding), &resolveStyle);
if (NS_FAILED(rv) && rv != NS_ERROR_XBL_BLOCKED) {
// Binding will load asynchronously.
@ -5580,7 +5580,7 @@ nsCSSFrameConstructor::LoadXBLBindingIfNeeded(nsIContent& aContent,
bool resolveStyle;
nsresult rv = xblService->LoadBindings(aContent.AsElement(),
binding->GetURI(),
binding->mExtraData->Principal(),
binding->ExtraData()->Principal(),
getter_AddRefs(newPendingBinding->mBinding),
&resolveStyle);
if (NS_FAILED(rv)) {

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

@ -1102,10 +1102,11 @@ FontFaceSet::FindOrCreateUserFontEntryFromFontFace(const nsACString& aFamilyName
const URLValue* url = component.url._0;
nsIURI* uri = url->GetURI();
face->mURI = uri ? new gfxFontSrcURI(uri) : nullptr;
face->mReferrer = url->mExtraData->GetReferrer();
face->mReferrerPolicy = url->mExtraData->GetReferrerPolicy();
URLExtraData* extraData = url->ExtraData();
face->mReferrer = extraData->GetReferrer();
face->mReferrerPolicy = extraData->GetReferrerPolicy();
face->mOriginPrincipal =
new gfxFontSrcPrincipal(url->mExtraData->Principal());
new gfxFontSrcPrincipal(extraData->Principal());
// agent and user stylesheets are treated slightly differently,
// the same-site origin check and access control headers are

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

@ -1997,12 +1997,9 @@ Gecko_nsStyleSVG_CopyContextProperties(nsStyleSVG* aDst, const nsStyleSVG* aSrc)
css::URLValue*
Gecko_URLValue_Create(RawServoCssUrlDataStrong aCssUrl,
URLExtraData* aExtraData,
CORSMode aCORSMode)
Gecko_URLValue_Create(RawServoCssUrlDataStrong aCssUrl, CORSMode aCORSMode)
{
RefPtr<css::URLValue> url =
new css::URLValue(aCssUrl.Consume(), aExtraData, aCORSMode);
RefPtr<css::URLValue> url = new css::URLValue(aCssUrl.Consume(), aCORSMode);
return url.forget().take();
}
@ -2570,7 +2567,7 @@ LoadImportSheet(css::Loader* aLoader,
NS_NewURI(getter_AddRefs(uri), NS_LITERAL_CSTRING("about:invalid"));
}
emptySheet->SetURIs(uri, uri, uri);
emptySheet->SetPrincipal(aURL->mExtraData->Principal());
emptySheet->SetPrincipal(aURL->ExtraData()->Principal());
emptySheet->SetComplete();
aParent->PrependStyleSheet(emptySheet);
return emptySheet.forget();
@ -2587,15 +2584,13 @@ Gecko_LoadStyleSheet(css::Loader* aLoader,
SheetLoadData* aParentLoadData,
css::LoaderReusableStyleSheets* aReusableSheets,
RawServoCssUrlDataStrong aCssUrl,
URLExtraData* aExtraData,
RawServoMediaListStrong aMediaList)
{
MOZ_ASSERT(NS_IsMainThread());
// The CORS mode in the URLValue is irrelevant here.
// (CORS_NONE is used for all imported sheets in Load::LoadChildSheet.)
RefPtr<css::URLValue> url =
new css::URLValue(aCssUrl.Consume(), aExtraData, CORS_NONE);
RefPtr<css::URLValue> url = new css::URLValue(aCssUrl.Consume(), CORS_NONE);
return LoadImportSheet(aLoader, aParent, aParentLoadData, aReusableSheets,
url, aMediaList.Consume()).take();
}
@ -2603,7 +2598,6 @@ Gecko_LoadStyleSheet(css::Loader* aLoader,
void
Gecko_LoadStyleSheetAsync(css::SheetLoadDataHolder* aParentData,
RawServoCssUrlDataStrong aCssUrl,
URLExtraData* aExtraData,
RawServoMediaListStrong aMediaList,
RawServoImportRuleStrong aImportRule)
{
@ -2611,7 +2605,7 @@ Gecko_LoadStyleSheetAsync(css::SheetLoadDataHolder* aParentData,
// The CORS mode in the URLValue is irrelevant here.
// (CORS_NONE is used for all imported sheets in Load::LoadChildSheet.)
RefPtr<css::URLValue> urlVal =
new css::URLValue(aCssUrl.Consume(), aExtraData, CORS_NONE);
new css::URLValue(aCssUrl.Consume(), CORS_NONE);
RefPtr<RawServoMediaList> mediaList = aMediaList.Consume();
RefPtr<RawServoImportRule> importRule = aImportRule.Consume();
NS_DispatchToMainThread(NS_NewRunnableFunction(__func__,

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

@ -130,13 +130,11 @@ mozilla::StyleSheet* Gecko_LoadStyleSheet(
mozilla::css::SheetLoadData* parent_load_data,
mozilla::css::LoaderReusableStyleSheets* reusable_sheets,
RawServoCssUrlDataStrong url,
RawGeckoURLExtraData* url_extra_data,
RawServoMediaListStrong media_list);
void Gecko_LoadStyleSheetAsync(
mozilla::css::SheetLoadDataHolder* parent_data,
RawServoCssUrlDataStrong url,
RawGeckoURLExtraData* url_extra_data,
RawServoMediaListStrong media_list,
RawServoImportRuleStrong import_rule);
@ -644,7 +642,6 @@ void Gecko_nsStyleSVG_CopyContextProperties(
mozilla::css::URLValue* Gecko_URLValue_Create(
RawServoCssUrlDataStrong url,
RawGeckoURLExtraData* extra_data,
mozilla::CORSMode aCORSMode);
size_t Gecko_URLValue_SizeOfIncludingThis(mozilla::css::URLValue* url);

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

@ -483,8 +483,7 @@ ImageLoader::LoadImage(URLValue* aImage, nsIDocument* aLoadingDoc)
int32_t loadFlags = nsIRequest::LOAD_NORMAL |
nsContentUtils::CORSModeToLoadImageFlags(aImage->CorsMode());
URLExtraData* data = aImage->mExtraData;
URLExtraData* data = aImage->ExtraData();
RefPtr<imgRequestProxy> request;
nsresult rv = nsContentUtils::LoadImage(uri, aLoadingDoc, aLoadingDoc,

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

@ -1095,6 +1095,9 @@ void Servo_CssUrlData_GetSerialization(
uint8_t const** chars,
uint32_t* len);
RawGeckoURLExtraDataBorrowedMut Servo_CssUrlData_GetExtraData(
RawServoCssUrlDataBorrowed url);
// CSS parsing utility functions.
bool Servo_IsValidCSSColor(const nsAString* value);

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

@ -826,8 +826,8 @@ css::URLValue::Equals(const URLValue& aOther) const
MOZ_ASSERT(NS_IsMainThread());
bool eq;
const URLExtraData* self = mExtraData;
const URLExtraData* other = aOther.mExtraData;
const URLExtraData* self = ExtraData();
const URLExtraData* other = aOther.ExtraData();
return GetString() == aOther.GetString() &&
(GetURI() == aOther.GetURI() || // handles null == null
(mURI && aOther.mURI &&
@ -843,7 +843,7 @@ css::URLValue::Equals(const URLValue& aOther) const
bool
css::URLValue::DefinitelyEqualURIs(const URLValue& aOther) const
{
if (mExtraData->BaseURI() != aOther.mExtraData->BaseURI()) {
if (ExtraData()->BaseURI() != aOther.ExtraData()->BaseURI()) {
return false;
}
return GetString() == aOther.GetString();
@ -853,7 +853,7 @@ bool
css::URLValue::DefinitelyEqualURIsAndPrincipal(
const URLValue& aOther) const
{
return mExtraData->Principal() == aOther.mExtraData->Principal() &&
return ExtraData()->Principal() == aOther.ExtraData()->Principal() &&
DefinitelyEqualURIs(aOther);
}
@ -876,7 +876,7 @@ css::URLValue::GetURI() const
nsCOMPtr<nsIURI> newURI;
NS_NewURI(getter_AddRefs(newURI),
GetString(),
nullptr, mExtraData->BaseURI());
nullptr, ExtraData()->BaseURI());
mURI = newURI.forget();
mURIResolved = true;
}
@ -973,7 +973,6 @@ css::URLValue::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
// is worthwhile:
// - mURI
// - mString
// - mExtraData
// Only measure it if it's unshared, to avoid double-counting.
size_t n = 0;

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

@ -90,22 +90,25 @@ class CSSStyleSheet;
} \
}
// Forward declaration copied here since ServoBindings.h #includes nsCSSValue.h.
extern "C" {
RawGeckoURLExtraDataBorrowedMut Servo_CssUrlData_GetExtraData(
RawServoCssUrlDataBorrowed url);
}
namespace mozilla {
namespace css {
struct URLValue final
{
public:
// aCssUrl and aExtraData must not be null.
// aCssUrl must not be null.
URLValue(already_AddRefed<RawServoCssUrlData> aCssUrl,
URLExtraData* aExtraData,
CORSMode aCORSMode)
: mExtraData(aExtraData)
, mURIResolved(false)
: mURIResolved(false)
, mCssUrl(aCssUrl)
, mCORSMode(aCORSMode)
{
MOZ_ASSERT(mExtraData);
MOZ_ASSERT(mCssUrl);
}
@ -155,15 +158,16 @@ public:
CORSMode CorsMode() const { return mCORSMode; }
URLExtraData* ExtraData() const
{
return Servo_CssUrlData_GetExtraData(mCssUrl);
}
private:
// mURI stores the lazily resolved URI. This may be null if the URI is
// invalid, even once resolved.
mutable nsCOMPtr<nsIURI> mURI;
public:
RefPtr<URLExtraData> mExtraData;
private:
mutable bool mURIResolved;
// mIsLocalRef is set when url starts with a U+0023 number sign(#) character.

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

@ -46,9 +46,9 @@ ResolveURLUsingLocalRef(nsIFrame* aFrame, const css::URLValue* aURL)
return nullptr;
}
return do_AddRef(new URLAndReferrerInfo(uri,
aURL->mExtraData->GetReferrer(),
aURL->mExtraData->GetReferrerPolicy()));
RefPtr<URLAndReferrerInfo> info =
new URLAndReferrerInfo(uri, aURL->ExtraData());
return info.forget();
}
@ -665,8 +665,7 @@ SVGFilterObserverList::SVGFilterObserverList(const nsTArray<nsStyleFilter>& aFil
if (resolvedURI) {
filterURL = new URLAndReferrerInfo(
resolvedURI,
aFilters[i].GetURL()->mExtraData->GetReferrer(),
aFilters[i].GetURL()->mExtraData->GetReferrerPolicy());
aFilters[i].GetURL()->ExtraData());
}
}

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

@ -55,9 +55,17 @@ public:
: mURI(aURI)
, mReferrer(aReferrer)
, mReferrerPolicy(aReferrerPolicy)
{
MOZ_ASSERT(aURI);
}
{
MOZ_ASSERT(aURI);
}
URLAndReferrerInfo(nsIURI* aURI, URLExtraData* aExtraData)
: mURI(aURI)
, mReferrer(aExtraData->GetReferrer())
, mReferrerPolicy(aExtraData->GetReferrerPolicy())
{
MOZ_ASSERT(aURI);
}
NS_INLINE_DECL_REFCOUNTING(URLAndReferrerInfo)

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

@ -147,8 +147,8 @@ nsSVGFilterInstance::GetFilterFrame(nsIFrame* aTargetFrame)
IDTracker filterElement;
bool watch = false;
filterElement.Reset(mTargetContent, url,
mFilter.GetURL()->mExtraData->GetReferrer(),
mFilter.GetURL()->mExtraData->GetReferrerPolicy(),
mFilter.GetURL()->ExtraData()->GetReferrer(),
mFilter.GetURL()->ExtraData()->GetReferrerPolicy(),
watch);
Element* element = filterElement.get();
if (!element) {

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

@ -118,7 +118,6 @@ impl SpecifiedUrl {
let url_value = unsafe {
let ptr = bindings::Gecko_URLValue_Create(
url.0.clone().into_strong(),
url.0.extra_data.0.get(),
cors,
);
// We do not expect Gecko_URLValue_Create returns null.

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

@ -5473,6 +5473,13 @@ pub unsafe extern "C" fn Servo_CssUrlData_GetSerialization(
*utf8_chars = string.as_ptr();
}
#[no_mangle]
pub extern "C" fn Servo_CssUrlData_GetExtraData(
url: RawServoCssUrlDataBorrowed,
) -> *mut URLExtraData {
CssUrlData::as_arc(&url).extra_data.0.get()
}
#[no_mangle]
pub extern "C" fn Servo_ProcessInvalidations(
set: RawServoStyleSetBorrowed,

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

@ -56,7 +56,6 @@ impl StyleStylesheetLoader for StylesheetLoader {
self.2,
self.3,
url.0.clone().into_strong(),
url.0.extra_data.0.get(),
media.into_strong())
};
@ -147,7 +146,6 @@ impl StyleStylesheetLoader for AsyncStylesheetParser {
lock: &SharedRwLock,
media: Arc<Locked<MediaList>>,
) -> Arc<Locked<ImportRule>> {
let extra_data = url.0.extra_data.0.get();
let stylesheet = ImportSheet::new_pending(self.origin, self.quirks_mode);
let rule = Arc::new(lock.wrap(ImportRule { url: url.clone(), source_location, stylesheet }));
@ -155,7 +153,6 @@ impl StyleStylesheetLoader for AsyncStylesheetParser {
bindings::Gecko_LoadStyleSheetAsync(
self.load_data.get(),
url.0.into_strong(),
extra_data,
media.into_strong(),
rule.clone().into_strong()
);