mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 21:31:04 +00:00
merge mozilla-central to autoland. r=merge a=merge on a CLOSED TREE
This commit is contained in:
commit
1ebdaf80de
@ -969,10 +969,6 @@
|
||||
<prefs/>
|
||||
<versionRange minVersion="0" maxVersion="*" severity="1"/>
|
||||
</emItem>
|
||||
<emItem blockID="i258" id="helperbar@helperbar.com">
|
||||
<prefs/>
|
||||
<versionRange minVersion="0" maxVersion="1.0" severity="1"/>
|
||||
</emItem>
|
||||
<emItem blockID="i96" id="youtubeee@youtuber3.com">
|
||||
<prefs/>
|
||||
<versionRange minVersion="0" maxVersion="*" severity="3"/>
|
||||
@ -1464,6 +1460,10 @@
|
||||
<prefs/>
|
||||
<versionRange minVersion="0" maxVersion="*" severity="3"/>
|
||||
</emItem>
|
||||
<emItem blockID="674b6e19-f087-4706-a91d-1e723ed6f79e" id="{1490068c-d8b7-4bd2-9621-a648942b312c}">
|
||||
<prefs/>
|
||||
<versionRange minVersion="0" maxVersion="*" severity="3"/>
|
||||
</emItem>
|
||||
<emItem blockID="i488" id="jid1-4P0kohSJxU1qGg@jetpack">
|
||||
<prefs/>
|
||||
<versionRange minVersion="1.2.50" maxVersion="1.2.50" severity="1"/>
|
||||
@ -2151,6 +2151,10 @@
|
||||
<prefs/>
|
||||
<versionRange minVersion="0" maxVersion="1.0.8" severity="1"/>
|
||||
</emItem>
|
||||
<emItem blockID="i258" id="helperbar@helperbar.com">
|
||||
<prefs/>
|
||||
<versionRange minVersion="0" maxVersion="1.0" severity="1"/>
|
||||
</emItem>
|
||||
</emItems>
|
||||
<pluginItems>
|
||||
<pluginItem blockID="p416">
|
||||
|
@ -287,8 +287,14 @@ public:
|
||||
template<typename A, typename B>
|
||||
RangeBoundaryBase& operator=(const RangeBoundaryBase<A,B>& aOther)
|
||||
{
|
||||
mParent = aOther.mParent;
|
||||
mRef = aOther.mRef;
|
||||
// mParent and mRef can be strong pointers, so better to try to avoid any
|
||||
// extra AddRef/Release calls.
|
||||
if (mParent != aOther.mParent) {
|
||||
mParent = aOther.mParent;
|
||||
}
|
||||
if (mRef != aOther.mRef) {
|
||||
mRef = aOther.mRef;
|
||||
}
|
||||
mOffset = aOther.mOffset;
|
||||
return *this;
|
||||
}
|
||||
|
@ -202,6 +202,35 @@ bool
|
||||
nsTextFragment::SetTo(const char16_t* aBuffer, int32_t aLength,
|
||||
bool aUpdateBidi, bool aForce2b)
|
||||
{
|
||||
if (aForce2b && mState.mIs2b && !m2b->IsReadonly()) {
|
||||
uint32_t storageSize = m2b->StorageSize();
|
||||
uint32_t neededSize = aLength * sizeof(char16_t);
|
||||
if (!neededSize) {
|
||||
if (storageSize < AutoStringDefaultStorageSize) {
|
||||
// If we're storing small enough nsStringBuffer, let's preserve it.
|
||||
|
||||
static_cast<char16_t*>(m2b->Data())[0] = char16_t(0);
|
||||
mState.mLength = 0;
|
||||
mState.mIsBidi = false;
|
||||
return true;
|
||||
}
|
||||
} else if ((neededSize < storageSize) &&
|
||||
((storageSize / 2) <
|
||||
(neededSize + AutoStringDefaultStorageSize))) {
|
||||
// Don't try to reuse the existing nsStringBuffer, if it would have
|
||||
// lots of unused space.
|
||||
|
||||
memcpy(m2b->Data(), aBuffer, neededSize);
|
||||
static_cast<char16_t*>(m2b->Data())[aLength] = char16_t(0);
|
||||
mState.mLength = aLength;
|
||||
mState.mIsBidi = false;
|
||||
if (aUpdateBidi) {
|
||||
UpdateBidiFlag(aBuffer, aLength);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
ReleaseText();
|
||||
|
||||
if (aLength == 0) {
|
||||
|
@ -5353,10 +5353,10 @@ EditorBase::IsModifiableNode(nsINode* aNode)
|
||||
return true;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIContent>
|
||||
nsIContent*
|
||||
EditorBase::GetFocusedContent()
|
||||
{
|
||||
nsCOMPtr<nsIDOMEventTarget> piTarget = GetDOMEventTarget();
|
||||
nsIDOMEventTarget* piTarget = GetDOMEventTarget();
|
||||
if (!piTarget) {
|
||||
return nullptr;
|
||||
}
|
||||
@ -5367,20 +5367,20 @@ EditorBase::GetFocusedContent()
|
||||
nsIContent* content = fm->GetFocusedContent();
|
||||
MOZ_ASSERT((content == piTarget) == SameCOMIdentity(content, piTarget));
|
||||
|
||||
return (content == piTarget) ?
|
||||
piTarget.forget().downcast<nsIContent>() : nullptr;
|
||||
return (content == piTarget) ? content : nullptr;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIContent>
|
||||
EditorBase::GetFocusedContentForIME()
|
||||
{
|
||||
return GetFocusedContent();
|
||||
nsCOMPtr<nsIContent> content = GetFocusedContent();
|
||||
return content.forget();
|
||||
}
|
||||
|
||||
bool
|
||||
EditorBase::IsActiveInDOMWindow()
|
||||
{
|
||||
nsCOMPtr<nsIDOMEventTarget> piTarget = GetDOMEventTarget();
|
||||
nsIDOMEventTarget* piTarget = GetDOMEventTarget();
|
||||
if (!piTarget) {
|
||||
return false;
|
||||
}
|
||||
@ -5412,7 +5412,7 @@ EditorBase::IsAcceptableInputEvent(WidgetGUIEvent* aGUIEvent)
|
||||
// If this is dispatched by using cordinates but this editor doesn't have
|
||||
// focus, we shouldn't handle it.
|
||||
if (aGUIEvent->IsUsingCoordinates()) {
|
||||
nsCOMPtr<nsIContent> focusedContent = GetFocusedContent();
|
||||
nsIContent* focusedContent = GetFocusedContent();
|
||||
if (!focusedContent) {
|
||||
return false;
|
||||
}
|
||||
|
@ -1164,7 +1164,7 @@ public:
|
||||
nsINode* aEndContainer,
|
||||
uint32_t aEndOffset);
|
||||
|
||||
virtual already_AddRefed<dom::EventTarget> GetDOMEventTarget() = 0;
|
||||
virtual dom::EventTarget* GetDOMEventTarget() = 0;
|
||||
|
||||
/**
|
||||
* Fast non-refcounting editor root element accessor
|
||||
@ -1344,7 +1344,7 @@ public:
|
||||
/**
|
||||
* Get the focused content, if we're focused. Returns null otherwise.
|
||||
*/
|
||||
virtual already_AddRefed<nsIContent> GetFocusedContent();
|
||||
virtual nsIContent* GetFocusedContent();
|
||||
|
||||
/**
|
||||
* Get the focused content for the argument of some IMEStateManager's
|
||||
|
@ -144,7 +144,7 @@ EditorEventListener::InstallToEditor()
|
||||
{
|
||||
NS_PRECONDITION(mEditorBase, "The caller must set mEditorBase");
|
||||
|
||||
nsCOMPtr<EventTarget> piTarget = mEditorBase->GetDOMEventTarget();
|
||||
EventTarget* piTarget = mEditorBase->GetDOMEventTarget();
|
||||
NS_ENSURE_TRUE(piTarget, NS_ERROR_FAILURE);
|
||||
|
||||
// register the event listeners with the listener manager
|
||||
@ -1093,7 +1093,7 @@ EditorEventListener::Focus(InternalFocusEvent* aFocusEvent)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> target = aFocusEvent->GetDOMEventTarget();
|
||||
nsIDOMEventTarget* target = aFocusEvent->GetDOMEventTarget();
|
||||
nsCOMPtr<nsINode> node = do_QueryInterface(target);
|
||||
NS_ENSURE_TRUE(node, NS_ERROR_UNEXPECTED);
|
||||
|
||||
@ -1221,7 +1221,7 @@ EditorEventListener::ShouldHandleNativeKeyBindings(
|
||||
// unnecessary. IsAcceptableInputEvent currently makes a similar check for
|
||||
// mouse events.
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> target = aKeyboardEvent->GetDOMEventTarget();
|
||||
nsIDOMEventTarget* target = aKeyboardEvent->GetDOMEventTarget();
|
||||
nsCOMPtr<nsIContent> targetContent = do_QueryInterface(target);
|
||||
if (!targetContent) {
|
||||
return false;
|
||||
|
@ -407,7 +407,7 @@ HTMLEditor::GrabberClicked()
|
||||
mMouseMotionListenerP = new ResizerMouseMotionListener(*this);
|
||||
if (!mMouseMotionListenerP) {return NS_ERROR_NULL_POINTER;}
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> piTarget = GetDOMEventTarget();
|
||||
nsIDOMEventTarget* piTarget = GetDOMEventTarget();
|
||||
NS_ENSURE_TRUE(piTarget, NS_ERROR_FAILURE);
|
||||
|
||||
rv = piTarget->AddEventListener(NS_LITERAL_STRING("mousemove"),
|
||||
|
@ -4533,7 +4533,7 @@ HTMLEditor::GetReturnInParagraphCreatesNewParagraph(bool* aCreatesNewParagraph)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIContent>
|
||||
nsIContent*
|
||||
HTMLEditor::GetFocusedContent()
|
||||
{
|
||||
nsFocusManager* fm = nsFocusManager::GetFocusManager();
|
||||
@ -4549,8 +4549,7 @@ HTMLEditor::GetFocusedContent()
|
||||
if (!focusedContent) {
|
||||
// in designMode, nobody gets focus in most cases.
|
||||
if (inDesignMode && OurWindowHasFocus()) {
|
||||
nsCOMPtr<nsIContent> rootContent = document->GetRootElement();
|
||||
return rootContent.forget();
|
||||
return document->GetRootElement();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
@ -4558,7 +4557,7 @@ HTMLEditor::GetFocusedContent()
|
||||
if (inDesignMode) {
|
||||
return OurWindowHasFocus() &&
|
||||
nsContentUtils::ContentIsDescendantOf(focusedContent, document) ?
|
||||
focusedContent.forget() : nullptr;
|
||||
focusedContent.get() : nullptr;
|
||||
}
|
||||
|
||||
// We're HTML editor for contenteditable
|
||||
@ -4570,7 +4569,7 @@ HTMLEditor::GetFocusedContent()
|
||||
return nullptr;
|
||||
}
|
||||
// If our window is focused, we're focused.
|
||||
return OurWindowHasFocus() ? focusedContent.forget() : nullptr;
|
||||
return OurWindowHasFocus() ? focusedContent.get() : nullptr;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIContent>
|
||||
@ -4656,7 +4655,7 @@ HTMLEditor::GetActiveEditingHost()
|
||||
return content->GetEditingHost();
|
||||
}
|
||||
|
||||
already_AddRefed<EventTarget>
|
||||
EventTarget*
|
||||
HTMLEditor::GetDOMEventTarget()
|
||||
{
|
||||
// Don't use getDocument here, because we have no way of knowing
|
||||
@ -4664,7 +4663,7 @@ HTMLEditor::GetDOMEventTarget()
|
||||
// ourselves, if it exists.
|
||||
MOZ_ASSERT(IsInitialized(), "The HTMLEditor has not been initialized yet");
|
||||
nsCOMPtr<mozilla::dom::EventTarget> target = GetDocument();
|
||||
return target.forget();
|
||||
return target;
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -109,10 +109,10 @@ public:
|
||||
NS_IMETHOD BeginningOfDocument() override;
|
||||
virtual nsresult HandleKeyPressEvent(
|
||||
WidgetKeyboardEvent* aKeyboardEvent) override;
|
||||
virtual already_AddRefed<nsIContent> GetFocusedContent() override;
|
||||
virtual nsIContent* GetFocusedContent() override;
|
||||
virtual already_AddRefed<nsIContent> GetFocusedContentForIME() override;
|
||||
virtual bool IsActiveInDOMWindow() override;
|
||||
virtual already_AddRefed<dom::EventTarget> GetDOMEventTarget() override;
|
||||
virtual dom::EventTarget* GetDOMEventTarget() override;
|
||||
virtual Element* GetEditorRoot() override;
|
||||
virtual already_AddRefed<nsIContent> FindSelectionRoot(
|
||||
nsINode *aNode) override;
|
||||
|
@ -537,7 +537,7 @@ HTMLEditor::StartResizing(nsIDOMElement* aHandle)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> target = GetDOMEventTarget();
|
||||
nsIDOMEventTarget* target = GetDOMEventTarget();
|
||||
NS_ENSURE_TRUE(target, NS_ERROR_FAILURE);
|
||||
|
||||
result = target->AddEventListener(NS_LITERAL_STRING("mousemove"),
|
||||
|
@ -1712,11 +1712,10 @@ TextEditor::SelectEntireDocument(Selection* aSelection)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
already_AddRefed<EventTarget>
|
||||
EventTarget*
|
||||
TextEditor::GetDOMEventTarget()
|
||||
{
|
||||
nsCOMPtr<EventTarget> copy = mEventTarget;
|
||||
return copy.forget();
|
||||
return mEventTarget;
|
||||
}
|
||||
|
||||
|
||||
|
@ -129,7 +129,7 @@ public:
|
||||
virtual nsresult HandleKeyPressEvent(
|
||||
WidgetKeyboardEvent* aKeyboardEvent) override;
|
||||
|
||||
virtual already_AddRefed<dom::EventTarget> GetDOMEventTarget() override;
|
||||
virtual dom::EventTarget* GetDOMEventTarget() override;
|
||||
|
||||
virtual nsresult BeginIMEComposition(WidgetCompositionEvent* aEvent) override;
|
||||
virtual nsresult UpdateIMEComposition(
|
||||
|
@ -1555,14 +1555,15 @@ public:
|
||||
#ifdef MOZ_WIDGET_GTK
|
||||
static already_AddRefed<ScaledFont>
|
||||
CreateScaledFontForFontconfigFont(cairo_scaled_font_t* aScaledFont, FcPattern* aPattern,
|
||||
const RefPtr<UnscaledFont>& aUnscaledFont, Float aSize);
|
||||
const RefPtr<UnscaledFont>& aUnscaledFont, Float aSize,
|
||||
bool aNeedsOblique = false);
|
||||
#endif
|
||||
|
||||
#ifdef XP_DARWIN
|
||||
static already_AddRefed<ScaledFont>
|
||||
CreateScaledFontForMacFont(CGFontRef aCGFont, const RefPtr<UnscaledFont>& aUnscaledFont, Float aSize,
|
||||
const Color& aFontSmoothingBackgroundColor, bool aUseFontSmoothing = true,
|
||||
bool aApplySyntheticBold = false);
|
||||
bool aApplySyntheticBold = false, bool aNeedsOblique = false);
|
||||
#endif
|
||||
|
||||
/**
|
||||
@ -1728,6 +1729,7 @@ public:
|
||||
Float aSize,
|
||||
bool aUseEmbeddedBitmap,
|
||||
bool aForceGDIMode,
|
||||
bool aNeedsOblique,
|
||||
IDWriteRenderingParams *aParams,
|
||||
Float aGamma,
|
||||
Float aContrast);
|
||||
|
@ -653,9 +653,10 @@ Factory::CreateScaledFontWithCairo(const NativeFont& aNativeFont,
|
||||
#ifdef MOZ_WIDGET_GTK
|
||||
already_AddRefed<ScaledFont>
|
||||
Factory::CreateScaledFontForFontconfigFont(cairo_scaled_font_t* aScaledFont, FcPattern* aPattern,
|
||||
const RefPtr<UnscaledFont>& aUnscaledFont, Float aSize)
|
||||
const RefPtr<UnscaledFont>& aUnscaledFont, Float aSize,
|
||||
bool aNeedsOblique)
|
||||
{
|
||||
return MakeAndAddRef<ScaledFontFontconfig>(aScaledFont, aPattern, aUnscaledFont, aSize);
|
||||
return MakeAndAddRef<ScaledFontFontconfig>(aScaledFont, aPattern, aUnscaledFont, aSize, aNeedsOblique);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -666,12 +667,13 @@ Factory::CreateScaledFontForMacFont(CGFontRef aCGFont,
|
||||
Float aSize,
|
||||
const Color& aFontSmoothingBackgroundColor,
|
||||
bool aUseFontSmoothing,
|
||||
bool aApplySyntheticBold)
|
||||
bool aApplySyntheticBold,
|
||||
bool aNeedsOblique)
|
||||
{
|
||||
return MakeAndAddRef<ScaledFontMac>(
|
||||
aCGFont, aUnscaledFont, aSize, false,
|
||||
aFontSmoothingBackgroundColor, aUseFontSmoothing,
|
||||
aApplySyntheticBold);
|
||||
aApplySyntheticBold, aNeedsOblique);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -950,12 +952,13 @@ Factory::CreateScaledFontForDWriteFont(IDWriteFontFace* aFontFace,
|
||||
float aSize,
|
||||
bool aUseEmbeddedBitmap,
|
||||
bool aForceGDIMode,
|
||||
bool aNeedsOblique,
|
||||
IDWriteRenderingParams* aParams,
|
||||
Float aGamma,
|
||||
Float aContrast)
|
||||
{
|
||||
return MakeAndAddRef<ScaledFontDWrite>(aFontFace, aUnscaledFont, aSize,
|
||||
aUseEmbeddedBitmap, aForceGDIMode,
|
||||
aUseEmbeddedBitmap, aForceGDIMode, aNeedsOblique,
|
||||
aParams, aGamma, aContrast,
|
||||
aStyle);
|
||||
}
|
||||
|
@ -110,6 +110,7 @@ ScaledFontDWrite::ScaledFontDWrite(IDWriteFontFace *aFontFace,
|
||||
Float aSize,
|
||||
bool aUseEmbeddedBitmap,
|
||||
bool aForceGDIMode,
|
||||
bool aNeedsOblique,
|
||||
IDWriteRenderingParams* aParams,
|
||||
Float aGamma,
|
||||
Float aContrast,
|
||||
@ -118,6 +119,7 @@ ScaledFontDWrite::ScaledFontDWrite(IDWriteFontFace *aFontFace,
|
||||
, mFontFace(aFontFace)
|
||||
, mUseEmbeddedBitmap(aUseEmbeddedBitmap)
|
||||
, mForceGDIMode(aForceGDIMode)
|
||||
, mNeedsOblique(aNeedsOblique)
|
||||
, mParams(aParams)
|
||||
, mGamma(aGamma)
|
||||
, mContrast(aContrast)
|
||||
@ -404,6 +406,9 @@ ScaledFontDWrite::GetWRFontInstanceOptions(Maybe<wr::FontInstanceOptions>* aOutO
|
||||
if (ForceGDIMode()) {
|
||||
options.flags |= wr::FontInstanceFlags::FORCE_GDI;
|
||||
}
|
||||
if (mNeedsOblique) {
|
||||
options.flags |= wr::FontInstanceFlags::SYNTHETIC_ITALICS;
|
||||
}
|
||||
options.bg_color = wr::ToColorU(Color());
|
||||
*aOutOptions = Some(options);
|
||||
return true;
|
||||
@ -427,6 +432,7 @@ UnscaledFontDWrite::CreateScaledFont(Float aGlyphSize,
|
||||
new ScaledFontDWrite(mFontFace, this, aGlyphSize,
|
||||
instanceData->mUseEmbeddedBitmap,
|
||||
instanceData->mForceGDIMode,
|
||||
false,
|
||||
nullptr,
|
||||
instanceData->mGamma,
|
||||
instanceData->mContrast);
|
||||
|
@ -30,6 +30,7 @@ public:
|
||||
, mFontFace(aFont)
|
||||
, mUseEmbeddedBitmap(false)
|
||||
, mForceGDIMode(false)
|
||||
, mNeedsOblique(false)
|
||||
, mGamma(2.2f)
|
||||
, mContrast(1.0f)
|
||||
{}
|
||||
@ -39,6 +40,7 @@ public:
|
||||
Float aSize,
|
||||
bool aUseEmbeddedBitmap,
|
||||
bool aForceGDIMode,
|
||||
bool aNeedsOblique,
|
||||
IDWriteRenderingParams *aParams,
|
||||
Float aGamma,
|
||||
Float aContrast,
|
||||
@ -74,6 +76,7 @@ public:
|
||||
RefPtr<IDWriteFontFace> mFontFace;
|
||||
bool mUseEmbeddedBitmap;
|
||||
bool mForceGDIMode;
|
||||
bool mNeedsOblique;
|
||||
// DrawTargetD2D1 requires the IDWriteRenderingParams,
|
||||
// but we also separately need to store the gamma and contrast
|
||||
// since Skia needs to be able to access these without having
|
||||
|
@ -25,9 +25,11 @@ namespace gfx {
|
||||
ScaledFontFontconfig::ScaledFontFontconfig(cairo_scaled_font_t* aScaledFont,
|
||||
FcPattern* aPattern,
|
||||
const RefPtr<UnscaledFont>& aUnscaledFont,
|
||||
Float aSize)
|
||||
: ScaledFontBase(aUnscaledFont, aSize),
|
||||
mPattern(aPattern)
|
||||
Float aSize,
|
||||
bool aNeedsOblique)
|
||||
: ScaledFontBase(aUnscaledFont, aSize)
|
||||
, mPattern(aPattern)
|
||||
, mNeedsOblique(aNeedsOblique)
|
||||
{
|
||||
SetCairoScaledFont(aScaledFont);
|
||||
FcPatternReference(aPattern);
|
||||
@ -248,6 +250,10 @@ ScaledFontFontconfig::GetWRFontInstanceOptions(Maybe<wr::FontInstanceOptions>* a
|
||||
platformOptions.lcd_filter = wr::FontLCDFilter::Legacy;
|
||||
platformOptions.hinting = wr::FontHinting::Normal;
|
||||
|
||||
if (mNeedsOblique) {
|
||||
options.flags |= wr::FontInstanceFlags::SYNTHETIC_ITALICS;
|
||||
}
|
||||
|
||||
FcBool autohint;
|
||||
if (FcPatternGetBool(mPattern, FC_AUTOHINT, 0, &autohint) == FcResultMatch && autohint) {
|
||||
options.flags |= wr::FontInstanceFlags::FORCE_AUTOHINT;
|
||||
|
@ -22,7 +22,8 @@ class ScaledFontFontconfig : public ScaledFontBase
|
||||
public:
|
||||
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(ScaledFontFontconfig, override)
|
||||
ScaledFontFontconfig(cairo_scaled_font_t* aScaledFont, FcPattern* aPattern,
|
||||
const RefPtr<UnscaledFont>& aUnscaledFont, Float aSize);
|
||||
const RefPtr<UnscaledFont>& aUnscaledFont, Float aSize,
|
||||
bool aNeedsOblique = false);
|
||||
~ScaledFontFontconfig();
|
||||
|
||||
FontType GetType() const override { return FontType::FONTCONFIG; }
|
||||
@ -75,6 +76,7 @@ private:
|
||||
NativeFontResource* aNativeFontResource = nullptr);
|
||||
|
||||
FcPattern* mPattern;
|
||||
bool mNeedsOblique;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -111,12 +111,14 @@ ScaledFontMac::ScaledFontMac(CGFontRef aFont,
|
||||
bool aOwnsFont,
|
||||
const Color &aFontSmoothingBackgroundColor,
|
||||
bool aUseFontSmoothing,
|
||||
bool aApplySyntheticBold)
|
||||
bool aApplySyntheticBold,
|
||||
bool aNeedsOblique)
|
||||
: ScaledFontBase(aUnscaledFont, aSize)
|
||||
, mFont(aFont)
|
||||
, mFontSmoothingBackgroundColor(aFontSmoothingBackgroundColor)
|
||||
, mUseFontSmoothing(aUseFontSmoothing)
|
||||
, mApplySyntheticBold(aApplySyntheticBold)
|
||||
, mNeedsOblique(aNeedsOblique)
|
||||
{
|
||||
if (!sSymbolLookupDone) {
|
||||
CTFontDrawGlyphsPtr =
|
||||
@ -418,6 +420,9 @@ ScaledFontMac::GetWRFontInstanceOptions(Maybe<wr::FontInstanceOptions>* aOutOpti
|
||||
if (mApplySyntheticBold) {
|
||||
options.flags |= wr::FontInstanceFlags::SYNTHETIC_BOLD;
|
||||
}
|
||||
if (mNeedsOblique) {
|
||||
options.flags |= wr::FontInstanceFlags::SYNTHETIC_ITALICS;
|
||||
}
|
||||
options.bg_color = wr::ToColorU(mFontSmoothingBackgroundColor);
|
||||
*aOutOptions = Some(options);
|
||||
return true;
|
||||
|
@ -28,7 +28,9 @@ public:
|
||||
ScaledFontMac(CGFontRef aFont, const RefPtr<UnscaledFont>& aUnscaledFont, Float aSize,
|
||||
bool aOwnsFont = false,
|
||||
const Color &aFontSmoothingBackgroundColor = Color(),
|
||||
bool aUseFontSmoothing = true, bool aApplySyntheticBold = false);
|
||||
bool aUseFontSmoothing = true,
|
||||
bool aApplySyntheticBold = false,
|
||||
bool aNeedsOblique = false);
|
||||
~ScaledFontMac();
|
||||
|
||||
FontType GetType() const override { return FontType::MAC; }
|
||||
@ -58,6 +60,7 @@ private:
|
||||
Color mFontSmoothingBackgroundColor;
|
||||
bool mUseFontSmoothing;
|
||||
bool mApplySyntheticBold;
|
||||
bool mNeedsOblique;
|
||||
|
||||
typedef void (CTFontDrawGlyphsFuncT)(CTFontRef,
|
||||
const CGGlyph[], const CGPoint[],
|
||||
|
@ -555,10 +555,14 @@ Renderer11::Renderer11(egl::Display *display)
|
||||
ASSERT(mEGLDevice != nullptr);
|
||||
mCreatedWithDeviceEXT = true;
|
||||
|
||||
const auto &attributes = mDisplay->getAttributeMap();
|
||||
const EGLenum presentPath = static_cast<EGLenum>(attributes.get(
|
||||
EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE, EGL_EXPERIMENTAL_PRESENT_PATH_COPY_ANGLE));
|
||||
mPresentPathFastEnabled = (presentPath == EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE);
|
||||
|
||||
// Also set EGL_PLATFORM_ANGLE_ANGLE variables, in case they're used elsewhere in ANGLE
|
||||
// mAvailableFeatureLevels defaults to empty
|
||||
mRequestedDriverType = D3D_DRIVER_TYPE_UNKNOWN;
|
||||
mPresentPathFastEnabled = false;
|
||||
}
|
||||
|
||||
// The D3D11 renderer must choose the D3D9 debug annotator because the D3D11 interface
|
||||
|
@ -20,7 +20,10 @@
|
||||
#include "nsIGfxInfo.h"
|
||||
#include "nsPrintfCString.h"
|
||||
#ifdef XP_WIN
|
||||
#include "mozilla/gfx/DeviceManagerDx.h"
|
||||
#include "nsWindowsHelpers.h"
|
||||
|
||||
#include <d3d11.h>
|
||||
#endif
|
||||
#include "OGLShaderProgram.h"
|
||||
#include "prenv.h"
|
||||
@ -149,16 +152,26 @@ GetAndInitWARPDisplay(GLLibraryEGL& egl, void* displayType)
|
||||
static EGLDisplay
|
||||
GetAndInitDisplayForWebRender(GLLibraryEGL& egl, void* displayType)
|
||||
{
|
||||
const EGLint attrib_list[] = { LOCAL_EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE,
|
||||
LOCAL_EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE,
|
||||
LOCAL_EGL_PLATFORM_ANGLE_TYPE_ANGLE,
|
||||
LOCAL_EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
|
||||
LOCAL_EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE,
|
||||
#ifdef XP_WIN
|
||||
const EGLint attrib_list[] = { LOCAL_EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE,
|
||||
LOCAL_EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE,
|
||||
LOCAL_EGL_NONE };
|
||||
EGLDisplay display = egl.fGetPlatformDisplayEXT(LOCAL_EGL_PLATFORM_ANGLE_ANGLE,
|
||||
displayType,
|
||||
attrib_list);
|
||||
RefPtr<ID3D11Device> d3d11Device = gfx::DeviceManagerDx::Get()->GetCompositorDevice();
|
||||
if (!d3d11Device) {
|
||||
gfxCriticalNote << "Failed to get compositor device for EGLDisplay";
|
||||
return EGL_NO_DISPLAY;
|
||||
}
|
||||
EGLDeviceEXT eglDevice = egl.fCreateDeviceANGLE(LOCAL_EGL_D3D11_DEVICE_ANGLE, reinterpret_cast<void *>(d3d11Device.get()), nullptr);
|
||||
if (!eglDevice) {
|
||||
gfxCriticalNote << "Failed to get EGLDeviceEXT of D3D11Device";
|
||||
return EGL_NO_DISPLAY;
|
||||
}
|
||||
// Create an EGLDisplay using the EGLDevice
|
||||
EGLDisplay display = egl.fGetPlatformDisplayEXT(LOCAL_EGL_PLATFORM_DEVICE_EXT, eglDevice, attrib_list);
|
||||
if (!display) {
|
||||
gfxCriticalNote << "Failed to get EGLDisplay of D3D11Device";
|
||||
return EGL_NO_DISPLAY;
|
||||
}
|
||||
|
||||
if (display == EGL_NO_DISPLAY) {
|
||||
const EGLint err = egl.fGetError();
|
||||
@ -169,10 +182,13 @@ GetAndInitDisplayForWebRender(GLLibraryEGL& egl, void* displayType)
|
||||
return EGL_NO_DISPLAY;
|
||||
}
|
||||
|
||||
if (!egl.fInitialize(display, nullptr, nullptr))
|
||||
if (!egl.fInitialize(display, nullptr, nullptr)) {
|
||||
return EGL_NO_DISPLAY;
|
||||
|
||||
}
|
||||
return display;
|
||||
#else
|
||||
return EGL_NO_DISPLAY;
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool
|
||||
@ -492,6 +508,16 @@ GLLibraryEGL::EnsureInitialized(bool forceAccel, nsACString* const out_failureId
|
||||
gfxCriticalError() << "Failed to load ANGLE symbols!";
|
||||
return false;
|
||||
}
|
||||
MOZ_ASSERT(IsExtensionSupported(ANGLE_platform_angle_d3d));
|
||||
const GLLibraryLoader::SymLoadStruct createDeviceSymbols[] = {
|
||||
SYMBOL(CreateDeviceANGLE),
|
||||
SYMBOL(ReleaseDeviceANGLE),
|
||||
END_OF_SYMBOLS
|
||||
};
|
||||
if (!fnLoadSymbols(createDeviceSymbols)) {
|
||||
NS_ERROR("EGL supports ANGLE_device_creation without exposing its functions!");
|
||||
MarkExtensionUnsupported(ANGLE_device_creation);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsExtensionSupported(ANGLE_platform_angle_d3d)) {
|
||||
@ -683,18 +709,6 @@ GLLibraryEGL::EnsureInitialized(bool forceAccel, nsACString* const out_failureId
|
||||
}
|
||||
}
|
||||
|
||||
if (IsExtensionSupported(ANGLE_device_creation)) {
|
||||
const GLLibraryLoader::SymLoadStruct createDeviceSymbols[] = {
|
||||
SYMBOL(CreateDeviceANGLE),
|
||||
SYMBOL(ReleaseDeviceANGLE),
|
||||
END_OF_SYMBOLS
|
||||
};
|
||||
if (!fnLoadSymbols(createDeviceSymbols)) {
|
||||
NS_ERROR("EGL supports ANGLE_device_creation without exposing its functions!");
|
||||
MarkExtensionUnsupported(ANGLE_device_creation);
|
||||
}
|
||||
}
|
||||
|
||||
mInitialized = true;
|
||||
reporter.SetSuccessful();
|
||||
return true;
|
||||
|
@ -77,19 +77,10 @@ gfxDWriteFont::gfxDWriteFont(const RefPtr<UnscaledFontDWrite>& aUnscaledFont,
|
||||
, mCairoFontFace(nullptr)
|
||||
, mMetrics(nullptr)
|
||||
, mSpaceGlyph(0)
|
||||
, mNeedsOblique(false)
|
||||
, mNeedsBold(aNeedsBold)
|
||||
, mUseSubpixelPositions(false)
|
||||
, mAllowManualShowGlyphs(true)
|
||||
{
|
||||
if ((GetStyle()->style != NS_FONT_STYLE_NORMAL) &&
|
||||
aFontEntry->IsUpright() &&
|
||||
GetStyle()->allowSyntheticStyle) {
|
||||
// For this we always use the font_matrix for uniformity. Not the
|
||||
// DWrite simulation.
|
||||
mNeedsOblique = true;
|
||||
}
|
||||
|
||||
mFontFace = aUnscaledFont->GetFontFace();
|
||||
|
||||
// If the IDWriteFontFace1 interface is available, we can use that for
|
||||
@ -695,6 +686,7 @@ gfxDWriteFont::GetScaledFont(mozilla::gfx::DrawTarget *aTarget)
|
||||
GetAdjustedSize(),
|
||||
useEmbeddedBitmap,
|
||||
forceGDI,
|
||||
IsSyntheticOblique(),
|
||||
params,
|
||||
params->GetGamma(),
|
||||
params->GetEnhancedContrast());
|
||||
|
@ -101,7 +101,6 @@ protected:
|
||||
|
||||
uint32_t mSpaceGlyph;
|
||||
|
||||
bool mNeedsOblique;
|
||||
bool mNeedsBold;
|
||||
bool mUseSubpixelPositions;
|
||||
bool mAllowManualShowGlyphs;
|
||||
|
@ -1308,7 +1308,8 @@ gfxFontconfigFont::GetScaledFont(mozilla::gfx::DrawTarget *aTarget)
|
||||
Factory::CreateScaledFontForFontconfigFont(GetCairoScaledFont(),
|
||||
GetPattern(),
|
||||
GetUnscaledFont(),
|
||||
GetAdjustedSize());
|
||||
GetAdjustedSize(),
|
||||
IsSyntheticOblique());
|
||||
}
|
||||
|
||||
RefPtr<ScaledFont> scaledFont(mAzureScaledFont);
|
||||
|
@ -1916,12 +1916,14 @@ gfxFont::DrawOneGlyph(uint32_t aGlyphID, const gfx::Point& aPt,
|
||||
gfx::Point devPt(ToDeviceUnits(aPt.x, runParams.devPerApp),
|
||||
ToDeviceUnits(aPt.y, runParams.devPerApp));
|
||||
|
||||
gfxContextMatrixAutoSaveRestore matrixRestore;
|
||||
|
||||
if (FC == FontComplexityT::ComplexFont) {
|
||||
const FontDrawParams& fontParams(aBuffer.mFontParams);
|
||||
|
||||
if (fontParams.needsOblique && fontParams.isVerticalFont) {
|
||||
auto* textDrawer = runParams.context->GetTextDrawer();
|
||||
|
||||
gfxContextMatrixAutoSaveRestore matrixRestore;
|
||||
|
||||
if (fontParams.needsOblique && fontParams.isVerticalFont && !textDrawer) {
|
||||
// We have to flush each glyph individually when doing
|
||||
// synthetic-oblique for vertical-upright text, because
|
||||
// the skew transform needs to be applied to a separate
|
||||
@ -1958,12 +1960,9 @@ gfxFont::DrawOneGlyph(uint32_t aGlyphID, const gfx::Point& aPt,
|
||||
aGlyphID)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
aBuffer.OutputGlyph(aGlyphID, devPt);
|
||||
aBuffer.OutputGlyph(aGlyphID, devPt);
|
||||
|
||||
if (FC == FontComplexityT::ComplexFont) {
|
||||
const FontDrawParams& fontParams(aBuffer.mFontParams);
|
||||
// Synthetic bolding (if required) by multi-striking.
|
||||
for (int32_t i = 0; i < fontParams.extraStrikes; ++i) {
|
||||
if (fontParams.isVerticalFont) {
|
||||
@ -1974,9 +1973,11 @@ gfxFont::DrawOneGlyph(uint32_t aGlyphID, const gfx::Point& aPt,
|
||||
aBuffer.OutputGlyph(aGlyphID, devPt);
|
||||
}
|
||||
|
||||
if (fontParams.needsOblique && fontParams.isVerticalFont) {
|
||||
if (fontParams.needsOblique && fontParams.isVerticalFont && !textDrawer) {
|
||||
aBuffer.Flush();
|
||||
}
|
||||
} else {
|
||||
aBuffer.OutputGlyph(aGlyphID, devPt);
|
||||
}
|
||||
|
||||
*aEmittedGlyphs = true;
|
||||
@ -1992,7 +1993,8 @@ gfxFont::DrawMissingGlyph(const TextRunDrawParams& aRunParams,
|
||||
// we don't have to draw the hexbox for them.
|
||||
float advance = aDetails->mAdvance;
|
||||
if (aRunParams.drawMode != DrawMode::GLYPH_PATH && advance > 0) {
|
||||
if (auto* textDrawer = aRunParams.context->GetTextDrawer()) {
|
||||
auto* textDrawer = aRunParams.context->GetTextDrawer();
|
||||
if (textDrawer) {
|
||||
textDrawer->FoundUnsupportedFeature();
|
||||
return false;
|
||||
}
|
||||
@ -2012,7 +2014,7 @@ gfxFont::DrawMissingGlyph(const TextRunDrawParams& aRunParams,
|
||||
// of the drawTarget's transform, we need to undo
|
||||
// this before drawing the hexbox. (Bug 983985)
|
||||
gfxContextMatrixAutoSaveRestore matrixRestore;
|
||||
if (aFontParams.needsOblique && !aFontParams.isVerticalFont) {
|
||||
if (aFontParams.needsOblique && !aFontParams.isVerticalFont && !textDrawer) {
|
||||
matrixRestore.SetContext(aRunParams.context);
|
||||
gfx::Matrix mat =
|
||||
aRunParams.context->CurrentMatrix().
|
||||
@ -2096,12 +2098,10 @@ gfxFont::Draw(const gfxTextRun *aTextRun, uint32_t aStart, uint32_t aEnd,
|
||||
|
||||
auto* textDrawer = aRunParams.context->GetTextDrawer();
|
||||
|
||||
fontParams.needsOblique = mFontEntry->IsUpright() &&
|
||||
mStyle.style != NS_FONT_STYLE_NORMAL &&
|
||||
mStyle.allowSyntheticStyle;
|
||||
fontParams.needsOblique = IsSyntheticOblique();
|
||||
fontParams.haveSVGGlyphs = GetFontEntry()->TryGetSVGData(this);
|
||||
|
||||
if ((fontParams.needsOblique || fontParams.haveSVGGlyphs) && textDrawer) {
|
||||
if (fontParams.haveSVGGlyphs && textDrawer) {
|
||||
textDrawer->FoundUnsupportedFeature();
|
||||
return;
|
||||
}
|
||||
@ -2156,7 +2156,7 @@ gfxFont::Draw(const gfxTextRun *aTextRun, uint32_t aStart, uint32_t aEnd,
|
||||
aRunParams.context->SetMatrixDouble(mat);
|
||||
}
|
||||
|
||||
if (fontParams.needsOblique && !fontParams.isVerticalFont) {
|
||||
if (fontParams.needsOblique && !fontParams.isVerticalFont && !textDrawer) {
|
||||
// Adjust matrix for synthetic-oblique, except if we're doing vertical-
|
||||
// upright text, in which case this will be handled for each glyph
|
||||
// individually in DrawOneGlyph.
|
||||
|
@ -1794,6 +1794,12 @@ public:
|
||||
|
||||
bool IsSyntheticBold() { return mApplySyntheticBold; }
|
||||
|
||||
bool IsSyntheticOblique() {
|
||||
return mFontEntry->IsUpright() &&
|
||||
mStyle.style != NS_FONT_STYLE_NORMAL &&
|
||||
mStyle.allowSyntheticStyle;
|
||||
}
|
||||
|
||||
// Amount by which synthetic bold "fattens" the glyphs:
|
||||
// For size S up to a threshold size T, we use (0.25 + 3S / 4T),
|
||||
// so that the result ranges from 0.25 to 1.0; thereafter,
|
||||
|
@ -509,7 +509,8 @@ gfxMacFont::GetScaledFont(DrawTarget *aTarget)
|
||||
GetAdjustedSize(),
|
||||
Color::FromABGR(mFontSmoothingBackgroundColor),
|
||||
!mStyle.useGrayscaleAntialiasing,
|
||||
IsSyntheticBold());
|
||||
IsSyntheticBold(),
|
||||
IsSyntheticOblique());
|
||||
if (!mAzureScaledFont) {
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -471,10 +471,12 @@ class MethodDecl(Node):
|
||||
def __init__(self, name, params=[ ], ret=Type('void'),
|
||||
virtual=0, const=0, pure=0, static=0, warn_unused=0,
|
||||
inline=0, force_inline=0, never_inline=0,
|
||||
typeop=None,
|
||||
typeop=None, override=0,
|
||||
T=None):
|
||||
assert not (virtual and static)
|
||||
assert not pure or virtual # pure => virtual
|
||||
assert not override or virtual # override => virtual
|
||||
assert not (override and pure)
|
||||
assert not (static and typeop)
|
||||
assert not (name and typeop)
|
||||
assert name is None or isinstance(name, str)
|
||||
@ -494,6 +496,7 @@ class MethodDecl(Node):
|
||||
self.virtual = virtual # bool
|
||||
self.const = const # bool
|
||||
self.pure = pure # bool
|
||||
self.override = override # bool
|
||||
self.static = static # bool
|
||||
self.warn_unused = warn_unused # bool
|
||||
self.force_inline = (force_inline or T) # bool
|
||||
@ -511,6 +514,7 @@ class MethodDecl(Node):
|
||||
virtual=self.virtual,
|
||||
const=self.const,
|
||||
pure=self.pure,
|
||||
override=self.override,
|
||||
static=self.static,
|
||||
warn_unused=self.warn_unused,
|
||||
inline=self.inline,
|
||||
@ -555,7 +559,7 @@ class ConstructorDefn(MethodDefn):
|
||||
self.memberinits = memberinits
|
||||
|
||||
class DestructorDecl(MethodDecl):
|
||||
def __init__(self, name, virtual=0, force_inline=0, inline=0):
|
||||
def __init__(self, name, virtual=0, override=0, force_inline=0, inline=0):
|
||||
MethodDecl.__init__(self, name, params=[ ], ret=None,
|
||||
virtual=virtual,
|
||||
force_inline=force_inline, inline=inline)
|
||||
|
@ -192,6 +192,9 @@ class CxxCodeGen(CodePrinter, Visitor):
|
||||
|
||||
def visitMethodDecl(self, md):
|
||||
assert not (md.static and md.virtual)
|
||||
assert not (md.override and md.pure)
|
||||
assert not md.pure or md.virtual # pure => virtual
|
||||
assert not md.override or md.virtual # override => virtual
|
||||
|
||||
if md.T:
|
||||
self.write('template<')
|
||||
@ -208,7 +211,7 @@ class CxxCodeGen(CodePrinter, Visitor):
|
||||
self.write('MOZ_NEVER_INLINE ')
|
||||
if md.static:
|
||||
self.write('static ')
|
||||
if md.virtual:
|
||||
if md.virtual and not md.override:
|
||||
self.write('virtual ')
|
||||
if md.ret:
|
||||
if md.only_for_definition:
|
||||
@ -232,6 +235,9 @@ class CxxCodeGen(CodePrinter, Visitor):
|
||||
if md.ret and md.only_for_definition:
|
||||
self.write(' -> ')
|
||||
md.ret.accept(self)
|
||||
|
||||
if md.override:
|
||||
self.write(' override')
|
||||
if md.pure:
|
||||
self.write(' = 0')
|
||||
|
||||
|
@ -2787,23 +2787,23 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||
MethodDecl(p.processingErrorVar().name,
|
||||
params=[ Param(_Result.Type(), 'aCode'),
|
||||
Param(Type('char', const=1, ptr=1), 'aReason') ],
|
||||
virtual=1))
|
||||
virtual=1, override=1))
|
||||
|
||||
# bool ShouldContinueFromReplyTimeout(); default to |true|
|
||||
shouldcontinue = MethodDefn(
|
||||
MethodDecl(p.shouldContinueFromTimeoutVar().name,
|
||||
ret=Type.BOOL, virtual=1))
|
||||
ret=Type.BOOL, virtual=1, override=1))
|
||||
shouldcontinue.addstmt(StmtReturn.TRUE)
|
||||
|
||||
# void Entered*()/Exited*(); default to no-op
|
||||
entered = MethodDefn(
|
||||
MethodDecl(p.enteredCxxStackVar().name, virtual=1))
|
||||
MethodDecl(p.enteredCxxStackVar().name, virtual=1, override=1))
|
||||
exited = MethodDefn(
|
||||
MethodDecl(p.exitedCxxStackVar().name, virtual=1))
|
||||
MethodDecl(p.exitedCxxStackVar().name, virtual=1, override=1))
|
||||
enteredcall = MethodDefn(
|
||||
MethodDecl(p.enteredCallVar().name, virtual=1))
|
||||
MethodDecl(p.enteredCallVar().name, virtual=1, override=1))
|
||||
exitedcall = MethodDefn(
|
||||
MethodDecl(p.exitedCallVar().name, virtual=1))
|
||||
MethodDecl(p.exitedCallVar().name, virtual=1, override=1))
|
||||
|
||||
self.cls.addstmts([ processingerror,
|
||||
shouldcontinue,
|
||||
@ -2948,7 +2948,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||
params.append(Decl(Type('Message', ref=1, ptr=1),
|
||||
replyvar.name))
|
||||
|
||||
method = MethodDefn(MethodDecl(name, virtual=True,
|
||||
method = MethodDefn(MethodDecl(name, virtual=1, override=1,
|
||||
params=params, ret=_Result.Type()))
|
||||
|
||||
if not switch:
|
||||
@ -3028,13 +3028,13 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||
|
||||
# int32_t GetProtocolTypeId() { return PFoo; }
|
||||
gettypetag = MethodDefn(
|
||||
MethodDecl('GetProtocolTypeId', ret=_actorTypeTagType()))
|
||||
MethodDecl('GetProtocolTypeId', ret=_actorTypeTagType(), virtual=1, override=1))
|
||||
gettypetag.addstmt(StmtReturn(_protocolId(ptype)))
|
||||
self.cls.addstmts([ gettypetag, Whitespace.NL ])
|
||||
|
||||
if ptype.isToplevel():
|
||||
# OnChannelClose()
|
||||
onclose = MethodDefn(MethodDecl('OnChannelClose'))
|
||||
onclose = MethodDefn(MethodDecl('OnChannelClose', virtual=1, override=1))
|
||||
onclose.addstmts([
|
||||
StmtExpr(ExprCall(destroysubtreevar,
|
||||
args=[ _DestroyReason.NormalShutdown ])),
|
||||
@ -3045,7 +3045,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||
self.cls.addstmts([ onclose, Whitespace.NL ])
|
||||
|
||||
# OnChannelError()
|
||||
onerror = MethodDefn(MethodDecl('OnChannelError'))
|
||||
onerror = MethodDefn(MethodDecl('OnChannelError', virtual=1, override=1))
|
||||
onerror.addstmts([
|
||||
StmtExpr(ExprCall(destroysubtreevar,
|
||||
args=[ _DestroyReason.AbnormalShutdown ])),
|
||||
@ -3079,7 +3079,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||
actorname = _actorName(p.name, self.side)
|
||||
protocolname = MethodDefn(MethodDecl(
|
||||
'ProtocolName', params=[],
|
||||
const=1, virtual=1, ret=Type('char', const=1, ptr=1)))
|
||||
const=1, virtual=1, override=1, ret=Type('char', const=1, ptr=1)))
|
||||
protocolname.addstmts([
|
||||
StmtReturn(ExprLiteral.String(actorname))
|
||||
])
|
||||
@ -3242,13 +3242,13 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||
getchannel = MethodDefn(MethodDecl(
|
||||
p.getChannelMethod().name,
|
||||
ret=Type('MessageChannel', ptr=1),
|
||||
virtual=1))
|
||||
virtual=1, override=1))
|
||||
getchannel.addstmt(StmtReturn(ExprAddrOf(p.channelVar())))
|
||||
|
||||
getchannelconst = MethodDefn(MethodDecl(
|
||||
p.getChannelMethod().name,
|
||||
ret=Type('MessageChannel', ptr=1, const=1),
|
||||
virtual=1, const=1))
|
||||
virtual=1, override=1, const=1))
|
||||
getchannelconst.addstmt(StmtReturn(ExprAddrOf(p.channelVar())))
|
||||
|
||||
methods += [ getchannel,
|
||||
@ -3296,7 +3296,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||
p.removeManageeMethod().name,
|
||||
params=[ Decl(_protocolIdType(), pvar.name),
|
||||
Decl(protocolbase, listenervar.name) ],
|
||||
virtual=1))
|
||||
virtual=1, override=1))
|
||||
|
||||
if not len(p.managesStmts):
|
||||
removemanagee.addstmts([ _fatalError('unreached'), StmtReturn() ])
|
||||
@ -4893,6 +4893,7 @@ def _splitMethodDefn(md, clsname):
|
||||
saveddecl = deepcopy(md.decl)
|
||||
md.decl.name = (clsname +'::'+ md.decl.name)
|
||||
md.decl.virtual = 0
|
||||
md.decl.override = 0
|
||||
md.decl.static = 0
|
||||
md.decl.warn_unused = 0
|
||||
md.decl.never_inline = 0
|
||||
|
@ -553,6 +553,19 @@ WasmThreadsSupported(JSContext* cx, unsigned argc, Value* vp)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
WasmSignExtensionSupported(JSContext* cx, unsigned argc, Value* vp)
|
||||
{
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
#ifdef ENABLE_WASM_SIGNEXTEND_OPS
|
||||
bool isSupported = true;
|
||||
#else
|
||||
bool isSupported = false;
|
||||
#endif
|
||||
args.rval().setBoolean(isSupported);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
WasmCompileMode(JSContext* cx, unsigned argc, Value* vp)
|
||||
{
|
||||
@ -2527,7 +2540,7 @@ testingFunc_inIon(JSContext* cx, unsigned argc, Value* vp)
|
||||
ScriptFrameIter iter(cx);
|
||||
if (!iter.done() && iter.isIon()) {
|
||||
// Reset the counter of the IonScript's script.
|
||||
jit::JSJitFrameIter jitIter(cx);
|
||||
jit::JSJitFrameIter jitIter(cx->activation()->asJit());
|
||||
++jitIter;
|
||||
jitIter.script()->resetWarmUpResetCounter();
|
||||
} else {
|
||||
@ -5259,6 +5272,11 @@ gc::ZealModeHelpText),
|
||||
JS_FN_HELP("wasmThreadsSupported", WasmThreadsSupported, 0, 0,
|
||||
"wasmThreadsSupported()",
|
||||
" Returns a boolean indicating whether the WebAssembly threads proposal is\n"
|
||||
" supported on the current device."),
|
||||
|
||||
JS_FN_HELP("wasmSignExtensionSupported", WasmSignExtensionSupported, 0, 0,
|
||||
"wasmSignExtensionSupported()",
|
||||
" Returns a boolean indicating whether the WebAssembly sign extension opcodes are\n"
|
||||
" supported on the current device."),
|
||||
|
||||
JS_FN_HELP("wasmCompileMode", WasmCompileMode, 0, 0,
|
||||
|
@ -570,3 +570,16 @@ for (let addr of [1,2,3,5,6,7]) {
|
||||
(atomic.wake (get_local 0) (i32.const 1))))`).exports.f(addr),
|
||||
RuntimeError, unaligned);
|
||||
}
|
||||
|
||||
// Ensure alias analysis works even if atomic and non-atomic accesses are
|
||||
// mixed.
|
||||
assertErrorMessage(() => wasmEvalText(`(module
|
||||
(memory 0 1 shared)
|
||||
(func (export "main")
|
||||
i32.const 1
|
||||
i32.const 2816
|
||||
i32.atomic.rmw16_u.xchg align=2
|
||||
i32.load16_s offset=83 align=1
|
||||
drop
|
||||
)
|
||||
)`).exports.main(), RuntimeError, unaligned);
|
||||
|
@ -238,7 +238,7 @@ testTrap('i64', 'trunc_u', 'f32', "-infinity");
|
||||
testConversion('i64', 'reinterpret', 'f64', 40.09999999999968, "0x40440ccccccccca0");
|
||||
testConversion('f64', 'reinterpret', 'i64', "0x40440ccccccccca0", 40.09999999999968);
|
||||
|
||||
if (wasmThreadsSupported()) {
|
||||
if (wasmSignExtensionSupported()) {
|
||||
testSignExtension('i32', 'extend8_s', 'i32', 0x7F, 0x7F);
|
||||
testSignExtension('i32', 'extend8_s', 'i32', 0x80, -0x80);
|
||||
testSignExtension('i32', 'extend16_s', 'i32', 0x7FFF, 0x7FFF);
|
||||
|
@ -0,0 +1,20 @@
|
||||
g = newGlobal();
|
||||
g.parent = this;
|
||||
g.eval("(" + function() {
|
||||
Debugger(parent).onExceptionUnwind = function(frame) {}
|
||||
} + ")()")
|
||||
|
||||
o = {};
|
||||
|
||||
let { exports } = wasmEvalText(`
|
||||
(module (import $imp "" "inc") (func) (func $start (call $imp)) (start $start) (export "" $start))
|
||||
`, {
|
||||
"": {
|
||||
inc: function() { o = o.p; }
|
||||
}
|
||||
});
|
||||
|
||||
// after instanciation, the start function has been executed and o is undefined.
|
||||
// This second call will throw in the imported function:
|
||||
|
||||
assertErrorMessage(exports[""], TypeError, /undefined/);
|
@ -144,6 +144,7 @@ GetObject(const MDefinition* ins)
|
||||
case MDefinition::Opcode::WasmStore:
|
||||
case MDefinition::Opcode::WasmCompareExchangeHeap:
|
||||
case MDefinition::Opcode::WasmAtomicBinopHeap:
|
||||
case MDefinition::Opcode::WasmAtomicExchangeHeap:
|
||||
case MDefinition::Opcode::WasmLoadGlobalVar:
|
||||
case MDefinition::Opcode::WasmStoreGlobalVar:
|
||||
case MDefinition::Opcode::ArrayJoin:
|
||||
|
@ -1900,7 +1900,7 @@ jit::FinishBailoutToBaseline(BaselineBailoutInfo* bailoutInfo)
|
||||
RootedScript outerScript(cx, nullptr);
|
||||
|
||||
MOZ_ASSERT(cx->currentlyRunningInJit());
|
||||
JSJitFrameIter iter(cx);
|
||||
JSJitFrameIter iter(cx->activation()->asJit());
|
||||
uint8_t* outerFp = nullptr;
|
||||
|
||||
// Iter currently points at the exit frame. Get the previous frame
|
||||
@ -1962,7 +1962,7 @@ jit::FinishBailoutToBaseline(BaselineBailoutInfo* bailoutInfo)
|
||||
// on.
|
||||
JitActivation* act = cx->activation()->asJit();
|
||||
if (act->hasRematerializedFrame(outerFp)) {
|
||||
JSJitFrameIter iter(cx);
|
||||
JSJitFrameIter iter(cx->activation()->asJit());
|
||||
size_t inlineDepth = numFrames;
|
||||
bool ok = true;
|
||||
while (inlineDepth > 0) {
|
||||
|
@ -1186,7 +1186,7 @@ JitRuntime::generateBaselineDebugModeOSRHandler(JSContext* cx, uint32_t* noFrame
|
||||
|
||||
/* static */ void
|
||||
DebugModeOSRVolatileJitFrameIter::forwardLiveIterators(const CooperatingContext& cx,
|
||||
uint8_t* oldAddr, uint8_t* newAddr)
|
||||
uint8_t* oldAddr, uint8_t* newAddr)
|
||||
{
|
||||
DebugModeOSRVolatileJitFrameIter* iter;
|
||||
for (iter = cx.context()->liveVolatileJitFrameIter_; iter; iter = iter->prev)
|
||||
|
@ -93,7 +93,7 @@ class DebugModeOSRVolatileJitFrameIter : public JitFrameIter
|
||||
|
||||
public:
|
||||
explicit DebugModeOSRVolatileJitFrameIter(JSContext* cx)
|
||||
: JitFrameIter(cx->activation()->asJit())
|
||||
: JitFrameIter(cx->activation()->asJit(), /* mustUnwindActivation */ true)
|
||||
{
|
||||
stack = &cx->liveVolatileJitFrameIter_.ref();
|
||||
prev = *stack;
|
||||
|
@ -142,7 +142,7 @@ BaselineFrame::initForOsr(InterpreterFrame* fp, uint32_t numStackValues)
|
||||
// debugger, wants a valid return address, but it's okay to just pick one.
|
||||
// In debug mode there's always at least 1 ICEntry (since there are always
|
||||
// debug prologue/epilogue calls).
|
||||
JSJitFrameIter frame(cx);
|
||||
JSJitFrameIter frame(cx->activation()->asJit());
|
||||
MOZ_ASSERT(frame.returnAddress() == nullptr);
|
||||
BaselineScript* baseline = fp->script()->baselineScript();
|
||||
frame.current()->setReturnAddress(baseline->returnAddressForIC(baseline->icEntry(0)));
|
||||
|
@ -327,7 +327,7 @@ CacheRegisterAllocator::restoreIonLiveRegisters(MacroAssembler& masm, LiveRegist
|
||||
static void*
|
||||
GetReturnAddressToIonCode(JSContext* cx)
|
||||
{
|
||||
JSJitFrameIter frame(cx);
|
||||
JSJitFrameIter frame(cx->activation()->asJit());
|
||||
MOZ_ASSERT(frame.type() == JitFrame_Exit,
|
||||
"An exit frame is expected as update functions are called with a VMFunction.");
|
||||
|
||||
|
@ -31,11 +31,6 @@ JSJitFrameIter::JSJitFrameIter(const JitActivation* activation)
|
||||
}
|
||||
}
|
||||
|
||||
JSJitFrameIter::JSJitFrameIter(JSContext* cx)
|
||||
: JSJitFrameIter(cx->activation()->asJit())
|
||||
{
|
||||
}
|
||||
|
||||
bool
|
||||
JSJitFrameIter::checkInvalidation() const
|
||||
{
|
||||
|
@ -112,7 +112,6 @@ class JSJitFrameIter
|
||||
public:
|
||||
// See comment above the class.
|
||||
explicit JSJitFrameIter(const JitActivation* activation);
|
||||
explicit JSJitFrameIter(JSContext* cx);
|
||||
|
||||
// Used only by DebugModeOSRVolatileJitFrameIter.
|
||||
void exchangeReturnAddressIfMatch(uint8_t* oldAddr, uint8_t* newAddr) {
|
||||
|
@ -29,7 +29,7 @@ SafepointIndex::resolve()
|
||||
inline BaselineFrame*
|
||||
GetTopBaselineFrame(JSContext* cx)
|
||||
{
|
||||
JSJitFrameIter frame(cx);
|
||||
JSJitFrameIter frame(cx->activation()->asJit());
|
||||
MOZ_ASSERT(frame.type() == JitFrame_Exit);
|
||||
++frame;
|
||||
if (frame.isBaselineStub())
|
||||
|
@ -591,10 +591,7 @@ struct AutoResetLastProfilerFrameOnReturnFromException
|
||||
void
|
||||
HandleExceptionWasm(JSContext* cx, wasm::WasmFrameIter* iter, ResumeFromException* rfe)
|
||||
{
|
||||
// Maintain the wasm invariant that we have wasm frames when unwinding.
|
||||
JitActivation* act = cx->activation()->asJit();
|
||||
act->setWasmExitFP((const wasm::Frame*) act->jsExitFP());
|
||||
|
||||
MOZ_ASSERT(cx->activation()->asJit()->hasWasmExitFP());
|
||||
rfe->kind = ResumeFromException::RESUME_WASM;
|
||||
rfe->framePointer = (uint8_t*) wasm::FailFP;
|
||||
rfe->stackPointer = (uint8_t*) wasm::HandleThrow(cx, *iter);
|
||||
@ -736,19 +733,8 @@ HandleException(ResumeFromException* rfe)
|
||||
return;
|
||||
}
|
||||
|
||||
JitFrameLayout* current = frame.isScripted() ? frame.jsFrame() : nullptr;
|
||||
|
||||
++iter;
|
||||
|
||||
if (current) {
|
||||
// Unwind the frame by updating packedExitFP. This is necessary so
|
||||
// that (1) debugger exception unwind and leave frame hooks don't
|
||||
// see this frame when they use ScriptFrameIter, and (2)
|
||||
// ScriptFrameIter does not crash when accessing an IonScript
|
||||
// that's destroyed by the ionScript->decref call.
|
||||
EnsureBareExitFrame(cx, current);
|
||||
}
|
||||
|
||||
if (overrecursed) {
|
||||
// We hit an overrecursion error during bailout. Report it now.
|
||||
ReportOverRecursed(cx);
|
||||
@ -763,11 +749,11 @@ HandleException(ResumeFromException* rfe)
|
||||
// Turns a JitFrameLayout into an ExitFrameLayout. Note that it has to be a
|
||||
// bare exit frame so it's ignored by TraceJitExitFrame.
|
||||
void
|
||||
EnsureBareExitFrame(JSContext* cx, JitFrameLayout* frame)
|
||||
EnsureBareExitFrame(JitActivation* act, JitFrameLayout* frame)
|
||||
{
|
||||
ExitFrameLayout* exitFrame = reinterpret_cast<ExitFrameLayout*>(frame);
|
||||
|
||||
if (cx->activation()->asJit()->jsExitFP() == (uint8_t*)frame) {
|
||||
if (act->jsExitFP() == (uint8_t*)frame) {
|
||||
// If we already called this function for the current frame, do
|
||||
// nothing.
|
||||
MOZ_ASSERT(exitFrame->isBareExit());
|
||||
@ -775,17 +761,17 @@ EnsureBareExitFrame(JSContext* cx, JitFrameLayout* frame)
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
JSJitFrameIter iter(cx);
|
||||
JSJitFrameIter iter(act);
|
||||
while (!iter.isScripted())
|
||||
++iter;
|
||||
MOZ_ASSERT(iter.current() == frame, "|frame| must be the top JS frame");
|
||||
|
||||
MOZ_ASSERT(!!cx->activation()->asJit()->jsExitFP());
|
||||
MOZ_ASSERT((uint8_t*)exitFrame->footer() >= cx->activation()->asJit()->jsExitFP(),
|
||||
MOZ_ASSERT(!!act->jsExitFP());
|
||||
MOZ_ASSERT((uint8_t*)exitFrame->footer() >= act->jsExitFP(),
|
||||
"Must have space for ExitFooterFrame before jsExitFP");
|
||||
#endif
|
||||
|
||||
cx->activation()->asJit()->setJSExitFP((uint8_t*)frame);
|
||||
act->setJSExitFP((uint8_t*)frame);
|
||||
exitFrame->footer()->setBareExitFrame();
|
||||
MOZ_ASSERT(exitFrame->isBareExit());
|
||||
}
|
||||
|
@ -284,7 +284,7 @@ struct ResumeFromException
|
||||
|
||||
void HandleException(ResumeFromException* rfe);
|
||||
|
||||
void EnsureBareExitFrame(JSContext* cx, JitFrameLayout* frame);
|
||||
void EnsureBareExitFrame(JitActivation* act, JitFrameLayout* frame);
|
||||
|
||||
void TraceJitActivations(JSContext* cx, const CooperatingContext& target, JSTracer* trc);
|
||||
|
||||
@ -312,7 +312,7 @@ MakeFrameDescriptor(uint32_t frameSize, FrameType type, uint32_t headerSize)
|
||||
inline JSScript*
|
||||
GetTopJitJSScript(JSContext* cx)
|
||||
{
|
||||
JSJitFrameIter frame(cx);
|
||||
JSJitFrameIter frame(cx->activation()->asJit());
|
||||
MOZ_ASSERT(frame.type() == JitFrame_Exit);
|
||||
++frame;
|
||||
|
||||
@ -532,11 +532,6 @@ class ExitFrameLayout : public CommonFrameLayout
|
||||
}
|
||||
|
||||
public:
|
||||
// Pushed for "bare" fake exit frames that have no GC things on stack to be
|
||||
// traced.
|
||||
static ExitFrameType BareType() { return ExitFrameType::Bare; }
|
||||
static ExitFrameType VMFunctionType() { return ExitFrameType::VMFunction; }
|
||||
|
||||
static inline size_t Size() {
|
||||
return sizeof(ExitFrameLayout);
|
||||
}
|
||||
|
@ -391,7 +391,7 @@ ArrayPushDense(JSContext* cx, HandleArrayObject arr, HandleValue v, uint32_t* le
|
||||
// possible the setOrExtendDenseElements call already invalidated the
|
||||
// IonScript. JSJitFrameIter::ionScript works when the script is invalidated
|
||||
// so we use that instead.
|
||||
JSJitFrameIter frame(cx);
|
||||
JSJitFrameIter frame(cx->activation()->asJit());
|
||||
MOZ_ASSERT(frame.type() == JitFrame_Exit);
|
||||
++frame;
|
||||
IonScript* ionScript = frame.ionScript();
|
||||
@ -872,7 +872,7 @@ DebugEpilogue(JSContext* cx, BaselineFrame* frame, jsbytecode* pc, bool ok)
|
||||
// Pop this frame by updating packedExitFP, so that the exception
|
||||
// handling code will start at the previous frame.
|
||||
JitFrameLayout* prefix = frame->framePrefix();
|
||||
EnsureBareExitFrame(cx, prefix);
|
||||
EnsureBareExitFrame(cx->activation()->asJit(), prefix);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -640,6 +640,7 @@ FINAL_LIBRARY = 'js'
|
||||
if CONFIG['NIGHTLY_BUILD']:
|
||||
DEFINES['ENABLE_BINARYDATA'] = True
|
||||
DEFINES['ENABLE_SIMD'] = True
|
||||
DEFINES['ENABLE_WASM_SIGNEXTEND_OPS'] = True
|
||||
DEFINES['ENABLE_WASM_THREAD_OPS'] = True
|
||||
|
||||
if CONFIG['JS_BUILD_BINAST']:
|
||||
|
@ -482,6 +482,7 @@ JitFrameIter::operator=(const JitFrameIter& another)
|
||||
MOZ_ASSERT(this != &another);
|
||||
|
||||
act_ = another.act_;
|
||||
mustUnwindActivation_ = another.mustUnwindActivation_;
|
||||
|
||||
if (isSome())
|
||||
iter_.destroy();
|
||||
@ -498,9 +499,10 @@ JitFrameIter::operator=(const JitFrameIter& another)
|
||||
return *this;
|
||||
}
|
||||
|
||||
JitFrameIter::JitFrameIter(jit::JitActivation* act)
|
||||
JitFrameIter::JitFrameIter(jit::JitActivation* act, bool mustUnwindActivation)
|
||||
{
|
||||
act_ = act;
|
||||
mustUnwindActivation_ = mustUnwindActivation;
|
||||
MOZ_ASSERT(act->hasExitFP(), "packedExitFP is used to determine if JSJit or wasm");
|
||||
if (act->hasJSExitFP()) {
|
||||
iter_.construct<jit::JSJitFrameIter>(act);
|
||||
@ -557,6 +559,10 @@ JitFrameIter::settle()
|
||||
// popped.
|
||||
|
||||
wasm::Frame* prevFP = (wasm::Frame*) jitFrame.prevFp();
|
||||
|
||||
if (mustUnwindActivation_)
|
||||
act_->setWasmExitFP(prevFP);
|
||||
|
||||
iter_.destroy();
|
||||
iter_.construct<wasm::WasmFrameIter>(act_, prevFP);
|
||||
MOZ_ASSERT(!asWasm().done());
|
||||
@ -568,12 +574,28 @@ void
|
||||
JitFrameIter::operator++()
|
||||
{
|
||||
MOZ_ASSERT(isSome());
|
||||
if (isJSJit())
|
||||
if (isJSJit()) {
|
||||
const jit::JSJitFrameIter& jitFrame = asJSJit();
|
||||
|
||||
jit::JitFrameLayout* prevFrame = nullptr;
|
||||
if (mustUnwindActivation_ && jitFrame.isScripted())
|
||||
prevFrame = jitFrame.jsFrame();
|
||||
|
||||
++asJSJit();
|
||||
else if (isWasm())
|
||||
|
||||
if (prevFrame) {
|
||||
// Unwind the frame by updating packedExitFP. This is necessary
|
||||
// so that (1) debugger exception unwind and leave frame hooks
|
||||
// don't see this frame when they use ScriptFrameIter, and (2)
|
||||
// ScriptFrameIter does not crash when accessing an IonScript
|
||||
// that's destroyed by the ionScript->decref call.
|
||||
EnsureBareExitFrame(act_, prevFrame);
|
||||
}
|
||||
} else if (isWasm()) {
|
||||
++asWasm();
|
||||
else
|
||||
} else {
|
||||
MOZ_CRASH("unhandled case");
|
||||
}
|
||||
settle();
|
||||
}
|
||||
|
||||
|
@ -1780,12 +1780,13 @@ class JitFrameIter
|
||||
protected:
|
||||
jit::JitActivation* act_;
|
||||
mozilla::MaybeOneOf<jit::JSJitFrameIter, wasm::WasmFrameIter> iter_;
|
||||
bool mustUnwindActivation_;
|
||||
|
||||
void settle();
|
||||
|
||||
public:
|
||||
JitFrameIter() : act_(nullptr), iter_() {}
|
||||
explicit JitFrameIter(jit::JitActivation* activation);
|
||||
JitFrameIter() : act_(nullptr), iter_(), mustUnwindActivation_(false) {}
|
||||
explicit JitFrameIter(jit::JitActivation* activation, bool mustUnwindActivation = false);
|
||||
|
||||
explicit JitFrameIter(const JitFrameIter& another);
|
||||
JitFrameIter& operator=(const JitFrameIter& another);
|
||||
|
@ -8959,7 +8959,7 @@ BaseCompiler::emitBody()
|
||||
CHECK_NEXT(emitComparison(emitCompareF64, ValType::F64, Assembler::DoubleGreaterThanOrEqual));
|
||||
|
||||
// Sign extensions
|
||||
#ifdef ENABLE_WASM_THREAD_OPS
|
||||
#ifdef ENABLE_WASM_SIGNEXTEND_OPS
|
||||
case uint16_t(Op::I32Extend8S):
|
||||
CHECK_NEXT(emitConversion(emitExtendI32_8, ValType::I32, ValType::I32));
|
||||
case uint16_t(Op::I32Extend16S):
|
||||
|
@ -314,7 +314,7 @@ enum class Op
|
||||
F32ReinterpretI32 = 0xbe,
|
||||
F64ReinterpretI64 = 0xbf,
|
||||
|
||||
#ifdef ENABLE_WASM_THREAD_OPS
|
||||
#ifdef ENABLE_WASM_SIGNEXTEND_OPS
|
||||
// Sign extension
|
||||
I32Extend8S = 0xc0,
|
||||
I32Extend16S = 0xc1,
|
||||
|
@ -177,7 +177,7 @@ wasm::Classify(OpBytes op)
|
||||
case Op::F64ConvertUI64:
|
||||
case Op::F64ReinterpretI64:
|
||||
case Op::F64PromoteF32:
|
||||
#ifdef ENABLE_WASM_THREAD_OPS
|
||||
#ifdef ENABLE_WASM_SIGNEXTEND_OPS
|
||||
case Op::I32Extend8S:
|
||||
case Op::I32Extend16S:
|
||||
case Op::I64Extend8S:
|
||||
|
@ -1513,7 +1513,7 @@ AstDecodeExpr(AstDecodeContext& c)
|
||||
if (!AstDecodeConversion(c, ValType::F32, ValType::F64, Op(op.b0)))
|
||||
return false;
|
||||
break;
|
||||
#ifdef ENABLE_WASM_THREAD_OPS
|
||||
#ifdef ENABLE_WASM_SIGNEXTEND_OPS
|
||||
case uint16_t(Op::I32Extend8S):
|
||||
case uint16_t(Op::I32Extend16S):
|
||||
if (!AstDecodeConversion(c, ValType::I32, ValType::I32, Op(op.b0)))
|
||||
|
@ -736,7 +736,7 @@ RenderConversionOperator(WasmRenderContext& c, AstConversionOperator& conv)
|
||||
case Op::F64ConvertUI64: opStr = "f64.convert_u/i64"; break;
|
||||
case Op::F64ReinterpretI64: opStr = "f64.reinterpret/i64"; break;
|
||||
case Op::F64PromoteF32: opStr = "f64.promote/f32"; break;
|
||||
#ifdef ENABLE_WASM_THREAD_OPS
|
||||
#ifdef ENABLE_WASM_SIGNEXTEND_OPS
|
||||
case Op::I32Extend8S: opStr = "i32.extend8_s"; break;
|
||||
case Op::I32Extend16S: opStr = "i32.extend16_s"; break;
|
||||
case Op::I64Extend8S: opStr = "i64.extend8_s"; break;
|
||||
|
@ -2430,7 +2430,7 @@ EmitTruncate(FunctionCompiler& f, ValType operandType, ValType resultType,
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifdef ENABLE_WASM_THREAD_OPS
|
||||
#ifdef ENABLE_WASM_SIGNEXTEND_OPS
|
||||
static bool
|
||||
EmitSignExtend(FunctionCompiler& f, uint32_t srcSize, uint32_t targetSize)
|
||||
{
|
||||
@ -3965,7 +3965,7 @@ EmitBodyExprs(FunctionCompiler& f)
|
||||
CHECK(EmitReinterpret(f, ValType::F64, ValType::I64, MIRType::Double));
|
||||
|
||||
// Sign extensions
|
||||
#ifdef ENABLE_WASM_THREAD_OPS
|
||||
#ifdef ENABLE_WASM_SIGNEXTEND_OPS
|
||||
case uint16_t(Op::I32Extend8S):
|
||||
CHECK(EmitSignExtend(f, 1, 4));
|
||||
case uint16_t(Op::I32Extend16S):
|
||||
|
@ -1221,7 +1221,7 @@ WasmTokenStream::next()
|
||||
return WasmToken(WasmToken::UnaryOpcode, Op::I32Eqz, begin, cur_);
|
||||
if (consume(u"eq"))
|
||||
return WasmToken(WasmToken::ComparisonOpcode, Op::I32Eq, begin, cur_);
|
||||
#ifdef ENABLE_WASM_THREAD_OPS
|
||||
#ifdef ENABLE_WASM_SIGNEXTEND_OPS
|
||||
if (consume(u"extend8_s"))
|
||||
return WasmToken(WasmToken::ConversionOpcode, Op::I32Extend8S, begin, cur_);
|
||||
if (consume(u"extend16_s"))
|
||||
@ -1449,7 +1449,7 @@ WasmTokenStream::next()
|
||||
if (consume(u"extend_u/i32"))
|
||||
return WasmToken(WasmToken::ConversionOpcode, Op::I64ExtendUI32,
|
||||
begin, cur_);
|
||||
#ifdef ENABLE_WASM_THREAD_OPS
|
||||
#ifdef ENABLE_WASM_SIGNEXTEND_OPS
|
||||
if (consume(u"extend8_s"))
|
||||
return WasmToken(WasmToken::ConversionOpcode, Op::I64Extend8S, begin, cur_);
|
||||
if (consume(u"extend16_s"))
|
||||
|
@ -607,7 +607,7 @@ DecodeFunctionBodyExprs(const ModuleEnvironment& env, const Sig& sig, const ValT
|
||||
CHECK(iter.readConversion(ValType::I64, ValType::F64, ¬hing));
|
||||
case uint16_t(Op::F64PromoteF32):
|
||||
CHECK(iter.readConversion(ValType::F32, ValType::F64, ¬hing));
|
||||
#ifdef ENABLE_WASM_THREAD_OPS
|
||||
#ifdef ENABLE_WASM_SIGNEXTEND_OPS
|
||||
case uint16_t(Op::I32Extend8S):
|
||||
case uint16_t(Op::I32Extend16S):
|
||||
CHECK(iter.readConversion(ValType::I32, ValType::I32, ¬hing));
|
||||
|
@ -1160,4 +1160,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
|
||||
|
||||
static const int32_t kUnknownId = -1;
|
||||
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1523818828361000);
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1523991760932000);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -8,7 +8,7 @@
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <stdint.h>
|
||||
const PRTime gPreloadListExpirationTime = INT64_C(1526238015543000);
|
||||
const PRTime gPreloadListExpirationTime = INT64_C(1526410948463000);
|
||||
%%
|
||||
0-1.party, 1
|
||||
0.me.uk, 1
|
||||
@ -28,7 +28,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1526238015543000);
|
||||
023838.com, 1
|
||||
023sec.com, 1
|
||||
03-09-2016.wedding, 1
|
||||
040fit.nl, 1
|
||||
040fitvitality.nl, 1
|
||||
046569.com, 1
|
||||
04sun.com, 1
|
||||
@ -340,7 +339,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1526238015543000);
|
||||
42entrepreneurs.fr, 1
|
||||
42t.ru, 1
|
||||
439191.com, 1
|
||||
440hz-radio.de, 1
|
||||
441jj.com, 0
|
||||
44scc.com, 1
|
||||
4500.co.il, 1
|
||||
@ -507,7 +505,6 @@ a1bouncycastlehire.com, 1
|
||||
a1jumpandbounce.co.uk, 1
|
||||
a1scuba.com, 1
|
||||
a1scubastore.com, 1
|
||||
a200k.xyz, 1
|
||||
a2a.net, 1
|
||||
a2c-co.net, 1
|
||||
a2it.gr, 1
|
||||
@ -803,6 +800,7 @@ adblock.ovh, 1
|
||||
adblockextreme.com, 1
|
||||
adblockextreme.net, 1
|
||||
adblockextreme.org, 1
|
||||
addcrazy.com, 1
|
||||
addeekt.com, 1
|
||||
adderall.space, 1
|
||||
addicional.com, 1
|
||||
@ -1002,6 +1000,7 @@ agdalieso.com.ba, 1
|
||||
ageg.ca, 1
|
||||
agenciadeempregosdourados.com.br, 1
|
||||
agenciafiscal.pe, 1
|
||||
agenciagriff.com, 1
|
||||
agencymanager.be, 1
|
||||
agenda-loto.net, 0
|
||||
agenda21senden.de, 1
|
||||
@ -1359,6 +1358,7 @@ allmebel.ru, 1
|
||||
allmend-ru.de, 1
|
||||
allns.fr, 1
|
||||
allo-credit.ch, 1
|
||||
alloffice.com.ua, 1
|
||||
alloutatl.com, 1
|
||||
alloydevil.nl, 1
|
||||
allplayer.tk, 1
|
||||
@ -1521,7 +1521,6 @@ americansforcommunitydevelopment.org, 1
|
||||
americasbasementcontractor.com, 1
|
||||
americkykongres.cz, 1
|
||||
amerigroup.com, 1
|
||||
amerimarkdirect.com, 1
|
||||
amerimex.cc, 1
|
||||
amesvacuumrepair.com, 1
|
||||
amethystcards.co.uk, 1
|
||||
@ -2411,6 +2410,7 @@ atraverscugy.ch, 1
|
||||
atrevillot.com, 1
|
||||
atrinik.org, 1
|
||||
atte.fi, 1
|
||||
attendantdesign.com, 1
|
||||
attilagyorffy.com, 1
|
||||
attilavandervelde.nl, 1
|
||||
attitudes-bureaux.fr, 1
|
||||
@ -2504,7 +2504,6 @@ auto-anleitung.de, 1
|
||||
auto-plus.tn, 1
|
||||
autoauctionsohio.com, 1
|
||||
autoauctionsvirginia.com, 1
|
||||
autobedrijfschalkoort.nl, 1
|
||||
autoclean-plus.ch, 1
|
||||
autocmall.com, 1
|
||||
autocorner.com, 1
|
||||
@ -2594,7 +2593,7 @@ awan.tech, 1
|
||||
awaremi-tai.com, 1
|
||||
awaro.net, 0
|
||||
awbouncycastlehire.com, 1
|
||||
awccanadianpharmacy.com, 0
|
||||
awccanadianpharmacy.com, 1
|
||||
awei.pub, 1
|
||||
awen.me, 1
|
||||
awesomebouncycastles.co.uk, 1
|
||||
@ -2714,6 +2713,7 @@ bacula.jp, 1
|
||||
bad.horse, 1
|
||||
bad.pet, 1
|
||||
badai.at, 1
|
||||
badam.co, 1
|
||||
badbee.cc, 1
|
||||
badf00d.de, 1
|
||||
badges.fedoraproject.org, 1
|
||||
@ -2803,6 +2803,7 @@ bandito.re, 1
|
||||
bangdream.ga, 1
|
||||
bangkok-dark-night.com, 1
|
||||
bangkok.dating, 1
|
||||
bangkokcity.de, 1
|
||||
bank.simple.com, 0
|
||||
bankbranchlocator.com, 1
|
||||
bankcardoffer.com, 1
|
||||
@ -2985,6 +2986,7 @@ bcpc-ccgpfcheminots.com, 1
|
||||
bcradio.org, 1
|
||||
bcrook.com, 0
|
||||
bcswampcabins.com, 1
|
||||
bcvps.com, 0
|
||||
bda-boulevarddesairs.com, 1
|
||||
bdd.fi, 1
|
||||
bdenzer.com, 1
|
||||
@ -3469,6 +3471,7 @@ binaryevolved.com, 1
|
||||
binarystud.io, 1
|
||||
binding-problem.com, 1
|
||||
binfind.com, 1
|
||||
bing.com, 1
|
||||
bingcheung.com, 1
|
||||
bingcheung.org, 1
|
||||
bingo-wear.com, 1
|
||||
@ -3739,6 +3742,7 @@ blewebprojects.com, 1
|
||||
blichmann.eu, 1
|
||||
blidz.com, 1
|
||||
blieque.co.uk, 1
|
||||
blikund.swedbank.se, 1
|
||||
blindaryproduction.tk, 1
|
||||
blingsparkleshine.com, 1
|
||||
blink-security.com, 1
|
||||
@ -3980,7 +3984,6 @@ booquiz.com, 1
|
||||
boosinflatablegames.co.uk, 1
|
||||
booter.es, 1
|
||||
booter.pw, 1
|
||||
bootikexpress.fr, 1
|
||||
bootjp.me, 0
|
||||
boozinyan.com, 1
|
||||
bopera.co.uk, 1
|
||||
@ -4682,6 +4685,7 @@ c16t.uk, 1
|
||||
c2design.it, 1
|
||||
c2o-library.net, 1
|
||||
c2o2.xyz, 1
|
||||
c3ie.com, 1
|
||||
c3vo.de, 1
|
||||
c3w.at, 1
|
||||
c4.hk, 1
|
||||
@ -5498,7 +5502,6 @@ chint.ai, 1
|
||||
chinternet.xyz, 1
|
||||
chinwag.im, 1
|
||||
chipcore.com, 1
|
||||
chiphell.com, 1
|
||||
chippy.ch, 0
|
||||
chiralsoftware.com, 1
|
||||
chireiden.net, 1
|
||||
@ -5533,6 +5536,7 @@ choe.fi, 1
|
||||
choisirmonerp.com, 1
|
||||
chokladfantasi.net, 1
|
||||
chon.io, 1
|
||||
chonghe.org, 1
|
||||
chook.as, 1
|
||||
choosemypc.net, 1
|
||||
chopperforums.com, 1
|
||||
@ -5674,6 +5678,7 @@ cinq-elements.net, 1
|
||||
cinsects.de, 1
|
||||
cinteo.com, 1
|
||||
cinto.cc, 1
|
||||
cio.gov, 1
|
||||
cioscloud.com, 1
|
||||
cip.md, 1
|
||||
cipartyhire.co.uk, 1
|
||||
@ -5686,7 +5691,6 @@ ciphrex.com, 1
|
||||
cipri.com, 1
|
||||
cir.is, 1
|
||||
cira.email, 1
|
||||
circ-logic.com, 1
|
||||
circara.com, 1
|
||||
circlebox.rocks, 1
|
||||
circu.ml, 1
|
||||
@ -5708,6 +5712,7 @@ citcuit.in, 1
|
||||
citimarinestore.com, 1
|
||||
citizen-cam.de, 1
|
||||
citizensbankal.com, 1
|
||||
citizenscience.gov, 1
|
||||
citizensleague.org, 1
|
||||
citizenspact.eu, 1
|
||||
citizing.org, 1
|
||||
@ -5852,7 +5857,6 @@ closelinksecurity.com, 1
|
||||
closetemail.com, 1
|
||||
closingholding.com, 1
|
||||
cloturea.fr, 1
|
||||
cloud-crowd.com.au, 1
|
||||
cloud-surfer.net, 1
|
||||
cloud.bugatti, 1
|
||||
cloud.fail, 1
|
||||
@ -6539,7 +6543,6 @@ cqn.ch, 1
|
||||
cr.search.yahoo.com, 0
|
||||
crackcat.de, 1
|
||||
cracker.in.th, 1
|
||||
crackingking.com, 0
|
||||
crackle.io, 1
|
||||
crackorsquad.in, 1
|
||||
crackpfer.de, 1
|
||||
@ -6576,7 +6579,6 @@ crazydomains.co.nz, 1
|
||||
crazydomains.co.uk, 1
|
||||
crazydomains.com.au, 1
|
||||
crazydomains.in, 1
|
||||
crazyker.com, 1
|
||||
crazymeeshu.com, 1
|
||||
crazypaul.com, 1
|
||||
crbug.com, 1
|
||||
@ -6967,6 +6969,7 @@ cytegic-update-packages.com, 1
|
||||
cyumus.com, 1
|
||||
czakey.net, 1
|
||||
czaw.org, 1
|
||||
czbix.com, 1
|
||||
czc.cz, 1
|
||||
czechamlp.com, 1
|
||||
czechvirus.cz, 1
|
||||
@ -7347,7 +7350,6 @@ ddel.de, 1
|
||||
dden.ca, 0
|
||||
dden.website, 1
|
||||
dden.xyz, 1
|
||||
ddepot.us, 1
|
||||
ddfreedish.site, 0
|
||||
ddhosted.com, 1
|
||||
ddmeportal.com, 1
|
||||
@ -7528,6 +7530,7 @@ demfloro.ru, 1
|
||||
demijn.nl, 1
|
||||
demilletech.net, 1
|
||||
demo.sb, 1
|
||||
demo.swedbank.se, 1
|
||||
demo9.ovh, 1
|
||||
democracy.io, 1
|
||||
democracychronicles.com, 1
|
||||
@ -7718,7 +7721,6 @@ deviltracks.net, 1
|
||||
deviltraxxx.de, 1
|
||||
devinfo.net, 0
|
||||
devisnow.fr, 1
|
||||
devistravaux.org, 1
|
||||
devjack.de, 1
|
||||
devkid.net, 1
|
||||
devkit.cc, 1
|
||||
@ -7738,7 +7740,6 @@ devyn.ca, 1
|
||||
devzero.io, 1
|
||||
dewalch.net, 1
|
||||
dewapress.com, 1
|
||||
dewebwerf.nl, 1
|
||||
dexalo.de, 1
|
||||
dezeregio.nl, 1
|
||||
dezet-ev.de, 1
|
||||
@ -7815,7 +7816,6 @@ dicionarioetimologico.com.br, 1
|
||||
dick.red, 1
|
||||
dickieslife.com, 1
|
||||
dickpics.ru, 1
|
||||
dicoding.com, 1
|
||||
didacte.com, 1
|
||||
didche.net, 1
|
||||
diddens.de, 1
|
||||
@ -7859,7 +7859,6 @@ diffnow.com, 1
|
||||
difoosion.com, 1
|
||||
digcit.org, 1
|
||||
digdata.de, 1
|
||||
diggable.co, 1
|
||||
dighans.com, 1
|
||||
digiarc.net, 1
|
||||
digibild.ch, 1
|
||||
@ -8546,7 +8545,6 @@ dtp-mstdn.jp, 1
|
||||
dtuaarsfest.dk, 1
|
||||
dtx.sk, 1
|
||||
dualascent.com, 1
|
||||
dualias.xyz, 0
|
||||
duan.li, 1
|
||||
dubaieveningsafari.com, 1
|
||||
dublin-traceroute.net, 1
|
||||
@ -8642,7 +8640,6 @@ dwworld.co.uk, 1
|
||||
dxa.io, 0
|
||||
dxgl.info, 1
|
||||
dxm.no-ip.biz, 1
|
||||
dycoa.com, 1
|
||||
dyeager.org, 1
|
||||
dyktig.as, 1
|
||||
dyktig.no, 1
|
||||
@ -9017,7 +9014,6 @@ ejdv-anmeldung.de, 1
|
||||
ejeff.org, 1
|
||||
ejgconsultancy.co.uk, 1
|
||||
ejuicelab.co.uk, 1
|
||||
ejusu.com, 1
|
||||
ekaigotenshoku.com, 1
|
||||
ekd.de, 1
|
||||
ekedc.com, 1
|
||||
@ -9339,6 +9335,7 @@ enlazaresbueno.cl, 1
|
||||
enlighten10x.ga, 1
|
||||
enlightened.si, 1
|
||||
enlightenedhr.com, 1
|
||||
enlightenment.org, 1
|
||||
enloestatebank.com, 1
|
||||
ennea-mediation.fr, 1
|
||||
enness.co.uk, 1
|
||||
@ -9381,6 +9378,7 @@ envelope.co.nz, 1
|
||||
enveloppenopmaat.nl, 1
|
||||
envescent.com, 1
|
||||
enviam.de, 1
|
||||
enviaya.com.mx, 1
|
||||
environment.ai, 1
|
||||
environmentkirklees.org, 1
|
||||
enviroprobasements.com, 1
|
||||
@ -10213,6 +10211,7 @@ fcapartsdb.com, 1
|
||||
fcburk.de, 1
|
||||
fcforum.net, 1
|
||||
fcitasc.com, 1
|
||||
fckd.net, 1
|
||||
fcprovadia.com, 1
|
||||
fdevs.ch, 1
|
||||
fdlibre.eu, 1
|
||||
@ -10418,7 +10417,6 @@ filme-online.eu.com, 1
|
||||
filme-onlines.com, 1
|
||||
filmreviewonline.com, 1
|
||||
filmserver.de, 1
|
||||
filoitoupediou.gr, 1
|
||||
filoo.de, 1
|
||||
filterflasche-kaufen.de, 1
|
||||
filterlists.com, 1
|
||||
@ -10684,7 +10682,6 @@ flyt.online, 1
|
||||
flytoadventures.com, 1
|
||||
fm-cdn.de, 1
|
||||
fm.ie, 1
|
||||
fm992.com, 1
|
||||
fmapplication.com, 1
|
||||
fmarchal.fr, 1
|
||||
fmdance.cl, 1
|
||||
@ -10808,6 +10805,7 @@ forstbetrieb-hennecke.de, 1
|
||||
forstprodukte.de, 1
|
||||
forsyththeatre.com, 1
|
||||
forteggz.nl, 1
|
||||
fortesanshop.it, 1
|
||||
fortnine.ca, 1
|
||||
fortran.io, 1
|
||||
fortress.no, 1
|
||||
@ -10874,6 +10872,7 @@ foxphotography.ch, 1
|
||||
foxquill.com, 1
|
||||
foxterrier.com.br, 1
|
||||
foxyslut.com, 1
|
||||
fpc.gov, 1
|
||||
fpersona.com, 1
|
||||
fpki.sh, 1
|
||||
fptravelling.com, 1
|
||||
@ -11238,7 +11237,6 @@ futbolvivo.tv, 1
|
||||
futos.de, 1
|
||||
futrou.com, 1
|
||||
futurefire.de, 1
|
||||
futurefundapp.com, 1
|
||||
futurenda.com, 1
|
||||
futureoceans.org, 1
|
||||
futuresonline.com, 1
|
||||
@ -11404,7 +11402,6 @@ ganztagplus.de, 1
|
||||
gapdirect.com, 1
|
||||
gapfa.org, 1
|
||||
gaptek.id, 0
|
||||
gar-nich.net, 0
|
||||
garage-door.pro, 1
|
||||
garage-leone.com, 1
|
||||
garage-meynard.com, 1
|
||||
@ -11655,6 +11652,7 @@ gerwinvanderkamp.nl, 1
|
||||
ges-bo.de, 1
|
||||
geschenkly.de, 1
|
||||
geschmacksache.online, 1
|
||||
geschmackspiloten.de, 1
|
||||
geschwinder.net, 1
|
||||
gestormensajeria.com, 1
|
||||
get-asterisk.ru, 1
|
||||
@ -12018,6 +12016,7 @@ golfhausmallorca.com, 1
|
||||
golfscape.com, 1
|
||||
golik.net.pl, 1
|
||||
golser.info, 1
|
||||
gomiblog.com, 1
|
||||
gommista.roma.it, 1
|
||||
gondawa.com, 1
|
||||
gongjianwei.com, 1
|
||||
@ -12392,6 +12391,7 @@ gume4you.com, 1
|
||||
gumi.ca, 1
|
||||
gummibande.noip.me, 1
|
||||
gunhunter.com, 1
|
||||
guniram.com, 1
|
||||
gunwatch.co.uk, 1
|
||||
guochang.xyz, 1
|
||||
guoke.com, 1
|
||||
@ -13254,7 +13254,6 @@ holyhiphopdatabase.com, 1
|
||||
holymolycasinos.com, 1
|
||||
holytransaction.com, 1
|
||||
holywhite.com, 1
|
||||
holz.nu, 1
|
||||
holzheizer-forum.de, 1
|
||||
holzheizerforum.de, 1
|
||||
holzspielzeug-shop.ch, 1
|
||||
@ -13655,7 +13654,6 @@ hypotheques24.ch, 1
|
||||
hypothes.is, 1
|
||||
hypothyroidmom.com, 1
|
||||
hyvinvointineuvoja.fi, 1
|
||||
hzh.pub, 1
|
||||
i--b.com, 1
|
||||
i-geld.de, 1
|
||||
i-hakul.net, 1
|
||||
@ -13713,6 +13711,7 @@ ic3.gov, 1
|
||||
icafecash.com, 1
|
||||
icanhasht.ml, 1
|
||||
icarlos.net, 1
|
||||
icasnetwork.com, 1
|
||||
icbemp.gov, 1
|
||||
iccpublisher.com, 1
|
||||
icebat.dyndns.org, 1
|
||||
@ -13852,7 +13851,6 @@ igglabs.com, 1
|
||||
iggprivate.com, 1
|
||||
iggsoft.com, 1
|
||||
iggsoftware.com, 1
|
||||
igi.codes, 1
|
||||
igiftcards.de, 1
|
||||
igimusic.com, 1
|
||||
igk.nz, 1
|
||||
@ -14185,6 +14183,7 @@ inheritestate.com, 1
|
||||
inhive.group, 1
|
||||
inhouseents.co.uk, 1
|
||||
iniiter.com, 1
|
||||
inima.org, 1
|
||||
inios.fr, 0
|
||||
inishbofin.ie, 1
|
||||
initq.net, 1
|
||||
@ -14241,6 +14240,7 @@ inscript.pl, 1
|
||||
insertcoins.net, 1
|
||||
insgesamt.net, 1
|
||||
inshapenutrition.com.br, 1
|
||||
insho.fashion, 0
|
||||
insideaudit.com, 1
|
||||
insidethefirewall.tk, 1
|
||||
insightera.co.th, 1
|
||||
@ -14276,7 +14276,6 @@ instinctive.io, 1
|
||||
instinctiveads.com, 1
|
||||
institut-confucius-montpellier.org, 1
|
||||
institutmaupertuis.hopto.org, 1
|
||||
institutolancaster.com, 1
|
||||
institutulcultural.ro, 1
|
||||
instrumart.ru, 0
|
||||
insult.es, 1
|
||||
@ -15565,7 +15564,6 @@ jwolt-lx.com, 1
|
||||
jwschuepfheim.ch, 1
|
||||
jxir.de, 1
|
||||
jyggen.com, 1
|
||||
jym.fit, 1
|
||||
jyoti-fairworks.org, 1
|
||||
jzbk.org, 1
|
||||
k-homes.net, 1
|
||||
@ -15645,6 +15643,7 @@ kaltenbrunner.it, 1
|
||||
kalterersee.ch, 1
|
||||
kamalame.co, 1
|
||||
kamikaichimaru.com, 1
|
||||
kamikatse.net, 1
|
||||
kamitech.ch, 1
|
||||
kamixa.se, 1
|
||||
kana.me, 1
|
||||
@ -15892,7 +15891,6 @@ kenterlis.gr, 1
|
||||
kenyons.info, 1
|
||||
keops-spine.fr, 1
|
||||
keops-spine.us, 1
|
||||
kepkonyvtar.hu, 1
|
||||
kepler-seminar.de, 1
|
||||
kerebro.com, 1
|
||||
kerem.xyz, 1
|
||||
@ -16007,6 +16005,7 @@ kigmbh.com, 1
|
||||
kikbb.com, 1
|
||||
kiki-voice.jp, 1
|
||||
kiku.pw, 1
|
||||
kikuzuki.org, 1
|
||||
kilerd.me, 1
|
||||
kilianvalkhof.com, 1
|
||||
kill-paff.com, 1
|
||||
@ -16152,6 +16151,7 @@ klarika.com, 1
|
||||
klarmobil-empfehlen.de, 1
|
||||
klasfauseweh.de, 1
|
||||
klatschreime.de, 1
|
||||
klausbrinch.dk, 1
|
||||
klausimas.lt, 1
|
||||
klaver.it, 1
|
||||
klaw.xyz, 1
|
||||
@ -16700,6 +16700,7 @@ lampen24.be, 1
|
||||
lampenwelt.at, 1
|
||||
lampenwelt.ch, 1
|
||||
lan2k.org, 1
|
||||
lana.swedbank.se, 1
|
||||
lanbroa.eu, 1
|
||||
lanbyte.se, 1
|
||||
lancejames.com, 1
|
||||
@ -16712,8 +16713,8 @@ landbetweenthelakes.us, 1
|
||||
landell.ml, 1
|
||||
landflair-magazin.de, 1
|
||||
landhaus-christmann.de, 1
|
||||
landinfo.no, 1
|
||||
landofelves.net, 1
|
||||
landyparts.nl, 1
|
||||
lanetix.com, 1
|
||||
lang-php.com, 1
|
||||
langatang.com, 1
|
||||
@ -16833,7 +16834,6 @@ launchpad-app2.com, 1
|
||||
lauraandwill.wedding, 1
|
||||
laurakashiwase.com, 1
|
||||
laurasplacefamilysupport.org.au, 1
|
||||
laurelblack.com, 1
|
||||
laurelspaandlash.com, 1
|
||||
laurenlobue.com, 1
|
||||
laurent-e-levy.com, 1
|
||||
@ -16972,7 +16972,6 @@ leerkotte.eu, 1
|
||||
leerliga.de, 1
|
||||
leertipp.de, 1
|
||||
leesilvey.com, 1
|
||||
leet2.com, 1
|
||||
leetcode.com, 1
|
||||
leetcode.net, 1
|
||||
leetgamers.asia, 1
|
||||
@ -17458,6 +17457,7 @@ liushuyu.tk, 1
|
||||
liv3ly.com, 1
|
||||
livebetterwith.com, 1
|
||||
livecards.co.uk, 1
|
||||
livecards.es, 1
|
||||
livecards.eu, 1
|
||||
livecards.it, 1
|
||||
livedesign.at, 1
|
||||
@ -17478,7 +17478,6 @@ livekortti.fi, 1
|
||||
livelexi.com, 1
|
||||
livepaperhelp.com, 1
|
||||
livepath.ch, 1
|
||||
liveperformersmeeting.net, 1
|
||||
liveregistratie.nl, 1
|
||||
livesearch-fukuoka.com, 1
|
||||
livesure.com, 1
|
||||
@ -17643,7 +17642,6 @@ lona.io, 1
|
||||
lonal.com, 1
|
||||
lonasdigital.com, 1
|
||||
lonbali.com, 1
|
||||
london-transfers.com, 1
|
||||
london.dating, 1
|
||||
londongynaecologist.co, 1
|
||||
londonkan.jp, 1
|
||||
@ -17764,9 +17762,7 @@ lpbk-bethel.de, 0
|
||||
lpm-uk.com, 1
|
||||
lpt-nebreziny.eu, 1
|
||||
lra-cloud.de, 1
|
||||
lrssystems.com, 1
|
||||
ls-alarm.de, 1
|
||||
ls-reallife.de, 1
|
||||
ls-rp.es, 1
|
||||
lsc-dillingen.de, 1
|
||||
lsc.gov, 1
|
||||
@ -18129,7 +18125,7 @@ majkyto.cz, 1
|
||||
makaleci.com, 1
|
||||
makeaboldmove.com, 1
|
||||
makedin.net, 1
|
||||
makeit-so.de, 1
|
||||
makeit-so.de, 0
|
||||
makem-bounce.co.uk, 1
|
||||
makemejob.com, 1
|
||||
makenaiyo-fx.com, 1
|
||||
@ -18226,7 +18222,6 @@ manicode.com, 1
|
||||
maniorpedi.com, 1
|
||||
maniosglass.gr, 1
|
||||
manipil.ch, 1
|
||||
manipulatedtme.com, 1
|
||||
manja-und-martin.de, 1
|
||||
manjaro.ru, 1
|
||||
mankans.com, 1
|
||||
@ -18247,6 +18242,7 @@ manuel-schefczyk.de, 1
|
||||
manueldopheide.com, 1
|
||||
manueli.de, 1
|
||||
manuelrueger.de, 1
|
||||
manufacturing.gov, 1
|
||||
manuscript.com, 1
|
||||
manutd.org.np, 1
|
||||
manuth.life, 1
|
||||
@ -18314,7 +18310,6 @@ marianhoenscheid.de, 1
|
||||
mariannenan.nl, 1
|
||||
marianwehlus.de, 1
|
||||
mariaolesen.dk, 1
|
||||
marie-elisabeth.dk, 0
|
||||
marie.club, 1
|
||||
mariehane.com, 1
|
||||
mariemiramont.fr, 1
|
||||
@ -18752,6 +18747,7 @@ medicinskavranje.edu.rs, 1
|
||||
medicocompetente.it, 1
|
||||
medicoresponde.com.br, 1
|
||||
medifab.online, 1
|
||||
medifi.com, 1
|
||||
medireport.fr, 1
|
||||
medium.com, 1
|
||||
mediumraw.org, 1
|
||||
@ -19033,7 +19029,7 @@ miboulot.com, 1
|
||||
micado-software.com, 1
|
||||
micaiahparker.com, 1
|
||||
micalodeal.ch, 1
|
||||
micasamgmt.com, 1
|
||||
micasamgmt.com, 0
|
||||
micbase.com, 1
|
||||
michael-rigart.be, 1
|
||||
michael-schefczyk.de, 1
|
||||
@ -19155,7 +19151,6 @@ mikroskeem.eu, 1
|
||||
mil-spec.ch, 1
|
||||
mil0.com, 1
|
||||
milahendri.com, 1
|
||||
milanpala.cz, 1
|
||||
milcahsmusings.com, 1
|
||||
mileme.com, 1
|
||||
milenaria.es, 1
|
||||
@ -19550,7 +19545,6 @@ monokoo.com, 1
|
||||
monolithapps.com, 1
|
||||
monolithindustries.com, 1
|
||||
monolithinteractive.com, 1
|
||||
monoseis-monotica.gr, 1
|
||||
monothesis.com, 1
|
||||
monotsuku.com, 1
|
||||
monpc-pro.fr, 1
|
||||
@ -19591,7 +19585,6 @@ moonrhythm.info, 1
|
||||
moonrhythm.io, 1
|
||||
moonshyne.org, 1
|
||||
moonvpn.org, 1
|
||||
moonysbouncycastles.co.uk, 1
|
||||
moorewelliver.com, 1
|
||||
moorfunevents.co.uk, 1
|
||||
moorparkelectrical.com, 1
|
||||
@ -19787,7 +19780,6 @@ mssys.de, 1
|
||||
mstdn.blue, 1
|
||||
mstdn.club, 1
|
||||
mstdn.fr, 1
|
||||
mstdn.io, 1
|
||||
mstdn.nl, 1
|
||||
mstdn.onl, 1
|
||||
mstiles92.com, 1
|
||||
@ -20278,6 +20270,7 @@ nanarose.ch, 1
|
||||
nanch.com, 1
|
||||
nanderson.me, 1
|
||||
nanfangstone.com, 1
|
||||
nani.io, 1
|
||||
nankiseamansclub.com, 1
|
||||
nanogi.ga, 1
|
||||
nanotechnologist.com, 1
|
||||
@ -20477,7 +20470,6 @@ necessaryandproportionate.org, 1
|
||||
necormansir.com, 1
|
||||
nectarleaf.com, 1
|
||||
nedcdata.org, 1
|
||||
nedcf.org.uk, 1
|
||||
nedim-accueil.fr, 1
|
||||
nediyor.com, 1
|
||||
nedlinin.com, 1
|
||||
@ -21403,6 +21395,7 @@ ohd.dk, 1
|
||||
oheila.com, 1
|
||||
ohhdeertrade.com, 1
|
||||
ohiohealthfortune100.com, 1
|
||||
ohling.org, 1
|
||||
ohlmeier.com, 0
|
||||
ohlmeier.net, 0
|
||||
ohlmeier.org, 0
|
||||
@ -21410,6 +21403,7 @@ ohma.ga, 1
|
||||
ohnemusik.com, 1
|
||||
ohreally.de, 1
|
||||
ohsohairy.co.uk, 1
|
||||
ohyooo.com, 1
|
||||
oilpaintingsonly.com, 1
|
||||
oinky.ddns.net, 1
|
||||
ojaioliveoil.com, 1
|
||||
@ -21566,6 +21560,7 @@ online-eikaiwa-guide.com, 1
|
||||
online-results.dk, 1
|
||||
online-scene.com, 1
|
||||
online.marketing, 1
|
||||
online.swedbank.se, 1
|
||||
online24.pt, 1
|
||||
onlinebiller.com, 1
|
||||
onlinebizdirect.com, 0
|
||||
@ -23196,6 +23191,7 @@ potterscraftcider.com, 1
|
||||
pottersheartministry.org, 1
|
||||
pottshome.co.uk, 1
|
||||
potworowski.de, 1
|
||||
pouet.it, 1
|
||||
pouets.ovh, 1
|
||||
poupatempo.org, 1
|
||||
pourlesenfants.info, 1
|
||||
@ -23790,6 +23786,7 @@ qianalysis.com, 1
|
||||
qifu.me, 1
|
||||
qifu.org.cn, 1
|
||||
qikan.net, 1
|
||||
qimiao.io, 1
|
||||
qingpat.com, 1
|
||||
qingpei.me, 0
|
||||
qionouu.cn, 1
|
||||
@ -24225,7 +24222,6 @@ recruitsecuritytraining.com, 1
|
||||
rectoraudiparts.com, 1
|
||||
recuerdafilms.com, 1
|
||||
recurly.com, 1
|
||||
recyclingpromotions.us, 1
|
||||
red-t-shirt.ru, 1
|
||||
redable.hosting, 1
|
||||
redb.cz, 1
|
||||
@ -25479,7 +25475,6 @@ sb-tuning.ru, 1
|
||||
sb.im, 1
|
||||
sb.sb, 1
|
||||
sb0.io, 1
|
||||
sbanken.no, 1
|
||||
sber.us, 1
|
||||
sberbank.ch, 1
|
||||
sbf888.com, 1
|
||||
@ -26264,6 +26259,7 @@ shirt2go.shop, 1
|
||||
shirtsofholland.com, 1
|
||||
shiseki.top, 1
|
||||
shishamania.de, 1
|
||||
shishkin.link, 1
|
||||
shishkin.us, 1
|
||||
shishlik.net, 1
|
||||
shitagi-shop.com, 1
|
||||
@ -26557,7 +26553,6 @@ simpte.com, 1
|
||||
simpul.nl, 1
|
||||
sims4hub.ga, 1
|
||||
simsnieuws.nl, 1
|
||||
simtin-net.de, 1
|
||||
simukti.net, 1
|
||||
simumiehet.com, 1
|
||||
simus.fr, 1
|
||||
@ -26593,7 +26588,6 @@ sint-joris.nl, 1
|
||||
sinterama.biz, 1
|
||||
sintesysglobal.com, 1
|
||||
sinuelovirtual.com.br, 1
|
||||
sinusbot.online, 1
|
||||
sion.moe, 1
|
||||
siqi.wang, 1
|
||||
siraweb.org, 1
|
||||
@ -26775,6 +26769,7 @@ slneighbors.org, 1
|
||||
slo-net.net, 1
|
||||
slo-tech.com, 1
|
||||
sloancom.com, 1
|
||||
slopeedge.com, 1
|
||||
slotboss.co.uk, 1
|
||||
slotcar.com, 0
|
||||
slotfara.com, 1
|
||||
@ -27041,7 +27036,6 @@ sokietech.com, 1
|
||||
sokkenhoek.nl, 1
|
||||
sokolkarvina.cz, 1
|
||||
sol-computers.es, 1
|
||||
sol.works, 1
|
||||
sol24.net, 1
|
||||
solacyre.ch, 1
|
||||
solanum-games.com, 1
|
||||
@ -27165,7 +27159,7 @@ soundedj.com.br, 1
|
||||
soundeo.com, 1
|
||||
soundeo.net, 1
|
||||
soundgasm.net, 1
|
||||
soundhunter.xyz, 1
|
||||
soundhunter.xyz, 0
|
||||
soundsecurity.io, 1
|
||||
sour.is, 1
|
||||
souravsaha.com, 1
|
||||
@ -27737,6 +27731,7 @@ stonewuu.com, 1
|
||||
stony.com, 1
|
||||
stonystratford.org, 1
|
||||
stopakwardhandshakes.org, 1
|
||||
stopbreakupnow.org, 1
|
||||
stopbullying.gov, 1
|
||||
stopfraud.gov, 1
|
||||
stopthethyroidmadness.com, 1
|
||||
@ -27948,6 +27943,7 @@ sundayfundayjapan.com, 1
|
||||
suneilpatel.com, 1
|
||||
sunfeathers.net, 1
|
||||
sunfireshop.com.br, 1
|
||||
sunflyer.cn, 0
|
||||
sunfox.cz, 1
|
||||
sunfulong.me, 1
|
||||
sunjaydhama.com, 1
|
||||
@ -29259,6 +29255,7 @@ tintencenter.com, 1
|
||||
tintenfix.net, 1
|
||||
tintenfux.de, 1
|
||||
tintenland.de, 1
|
||||
tintenprofi.de, 1
|
||||
tinyhousefinance.com.au, 1
|
||||
tinylan.com, 1
|
||||
tinyspeck.com, 1
|
||||
@ -29695,7 +29692,7 @@ tradingbhavishya.com, 1
|
||||
tradingrooms.com, 0
|
||||
traditionsvivantesenimages.ch, 1
|
||||
tradiz.org, 1
|
||||
traeningsprojekt.dk, 1
|
||||
traeningsprojekt.dk, 0
|
||||
trafarm.ro, 1
|
||||
traffic.az, 1
|
||||
trafficmanager.xxx, 1
|
||||
@ -30230,7 +30227,6 @@ ulabox.com, 1
|
||||
ulalau.com, 1
|
||||
uli-eckhardt.de, 1
|
||||
ullah.se, 1
|
||||
ulmer-schneesport.de, 0
|
||||
ulrik.moe, 1
|
||||
ulti.gq, 1
|
||||
ultieme.be, 0
|
||||
@ -30448,6 +30444,7 @@ url.cab, 1
|
||||
url.fi, 1
|
||||
url.fm, 1
|
||||
url.rw, 1
|
||||
url0.eu, 1
|
||||
urlachershop.com.br, 1
|
||||
urlaub-leitner.at, 1
|
||||
urlscan.io, 1
|
||||
@ -31196,6 +31193,7 @@ vwsoft.de, 1
|
||||
vww-8522.com, 1
|
||||
vxapps.com, 1
|
||||
vxst.org, 1
|
||||
vybeministry.org, 1
|
||||
vyber-odhadce.cz, 1
|
||||
vyberodhadce.cz, 1
|
||||
vyplnto.cz, 1
|
||||
@ -31344,6 +31342,7 @@ waterschaplimburg.nl, 1
|
||||
watertrails.io, 1
|
||||
waterworkscondos.com, 1
|
||||
watsonwork.me, 1
|
||||
wattechweb.com, 1
|
||||
wave-ola.es, 1
|
||||
wavesboardshop.com, 1
|
||||
wavesoftime.com, 1
|
||||
@ -31504,7 +31503,6 @@ webseitenserver.com, 1
|
||||
websenat.de, 1
|
||||
websharks.org, 1
|
||||
websiteadvice.com.au, 1
|
||||
websitedesign.bg, 1
|
||||
websiteforlease.ca, 1
|
||||
websiteout.ca, 1
|
||||
websiteout.net, 1
|
||||
@ -32780,7 +32778,7 @@ yhori.xyz, 1
|
||||
yhwj.top, 1
|
||||
yibaoweilong.top, 1
|
||||
yibin0831.com, 1
|
||||
yicknam.my, 1
|
||||
yicknam.my, 0
|
||||
yii2.cc, 1
|
||||
yikeyong.com, 1
|
||||
yin8888.tv, 1
|
||||
@ -33260,7 +33258,6 @@ zsoltsandor.me, 1
|
||||
zsrbcs.com, 1
|
||||
zten.org, 1
|
||||
ztjuh.tk, 1
|
||||
ztytian.com, 1
|
||||
zuan-in.net, 1
|
||||
zuckerfloh.de, 1
|
||||
zudomc.me, 1
|
||||
|
@ -74,6 +74,15 @@ jobs:
|
||||
run:
|
||||
product: firefox
|
||||
buildername: release-{branch}-firefox_schedule_publishing_in_balrog
|
||||
channels:
|
||||
by-project:
|
||||
birch: release
|
||||
maple: beta
|
||||
mozilla-beta: beta
|
||||
mozilla-release: release
|
||||
mozilla-esr52: esr
|
||||
mozilla-esr59: esr
|
||||
default: unknown
|
||||
index:
|
||||
product: firefox
|
||||
devedition:
|
||||
@ -82,5 +91,6 @@ jobs:
|
||||
run:
|
||||
product: devedition
|
||||
buildername: release-{branch}-devedition_schedule_publishing_in_balrog
|
||||
channels: aurora
|
||||
index:
|
||||
product: devedition
|
||||
|
@ -81,7 +81,7 @@ jobs:
|
||||
env:
|
||||
FINAL_VERIFY_CONFIGS:
|
||||
by-project:
|
||||
mozilla-beta: "beta-firefox-linux.cfg beta-firefox-linux64.cfg beta-firefox-macosx64.cfg beta-firefox-win32.cfg beta-firefox-win64.cfg"
|
||||
mozilla-release: "beta-firefox-linux.cfg beta-firefox-linux64.cfg beta-firefox-macosx64.cfg beta-firefox-win32.cfg beta-firefox-win64.cfg"
|
||||
default: ""
|
||||
treeherder:
|
||||
platform: linux64/opt
|
||||
|
@ -102,6 +102,7 @@ jobs:
|
||||
default: "default"
|
||||
repo_path:
|
||||
by-project:
|
||||
birch: "projects/birch"
|
||||
jamun: "projects/jamun"
|
||||
maple: "projects/maple"
|
||||
mozilla-beta: "releases/mozilla-beta"
|
||||
|
@ -6,6 +6,6 @@ RUN dpkg --add-architecture i386 && apt-get -q update \
|
||||
# p7zip-full is for extracting Windows and OS X packages
|
||||
# Mercurial is for cloning required repositories
|
||||
# wget is for downloading update.xml, installers, and MARs
|
||||
# libgtk-3-0 is required to run the Firefox updater
|
||||
&& apt-get -q --yes install p7zip-full mercurial wget libgtk-3-0 libgtk-3.0:i386 \
|
||||
# libgtk-3-0 and libgtk2.0-0 are required to run the Firefox updater
|
||||
&& apt-get -q --yes install p7zip-full mercurial wget libgtk-3-0 libgtk-3.0:i386 libgtk2.0-0 libgtk2.0-0:i386 \
|
||||
&& apt-get clean
|
||||
|
@ -11,7 +11,7 @@ from __future__ import absolute_import, print_function, unicode_literals
|
||||
import slugid
|
||||
from urlparse import urlparse
|
||||
|
||||
from taskgraph.util.schema import Schema
|
||||
from taskgraph.util.schema import Schema, optionally_keyed_by, resolve_keyed_by
|
||||
from taskgraph.util.scriptworker import get_release_config
|
||||
from voluptuous import Optional, Required, Any
|
||||
|
||||
@ -28,6 +28,8 @@ buildbot_run_schema = Schema({
|
||||
# the product to use
|
||||
Required('product'): Any('firefox', 'mobile', 'fennec', 'devedition', 'thunderbird'),
|
||||
|
||||
Optional('channels'): optionally_keyed_by('project', basestring),
|
||||
|
||||
Optional('release-promotion'): bool,
|
||||
})
|
||||
|
||||
@ -39,21 +41,6 @@ def _get_balrog_api_root(branch):
|
||||
return 'https://balrog-admin.stage.mozaws.net/api'
|
||||
|
||||
|
||||
def _get_balrog_channel(product, branch):
|
||||
if product == 'devedition':
|
||||
return 'aurora'
|
||||
elif product == 'firefox':
|
||||
if branch in ('mozilla-beta', 'maple'):
|
||||
return 'beta'
|
||||
elif branch == 'mozilla-release':
|
||||
return 'release'
|
||||
elif branch.startswith('mozilla-esr'):
|
||||
return 'esr'
|
||||
# Unsupported channels are filtered out after the task is generated. Then, we must
|
||||
# provide a dummy value for them, otherwise the Decision task breaks.
|
||||
return 'unknown'
|
||||
|
||||
|
||||
def bb_release_worker(config, worker, run):
|
||||
# props
|
||||
release_props = get_release_config(config)
|
||||
@ -68,9 +55,12 @@ def bb_release_worker(config, worker, run):
|
||||
'revision': revision,
|
||||
})
|
||||
|
||||
if 'channels' in run:
|
||||
release_props['channels'] = run['channels']
|
||||
resolve_keyed_by(release_props, 'channels', 'channels', **config.params)
|
||||
|
||||
if product in ('devedition', 'firefox'):
|
||||
release_props['balrog_api_root'] = _get_balrog_api_root(branch)
|
||||
release_props['channels'] = _get_balrog_channel(product, branch)
|
||||
|
||||
worker['properties'].update(release_props)
|
||||
# Setting script_repo_revision to the gecko revision doesn't work for
|
||||
|
@ -1,3 +1,2 @@
|
||||
[canvas_complexshapes_arcto_001.htm]
|
||||
type: reftest
|
||||
expected: FAIL
|
||||
|
@ -1,4 +1,3 @@
|
||||
[canvas_complexshapes_beziercurveto_001.htm]
|
||||
type: reftest
|
||||
disabled: if (os == "win") and (version == "10.0.15603"): https://bugzilla.mozilla.org/show_bug.cgi?id=1372037
|
||||
expected: FAIL
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.composite.operation.clear.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.composite.operation.clear]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.drawImage.animated.poster.html]
|
||||
type: testharness
|
||||
[drawImage() of an APNG draws the poster frame]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.drawImage.incomplete.reload.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.drawImage.incomplete.reload]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.drawImage.zerocanvas.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.drawImage.zerocanvas]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.drawImage.zerosource.html]
|
||||
type: testharness
|
||||
[drawImage with zero-sized source rectangle draws nothing without exception]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[canvas_focus_drawCustomFocusRing_001.html]
|
||||
type: testharness
|
||||
[drawCustomFocusRing must return false for an element that is not focused.]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[drawFocusIfNeeded_001.html]
|
||||
type: testharness
|
||||
disabled:
|
||||
if os == "win": https://bugzilla.mozilla.org/show_bug.cgi?id=1092458
|
||||
[drawFocusIfNeeded draws a focus ring.]
|
||||
|
@ -1,5 +1,4 @@
|
||||
[drawFocusIfNeeded_004.html]
|
||||
type: testharness
|
||||
disabled:
|
||||
if os == "win": https://bugzilla.mozilla.org/show_bug.cgi?id=1092458
|
||||
[drawFocusIfNeeded does draw a focus ring if the element is in focus.]
|
||||
|
@ -1,5 +1,4 @@
|
||||
[drawFocusIfNeeded_005.html]
|
||||
type: testharness
|
||||
disabled:
|
||||
if os == "win": https://bugzilla.mozilla.org/show_bug.cgi?id=1092458
|
||||
[drawFocusIfNeeded does draw a focus ring if the element is in focus and the user activated a particular focus ring.]
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.gradient.interpolate.overlap.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.gradient.interpolate.overlap]
|
||||
expected:
|
||||
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.gradient.interpolate.zerosize.fill.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.gradient.interpolate.zerosize.fill]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.gradient.interpolate.zerosize.fillRect.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.gradient.interpolate.zerosize.fillRect]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.gradient.interpolate.zerosize.fillText.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.gradient.interpolate.zerosize.fillText]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.gradient.interpolate.zerosize.stroke.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.gradient.interpolate.zerosize.stroke]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.gradient.interpolate.zerosize.strokeRect.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.gradient.interpolate.zerosize.strokeRect]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.gradient.interpolate.zerosize.strokeText.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.gradient.interpolate.zerosize.strokeText]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.gradient.object.current.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.gradient.object.current]
|
||||
expected:
|
||||
if not stylo: FAIL
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.gradient.radial.outside3.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.gradient.radial.outside3]
|
||||
expected:
|
||||
if (os == "win") and (version != "6.2.9200"): FAIL
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.pattern.image.broken.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.pattern.image.broken]
|
||||
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1016482
|
||||
expected:
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.pattern.image.incomplete.emptysrc.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.pattern.image.incomplete.emptysrc]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.pattern.image.incomplete.nosrc.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.pattern.image.incomplete.nosrc]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.pattern.image.incomplete.reload.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.pattern.image.incomplete.reload]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.pattern.image.incomplete.removedsrc.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.pattern.image.incomplete.removedsrc]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[canvas_colorsandstyles_createlineargradient_001.htm]
|
||||
type: testharness
|
||||
[linear gradient from point to self draws nothing]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[addHitRegions-NotSupportedError-01.html]
|
||||
type: testharness
|
||||
[fillRect should not affect current default path and NotSupportedError should be thrown.]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[hitregions-members-exist.html]
|
||||
type: testharness
|
||||
[context.addHitRegion Exists]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,13 @@
|
||||
[createImageBitmap-invalid-args.html]
|
||||
type: testharness
|
||||
expected:
|
||||
if debug and not stylo and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): CRASH
|
||||
if debug and not stylo and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): CRASH
|
||||
if debug and stylo and e10s and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64): CRASH
|
||||
if debug and stylo and e10s and (os == "win") and (version == "10.0.15063") and (processor == "x86_64") and (bits == 64): CRASH
|
||||
if debug and stylo and not e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
|
||||
if debug and stylo and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): CRASH
|
||||
if debug and stylo and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): CRASH
|
||||
if debug and stylo and e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
|
||||
[createImageBitmap with a HTMLImageElement source and sw set to 0 rejects with a RangeError.]
|
||||
expected: FAIL
|
||||
|
||||
@ -66,3 +74,9 @@
|
||||
[createImageBitmap with an invalid OffscreenCanvas source rejects with a RangeError.]
|
||||
expected: FAIL
|
||||
|
||||
[createImageBitmap with a broken image source rejects with an InvalidStateError.]
|
||||
expected: FAIL
|
||||
|
||||
[createImageBitmap with an available but undecodable image source rejects with an InvalidStateError.]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.path.arc.selfintersect.1.html]
|
||||
type: testharness
|
||||
[arc() with lineWidth > 2*radius is drawn sensibly]
|
||||
expected:
|
||||
if (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.path.arc.shape.3.html]
|
||||
type: testharness
|
||||
[arc() from 0 to -pi/2 does not draw anything in the wrong quadrant]
|
||||
expected:
|
||||
if (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.path.rect.zero.3.html]
|
||||
type: testharness
|
||||
[Canvas test: 2d.path.rect.zero.3]
|
||||
expected:
|
||||
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.path.stroke.prune.arc.html]
|
||||
type: testharness
|
||||
[Zero-length line segments from arcTo and arc are removed before stroking]
|
||||
expected:
|
||||
if not debug and (os == "linux") and (processor == "x86") and (bits == 32): FAIL
|
||||
|
@ -1,5 +1,4 @@
|
||||
[2d.path.stroke.prune.closed.html]
|
||||
type: testharness
|
||||
[Zero-length line segments from closed paths are removed before stroking]
|
||||
expected:
|
||||
if os == "win": FAIL
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user