зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
b5d216cfa1
Коммит
a7510da8d0
|
@ -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()
|
||||
);
|
||||
|
|
Загрузка…
Ссылка в новой задаче