import changes from tenfourfox:

- #578: M1322864 M1585106 M1597043 (7758ebb12)
- #578: M1579060 M1586176 (f3f295615)
- #581: M1047098 M1355576 (ec8e68102) (remove-tele part only)
- closes #582: M1358018 modified for 45ESR (74fd7b6d0)
- #584: update certs, pins, TLDs (690b9bbce)
- #587: M1513855 M1596668 M1602944 M1599420 M1595399 (35a4358b3)
- #587: update TLDs, certs, pins, etc. (35584e5e6)
- #587: M1598543 M1607902 disable remote jars (cfb4b1e08)
- #587: update TLDs (c15b86c49)
- #591: M1467722 (cfb43390a) (with libeditor fix)
- #591: bustage fix (bbc9a12a5)
- #593: M1607742 M1684490 + updated TLDs, pins, HSTS (67706e1f6)
This commit is contained in:
2020-02-28 22:35:51 +08:00
parent b27a582719
commit f7cbe248db
30 changed files with 6419 additions and 3121 deletions
+9
View File
@@ -365,6 +365,15 @@ RootAccessible::ProcessDOMEvent(nsIDOMEvent* aDOMEvent)
if (FocusMgr()->HasDOMFocus(targetNode)) {
nsCOMPtr<nsIDOMXULMultiSelectControlElement> multiSel =
do_QueryInterface(targetNode);
if (!multiSel) {
// This shouldn't be possible. All XUL trees should have
// nsIDOMXULMultiSelectControlElement, and the tree is focused, so it
// shouldn't be dying. Nevertheless, this sometimes happens in the wild
// (bug 1597043).
MOZ_ASSERT_UNREACHABLE(
"XUL tree doesn't have nsIDOMXULMultiSelectControlElement");
return;
}
nsAutoString selType;
multiSel->GetSelType(selType);
if (selType.IsEmpty() || !selType.EqualsLiteral("single")) {
+24 -24
View File
@@ -17,8 +17,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "Task",
"resource://gre/modules/Task.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "DownloadsCommon",
"resource:///modules/DownloadsCommon.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch",
"resource://gre/modules/TelemetryStopwatch.jsm");
/*XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch",
"resource://gre/modules/TelemetryStopwatch.jsm");*/
XPCOMUtils.defineLazyModuleGetter(this, "console",
"resource://gre/modules/Console.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Preferences",
@@ -152,7 +152,7 @@ Sanitizer.prototype = {
// Callers should check returned errors and give user feedback
// about items that could not be sanitized
let refObj = {};
TelemetryStopwatch.start("FX_SANITIZE_TOTAL", refObj);
//TelemetryStopwatch.start("FX_SANITIZE_TOTAL", refObj);
let annotateError = (name, ex) => {
progress[name] = "failed";
@@ -184,7 +184,7 @@ Sanitizer.prototype = {
}
// Sanitization is complete.
TelemetryStopwatch.finish("FX_SANITIZE_TOTAL", refObj);
//TelemetryStopwatch.finish("FX_SANITIZE_TOTAL", refObj);
// Reset the inProgress preference since we were not killed during
// sanitization.
Preferences.reset(Sanitizer.PREF_SANITIZE_IN_PROGRESS);
@@ -207,7 +207,7 @@ Sanitizer.prototype = {
clear: Task.async(function* (range) {
let seenException;
let refObj = {};
TelemetryStopwatch.start("FX_SANITIZE_CACHE", refObj);
//TelemetryStopwatch.start("FX_SANITIZE_CACHE", refObj);
try {
// Cache doesn't consult timespan, nor does it have the
@@ -228,7 +228,7 @@ Sanitizer.prototype = {
seenException = ex;
}
TelemetryStopwatch.finish("FX_SANITIZE_CACHE", refObj);
//TelemetryStopwatch.finish("FX_SANITIZE_CACHE", refObj);
if (seenException) {
throw seenException;
}
@@ -242,7 +242,7 @@ Sanitizer.prototype = {
let refObj = {};
// Clear cookies.
TelemetryStopwatch.start("FX_SANITIZE_COOKIES_2", refObj);
//TelemetryStopwatch.start("FX_SANITIZE_COOKIES_2", refObj);
try {
let cookieMgr = Components.classes["@mozilla.org/cookiemanager;1"]
.getService(Ci.nsICookieManager);
@@ -270,7 +270,7 @@ Sanitizer.prototype = {
} catch (ex) {
seenException = ex;
} finally {
TelemetryStopwatch.finish("FX_SANITIZE_COOKIES_2", refObj);
//TelemetryStopwatch.finish("FX_SANITIZE_COOKIES_2", refObj);
}
// Clear deviceIds. Done asynchronously (returns before complete).
@@ -346,7 +346,7 @@ Sanitizer.prototype = {
clear: Task.async(function* (range) {
let seenException;
let refObj = {};
TelemetryStopwatch.start("FX_SANITIZE_HISTORY", refObj);
//TelemetryStopwatch.start("FX_SANITIZE_HISTORY", refObj);
try {
if (range) {
yield PlacesUtils.history.removeVisitsByFilter({
@@ -360,7 +360,7 @@ Sanitizer.prototype = {
} catch (ex) {
seenException = ex;
} finally {
TelemetryStopwatch.finish("FX_SANITIZE_HISTORY", refObj);
//TelemetryStopwatch.finish("FX_SANITIZE_HISTORY", refObj);
}
try {
@@ -388,7 +388,7 @@ Sanitizer.prototype = {
clear: Task.async(function* (range) {
let seenException;
let refObj = {};
TelemetryStopwatch.start("FX_SANITIZE_FORMDATA", refObj);
//TelemetryStopwatch.start("FX_SANITIZE_FORMDATA", refObj);
try {
// Clear undo history of all search bars.
let windows = Services.wm.getEnumerator("navigator:browser");
@@ -442,7 +442,7 @@ Sanitizer.prototype = {
seenException = ex;
}
TelemetryStopwatch.finish("FX_SANITIZE_FORMDATA", refObj);
//TelemetryStopwatch.finish("FX_SANITIZE_FORMDATA", refObj);
if (seenException) {
throw seenException;
}
@@ -452,7 +452,7 @@ Sanitizer.prototype = {
downloads: {
clear: Task.async(function* (range) {
let refObj = {};
TelemetryStopwatch.start("FX_SANITIZE_DOWNLOADS", refObj);
//TelemetryStopwatch.start("FX_SANITIZE_DOWNLOADS", refObj);
try {
let filterByTime = null;
if (range) {
@@ -467,7 +467,7 @@ Sanitizer.prototype = {
let list = yield Downloads.getList(Downloads.ALL);
list.removeFinished(filterByTime);
} finally {
TelemetryStopwatch.finish("FX_SANITIZE_DOWNLOADS", refObj);
//TelemetryStopwatch.finish("FX_SANITIZE_DOWNLOADS", refObj);
}
})
},
@@ -475,7 +475,7 @@ Sanitizer.prototype = {
sessions: {
clear: Task.async(function* (range) {
let refObj = {};
TelemetryStopwatch.start("FX_SANITIZE_SESSIONS", refObj);
//TelemetryStopwatch.start("FX_SANITIZE_SESSIONS", refObj);
try {
// clear all auth tokens
@@ -486,7 +486,7 @@ Sanitizer.prototype = {
// clear FTP and plain HTTP auth sessions
Services.obs.notifyObservers(null, "net:clear-active-logins", null);
} finally {
TelemetryStopwatch.finish("FX_SANITIZE_SESSIONS", refObj);
//TelemetryStopwatch.finish("FX_SANITIZE_SESSIONS", refObj);
}
})
},
@@ -495,7 +495,7 @@ Sanitizer.prototype = {
clear: Task.async(function* (range) {
let seenException;
let refObj = {};
TelemetryStopwatch.start("FX_SANITIZE_SITESETTINGS", refObj);
//TelemetryStopwatch.start("FX_SANITIZE_SITESETTINGS", refObj);
let startDateMS = range ? range[0] / 1000 : null;
@@ -553,7 +553,7 @@ Sanitizer.prototype = {
seenException = ex;
}
TelemetryStopwatch.finish("FX_SANITIZE_SITESETTINGS", refObj);
//TelemetryStopwatch.finish("FX_SANITIZE_SITESETTINGS", refObj);
if (seenException) {
throw seenException;
}
@@ -611,7 +611,7 @@ Sanitizer.prototype = {
// If/once we get here, we should actually be able to close all windows.
let refObj = {};
TelemetryStopwatch.start("FX_SANITIZE_OPENWINDOWS", refObj);
//TelemetryStopwatch.start("FX_SANITIZE_OPENWINDOWS", refObj);
// First create a new window. We do this first so that on non-mac, we don't
// accidentally close the app by closing all the windows.
@@ -657,7 +657,7 @@ Sanitizer.prototype = {
newWindowOpened = true;
// If we're the last thing to happen, invoke callback.
if (numWindowsClosing == 0) {
TelemetryStopwatch.finish("FX_SANITIZE_OPENWINDOWS", refObj);
//TelemetryStopwatch.finish("FX_SANITIZE_OPENWINDOWS", refObj);
resolve();
}
}
@@ -669,7 +669,7 @@ Sanitizer.prototype = {
Services.obs.removeObserver(onWindowClosed, "xul-window-destroyed");
// If we're the last thing to happen, invoke callback.
if (newWindowOpened) {
TelemetryStopwatch.finish("FX_SANITIZE_OPENWINDOWS", refObj);
//TelemetryStopwatch.finish("FX_SANITIZE_OPENWINDOWS", refObj);
resolve();
}
}
@@ -788,7 +788,7 @@ Sanitizer.clearPluginData = Task.async(function* (range) {
if (/\bFlash\b/.test(tag.name)) {
probe = tag.loaded ? "FX_SANITIZE_LOADED_FLASH"
: "FX_SANITIZE_UNLOADED_FLASH";
TelemetryStopwatch.start(probe, refObj);
//TelemetryStopwatch.start(probe, refObj);
}
try {
let rv = yield new Promise(resolve =>
@@ -801,12 +801,12 @@ Sanitizer.clearPluginData = Task.async(function* (range) {
);
}
if (probe) {
TelemetryStopwatch.finish(probe, refObj);
//TelemetryStopwatch.finish(probe, refObj);
}
} catch (ex) {
// Ignore errors from plug-ins
if (probe) {
TelemetryStopwatch.cancel(probe, refObj);
//TelemetryStopwatch.cancel(probe, refObj);
}
}
}
+8 -1
View File
@@ -3359,7 +3359,14 @@ nsContentUtils::GetImageFromContent(nsIImageLoadingContent* aContent,
}
if (aRequest) {
imgRequest.swap(*aRequest);
// If the consumer wants the request, verify it has actually loaded
// successfully.
uint32_t imgStatus;
imgRequest->GetImageStatus(&imgStatus);
if (imgStatus & imgIRequest::STATUS_FRAME_COMPLETE &&
!(imgStatus & imgIRequest::STATUS_ERROR)) {
imgRequest.swap(*aRequest);
}
}
return imgContainer.forget();
+2 -25
View File
@@ -10873,35 +10873,12 @@ nsGlobalWindow::GetComputedStyleHelperOuter(Element& aElt,
{
MOZ_RELEASE_ASSERT(IsOuterWindow());
if (!mDocShell) {
if (!mDoc) {
return nullptr;
}
nsCOMPtr<nsIPresShell> presShell = mDocShell->GetPresShell();
if (!presShell) {
// Try flushing frames on our parent in case there's a pending
// style change that will create the presshell.
auto* parent = nsGlobalWindow::Cast(GetPrivateParent());
if (!parent) {
return nullptr;
}
parent->FlushPendingNotifications(FlushType::Frames);
// Might have killed mDocShell
if (!mDocShell) {
return nullptr;
}
presShell = mDocShell->GetPresShell();
if (!presShell) {
return nullptr;
}
}
RefPtr<nsComputedDOMStyle> compStyle =
NS_NewComputedDOMStyle(&aElt, aPseudoElt, presShell,
NS_NewComputedDOMStyle(&aElt, aPseudoElt, mDoc,
aDefaultStylesOnly ? nsComputedDOMStyle::eDefaultOnly :
nsComputedDOMStyle::eAll);
+4 -2
View File
@@ -3306,6 +3306,10 @@ BackgroundCursorChild::HandleResponse(
auto& responses =
const_cast<nsTArray<ObjectStoreCursorResponse>&>(aResponses);
// If a new cursor is created, we need to keep a reference to it until the
// ResultHelper creates a DOM Binding.
RefPtr<IDBCursor> newCursor;
for (ObjectStoreCursorResponse& response : responses) {
StructuredCloneReadInfo cloneReadInfo(Move(response.cloneInfo()));
cloneReadInfo.mDatabase = mTransaction->Database();
@@ -3315,8 +3319,6 @@ BackgroundCursorChild::HandleResponse(
nullptr,
cloneReadInfo.mFiles);
RefPtr<IDBCursor> newCursor;
if (mCursor) {
mCursor->Reset(Move(response.key()), Move(cloneReadInfo));
} else {
+1 -1
View File
@@ -16,7 +16,7 @@ interface nsIDOMCSSGroupingRule : nsISupports
readonly attribute nsIDOMCSSRuleList cssRules;
unsigned long insertRule(in DOMString rule,
in unsigned long index)
[optional] in unsigned long index)
raises(DOMException);
void deleteRule(in unsigned long index)
raises(DOMException);
+1 -1
View File
@@ -20,7 +20,7 @@ interface nsIDOMCSSStyleSheet : nsIDOMStyleSheet
readonly attribute nsIDOMCSSRuleList cssRules;
unsigned long insertRule(in DOMString rule,
in unsigned long index)
[optional] in unsigned long index)
raises(DOMException);
void deleteRule(in unsigned long index)
raises(DOMException);
+1 -7
View File
@@ -38,14 +38,8 @@ GetCSSComputedValue(Element* aElem,
return false;
}
nsIPresShell* shell = doc->GetShell();
if (!shell) {
NS_WARNING("Unable to look up computed style -- no pres shell");
return false;
}
RefPtr<nsComputedDOMStyle> computedStyle =
NS_NewComputedDOMStyle(aElem, EmptyString(), shell);
NS_NewComputedDOMStyle(aElem, EmptyString(), doc);
computedStyle->GetPropertyValue(aPropID, aResult);
return true;
+1 -1
View File
@@ -21,7 +21,7 @@ interface CSSStyleSheet : StyleSheet {
[ChromeOnly, BinaryName="parsingModeDOM"]
readonly attribute CSSStyleSheetParsingMode parsingMode;
[Throws, NeedsSubjectPrincipal]
unsigned long insertRule(DOMString rule, unsigned long index);
unsigned long insertRule(DOMString rule, optional unsigned long index = 0);
[Throws, NeedsSubjectPrincipal]
void deleteRule(unsigned long index);
};
+1 -4
View File
@@ -570,11 +570,8 @@ CSSEditUtils::GetComputedStyle(Element* aElement)
nsIDocument* doc = aElement->GetUncomposedDoc();
NS_ENSURE_TRUE(doc, nullptr);
nsIPresShell* presShell = doc->GetShell();
NS_ENSURE_TRUE(presShell, nullptr);
RefPtr<nsComputedDOMStyle> style =
NS_NewComputedDOMStyle(aElement, EmptyString(), presShell);
NS_NewComputedDOMStyle(aElement, EmptyString(), doc);
return style.forget();
}
+33 -30
View File
@@ -64,13 +64,13 @@ using namespace mozilla::dom;
*/
already_AddRefed<nsComputedDOMStyle>
NS_NewComputedDOMStyle(dom::Element* aElement, const nsAString& aPseudoElt,
nsIPresShell* aPresShell,
NS_NewComputedDOMStyle(dom::Element* aElement,
const nsAString& aPseudoElt,
nsIDocument* aDocument,
nsComputedDOMStyle::StyleType aStyleType)
{
RefPtr<nsComputedDOMStyle> computedStyle;
computedStyle = new nsComputedDOMStyle(aElement, aPseudoElt, aPresShell,
aStyleType);
computedStyle = new nsComputedDOMStyle(aElement, aPseudoElt, aDocument, aStyleType);
return computedStyle.forget();
}
@@ -243,7 +243,7 @@ nsComputedStyleMap::Update()
nsComputedDOMStyle::nsComputedDOMStyle(dom::Element* aElement,
const nsAString& aPseudoElt,
nsIPresShell* aPresShell,
nsIDocument* aDocument,
StyleType aStyleType)
: mDocumentWeak(nullptr)
, mOuterFrame(nullptr)
@@ -254,11 +254,13 @@ nsComputedDOMStyle::nsComputedDOMStyle(dom::Element* aElement,
, mExposeVisitedStyle(false)
, mResolvedStyleContext(false)
{
MOZ_ASSERT(aElement && aPresShell);
MOZ_ASSERT(aElement);
MOZ_ASSERT(aDocument);
// TODO(emilio, bug 548397, https://github.com/w3c/csswg-drafts/issues/2403):
// Should use aElement->OwnerDoc() instead.
mDocumentWeak = do_GetWeakReference(aDocument);
mDocumentWeak = do_GetWeakReference(aPresShell->GetDocument());
mContent = aElement;
mElement = aElement;
if (!DOMStringIsNull(aPseudoElt) && !aPseudoElt.IsEmpty() &&
aPseudoElt.First() == char16_t(':')) {
@@ -285,8 +287,6 @@ nsComputedDOMStyle::nsComputedDOMStyle(dom::Element* aElement,
mPseudo = nullptr;
}
}
MOZ_ASSERT(aPresShell->GetPresContext());
}
nsComputedDOMStyle::~nsComputedDOMStyle()
@@ -297,13 +297,13 @@ nsComputedDOMStyle::~nsComputedDOMStyle()
NS_IMPL_CYCLE_COLLECTION_CLASS(nsComputedDOMStyle)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsComputedDOMStyle)
tmp->ClearStyleContext(); // remove observer before clearing mContent
NS_IMPL_CYCLE_COLLECTION_UNLINK(mContent)
tmp->ClearStyleContext(); // remove observer before clearing mElement
NS_IMPL_CYCLE_COLLECTION_UNLINK(mElement)
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsComputedDOMStyle)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mContent)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mElement)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(nsComputedDOMStyle)
@@ -366,8 +366,6 @@ nsComputedDOMStyle::SetCssText(const nsAString& aCssText)
NS_IMETHODIMP
nsComputedDOMStyle::GetLength(uint32_t* aLength)
{
NS_PRECONDITION(aLength, "Null aLength! Prepare to die!");
uint32_t length = GetComputedStyleMap()->Length();
// Make sure we have up to date style so that we can include custom
@@ -375,6 +373,8 @@ nsComputedDOMStyle::GetLength(uint32_t* aLength)
UpdateCurrentStyleSources(false);
if (mStyleContext) {
length += StyleVariables()->mVariables.Count();
} else {
length = 0;
}
*aLength = length;
@@ -772,7 +772,7 @@ nsComputedDOMStyle::ClearStyleContext()
{
if (mResolvedStyleContext) {
mResolvedStyleContext = false;
mContent->RemoveMutationObserver(this);
mElement->RemoveMutationObserver(this);
}
mStyleContext = nullptr;
}
@@ -782,7 +782,7 @@ nsComputedDOMStyle::SetResolvedStyleContext(RefPtr<nsStyleContext>&& aContext)
{
if (!mResolvedStyleContext) {
mResolvedStyleContext = true;
mContent->AddMutationObserver(this);
mElement->AddMutationObserver(this);
}
mStyleContext = aContext;
}
@@ -807,7 +807,7 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
// Flush _before_ getting the presshell, since that could create a new
// presshell. Also note that we want to flush the style on the document
// we're computing style in, not on the document mContent is in -- the two
// we're computing style in, not on the document mElement is in -- the two
// may be different.
document->FlushPendingNotifications(
aNeedsLayoutFlush ? FlushType::Layout : FlushType::Style);
@@ -815,7 +815,7 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
mFlushedPendingReflows = aNeedsLayoutFlush;
#endif
nsCOMPtr<nsIPresShell> presShellForContent = GetPresShellForContent(mContent);
nsCOMPtr<nsIPresShell> presShellForContent = GetPresShellForContent(mElement);
if (presShellForContent && presShellForContent != document->GetShell()) {
presShellForContent->FlushPendingNotifications(FlushType::Style);
}
@@ -830,7 +830,11 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
mPresShell->GetPresContext()->GetRestyleGeneration();
if (mStyleContext) {
if (mStyleContextGeneration == currentGeneration) {
// We can't rely on the undisplayed restyle generation if mElement is
// out-of-document, since that generation is not incremented for DOM changes
// on out-of-document elements.
if (mStyleContextGeneration == currentGeneration &&
mElement->IsInComposedDoc()) {
// Our cached style context is still valid.
return;
}
@@ -839,12 +843,12 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
mStyleContext = nullptr;
}
// XXX the !mContent->IsHTMLElement(nsGkAtoms::area)
// XXX the !mElement->IsHTMLElement(nsGkAtoms::area)
// check is needed due to bug 135040 (to avoid using
// mPrimaryFrame). Remove it once that's fixed.
if (!mPseudo && mStyleType == eAll &&
!mContent->IsHTMLElement(nsGkAtoms::area)) {
mOuterFrame = mContent->GetPrimaryFrame();
!mElement->IsHTMLElement(nsGkAtoms::area)) {
mOuterFrame = mElement->GetPrimaryFrame();
mInnerFrame = mOuterFrame;
if (mOuterFrame) {
nsIAtom* type = mOuterFrame->GetType();
@@ -887,7 +891,7 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
// Need to resolve a style context
RefPtr<nsStyleContext> resolvedStyleContext =
nsComputedDOMStyle::GetStyleContextForElementNoFlush(
mContent->AsElement(),
mElement,
mPseudo,
presShellForContent ? presShellForContent.get() : mPresShell,
mStyleType);
@@ -980,7 +984,6 @@ nsComputedDOMStyle::GetPropertyCSSValue(const nsAString& aPropertyName, ErrorRes
UpdateCurrentStyleSources(needsLayoutFlush);
if (!mStyleContext) {
aRv.Throw(NS_ERROR_NOT_AVAILABLE);
return nullptr;
}
@@ -3040,7 +3043,7 @@ nsComputedDOMStyle::DoGetGridTemplateColumns()
nsGridContainerFrame* gridFrame =
nsGridContainerFrame::GetGridFrameWithComputedInfo(
mContent->GetPrimaryFrame());
mElement->GetPrimaryFrame());
if (gridFrame) {
info = gridFrame->GetComputedTemplateColumns();
@@ -3056,7 +3059,7 @@ nsComputedDOMStyle::DoGetGridTemplateRows()
nsGridContainerFrame* gridFrame =
nsGridContainerFrame::GetGridFrameWithComputedInfo(
mContent->GetPrimaryFrame());
mElement->GetPrimaryFrame());
if (gridFrame) {
info = gridFrame->GetComputedTemplateRows();
@@ -5398,7 +5401,7 @@ nsComputedDOMStyle::GetLineHeightCoord(nscoord& aCoord)
// lie about font size inflation since we lie about font size (since
// the inflation only applies to text)
aCoord = ReflowInput::CalcLineHeight(mContent, mStyleContext,
aCoord = ReflowInput::CalcLineHeight(mElement, mStyleContext,
blockHeight, 1.0f);
// CalcLineHeight uses font->mFont.size, but we want to use
@@ -6828,7 +6831,7 @@ nsComputedDOMStyle::DoGetCustomProperty(const nsAString& aPropertyName)
void
nsComputedDOMStyle::ParentChainChanged(nsIContent* aContent)
{
NS_ASSERTION(mContent == aContent, "didn't we register mContent?");
NS_ASSERTION(mElement == aContent, "didn't we register mElement?");
NS_ASSERTION(mResolvedStyleContext,
"should have only registered an observer when "
"mResolvedStyleContext is true");
+6 -6
View File
@@ -76,12 +76,12 @@ public:
nsComputedDOMStyle(mozilla::dom::Element* aElement,
const nsAString& aPseudoElt,
nsIPresShell* aPresShell,
nsIDocument* aDocument,
StyleType aStyleType);
virtual nsINode *GetParentObject() override
nsINode *GetParentObject() override
{
return mContent;
return reinterpret_cast<nsINode*>(mElement.get());
}
static already_AddRefed<nsStyleContext>
@@ -687,9 +687,9 @@ private:
// We don't really have a good immutable representation of "presentation".
// Given the way GetComputedStyle is currently used, we should just grab the
// 0th presshell, if any, from the document.
// presshell, if any, from the document.
nsWeakPtr mDocumentWeak;
nsCOMPtr<nsIContent> mContent;
RefPtr<mozilla::dom::Element> mElement;
/**
* Strong reference to the style context we access data from. This can be
@@ -755,7 +755,7 @@ private:
already_AddRefed<nsComputedDOMStyle>
NS_NewComputedDOMStyle(mozilla::dom::Element* aElement,
const nsAString& aPseudoElt,
nsIPresShell* aPresShell,
nsIDocument* aDocument,
nsComputedDOMStyle::StyleType aStyleType =
nsComputedDOMStyle::eAll);
@@ -82,7 +82,7 @@ int32_t ScreenDeviceInfoImpl::GetDeviceName(uint32_t deviceNumber,
const char *deviceName = desktopDisplayDevice.getDeviceName();
len = deviceName ? strlen(deviceName) : 0;
if (len && deviceNameUTF8 && len <= deviceNameUTF8Length) {
if (len && deviceNameUTF8 && len < deviceNameUTF8Length) {
memcpy(deviceNameUTF8,
deviceName,
len);
@@ -90,7 +90,7 @@ int32_t ScreenDeviceInfoImpl::GetDeviceName(uint32_t deviceNumber,
const char *deviceUniqueId = desktopDisplayDevice.getUniqueIdName();
len = deviceUniqueId ? strlen(deviceUniqueId) : 0;
if (len && deviceUniqueIdUTF8 && len <= deviceUniqueIdUTF8Length) {
if (len && deviceUniqueIdUTF8 && len < deviceUniqueIdUTF8Length) {
memcpy(deviceUniqueIdUTF8,
deviceUniqueId,
len);
@@ -177,13 +177,13 @@ int32_t AppDeviceInfoImpl::GetDeviceName(uint32_t deviceNumber,
const char *deviceName = desktopApplication.getProcessAppName();
len = deviceName ? strlen(deviceName) : 0;
if (len && len <= deviceNameUTF8Length) {
if (len && len < deviceNameUTF8Length) {
memcpy(deviceNameUTF8, deviceName, len);
}
const char *deviceUniqueId = desktopApplication.getUniqueIdName();
len = deviceUniqueId ? strlen(deviceUniqueId) : 0;
if (len && deviceUniqueIdUTF8 && len <= deviceUniqueIdUTF8Length) {
if (len && deviceUniqueIdUTF8 && len < deviceUniqueIdUTF8Length) {
memcpy(deviceUniqueIdUTF8,
deviceUniqueId,
len);
@@ -305,7 +305,7 @@ int32_t WindowDeviceInfoImpl::GetDeviceName(uint32_t deviceNumber,
const char *deviceName = desktopDisplayDevice.getDeviceName();
len = deviceName ? strlen(deviceName) : 0;
if (len && deviceNameUTF8 && len <= deviceNameUTF8Length) {
if (len && deviceNameUTF8 && len < deviceNameUTF8Length) {
memcpy(deviceNameUTF8,
deviceName,
len);
@@ -313,7 +313,7 @@ int32_t WindowDeviceInfoImpl::GetDeviceName(uint32_t deviceNumber,
const char *deviceUniqueId = desktopDisplayDevice.getUniqueIdName();
len = deviceUniqueId ? strlen(deviceUniqueId) : 0;
if (len && deviceUniqueIdUTF8 && len <= deviceUniqueIdUTF8Length) {
if (len && deviceUniqueIdUTF8 && len < deviceUniqueIdUTF8Length) {
memcpy(deviceUniqueIdUTF8,
deviceUniqueId,
len);
+2 -6
View File
@@ -1697,12 +1697,8 @@ pref("dom.server-events.default-reconnection-time", 5000); // in milliseconds
// by the jar channel.
pref("network.jar.open-unsafe-types", false);
// If true, loading remote JAR files using the jar: protocol will be prevented.
#ifdef RELEASE_OR_BETA
// Keep allowing remote JAR files for IBM iNotes (see bug 1255139) for now.
// See also bug 1255139 if you have issues with Lotus Notes.
pref("network.jar.block-remote-files", false);
#else
pref("network.jar.block-remote-files", true);
#endif
// This preference, if true, causes all UTF-8 domain names to be normalized to
// punycode. The intention is to allow UTF-8 domain names as input, but never
@@ -3572,7 +3568,7 @@ pref("intl.imm.vertical_writing.always_assume_not_supported", false);
// We cannot retrieve active IME name with IMM32 API if a TIP of TSF is active.
// This pref can specify active IME name when Japanese TIP is active.
// For example:
// Google Japanese Input: "Google 日本語入力 IMM32 モジュール"
// Google Japanese Input: "Google ?¥æœ¬èªžå…¥??IMM32 ?¢ã‚¸?¥ãƒ¼??
// ATOK 2011: "ATOK 2011" (similarly, e.g., ATOK 2013 is "ATOK 2013")
pref("intl.imm.japanese.assume_active_tip_name_as", "");
+12 -5
View File
@@ -270,7 +270,8 @@ public:
NS_DECL_THREADSAFE_ISUPPORTS
PACResolver()
: mStatus(NS_ERROR_FAILURE)
: mStatus(NS_ERROR_FAILURE),
mMutex("PACResolver::Mutex")
{
}
@@ -279,12 +280,17 @@ public:
nsIDNSRecord *record,
nsresult status) override
{
if (mTimer) {
mTimer->Cancel();
mTimer = nullptr;
nsCOMPtr<nsITimer> timer;
{
MutexAutoLock lock(mMutex);
timer.swap(mTimer);
mRequest = nullptr;
}
if (timer) {
timer->Cancel();
}
mRequest = nullptr;
mStatus = status;
mResponse = record;
return NS_OK;
@@ -303,6 +309,7 @@ public:
nsCOMPtr<nsICancelable> mRequest;
nsCOMPtr<nsIDNSRecord> mResponse;
nsCOMPtr<nsITimer> mTimer;
Mutex mMutex;
private:
~PACResolver() {}
+49 -20
View File
@@ -241,7 +241,7 @@ wa.au
// 3LDs
act.edu.au
catholic.edu.au
eq.edu.au
// eq.edu.au - Removed at the request of the Queensland Department of Education
nsw.edu.au
nt.edu.au
qld.edu.au
@@ -982,8 +982,19 @@ fi
// TODO: Check for updates (expected to be phased out around Q1/2009)
aland.fi
// fj : https://en.wikipedia.org/wiki/.fj
*.fj
// fj : http://domains.fj/
// Submitted by registry <garth.miller@cocca.org.nz> 2020-02-11
fj
ac.fj
biz.fj
com.fj
gov.fj
info.fj
mil.fj
name.fj
net.fj
org.fj
pro.fj
// fk : https://en.wikipedia.org/wiki/.fk
*.fk
@@ -7074,7 +7085,7 @@ org.zw
// newGTLDs
// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2019-12-11T17:19:54Z
// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2020-02-06T17:49:42Z
// This list is auto-generated, don't edit it manually.
// aaa : 2015-02-26 American Automobile Association, Inc.
aaa
@@ -7196,6 +7207,9 @@ alsace
// alstom : 2015-07-30 ALSTOM
alstom
// amazon : 2019-12-19 Amazon EU S.à r.l.
amazon
// americanexpress : 2015-07-31 American Express Travel Related Services Company, Inc.
americanexpress
@@ -7373,7 +7387,7 @@ bcn
// beats : 2015-05-14 Beats Electronics, LLC
beats
// beauty : 2015-12-03 L'Oréal
// beauty : 2015-12-03 XYZ.COM LLC
beauty
// beer : 2014-01-09 Minds + Machines Group Limited
@@ -7829,7 +7843,7 @@ cuisinella
// cymru : 2014-05-08 Nominet UK
cymru
// cyou : 2015-01-22 Beijing Gamease Age Digital Technology Co., Ltd.
// cyou : 2015-01-22 ShortDot SA
cyou
// dabur : 2014-02-06 Dabur India Limited
@@ -8396,7 +8410,7 @@ guitars
// guru : 2013-08-27 Binky Moon, LLC
guru
// hair : 2015-12-03 L'Oréal
// hair : 2015-12-03 XYZ.COM LLC
hair
// hamburg : 2014-02-20 Hamburg Top-Level-Domain GmbH
@@ -8795,9 +8809,6 @@ lexus
// lgbt : 2014-05-08 Afilias Limited
lgbt
// liaison : 2014-10-02 Liaison Technologies, Incorporated
liaison
// lidl : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG
lidl
@@ -8918,7 +8929,7 @@ maif
// maison : 2013-12-05 Binky Moon, LLC
maison
// makeup : 2015-01-15 L'Oréal
// makeup : 2015-01-15 XYZ.COM LLC
makeup
// man : 2014-12-04 MAN SE
@@ -9062,9 +9073,6 @@ mov
// movie : 2015-02-05 Binky Moon, LLC
movie
// movistar : 2014-10-16 Telefónica S.A.
movistar
// msd : 2015-07-23 MSD Registry Holdings, Inc.
msd
@@ -9764,7 +9772,7 @@ site
// ski : 2015-04-09 Afilias Limited
ski
// skin : 2015-01-15 L'Oréal
// skin : 2015-01-15 XYZ.COM LLC
skin
// sky : 2014-06-19 Sky International AG
@@ -9959,9 +9967,6 @@ tech
// technology : 2013-09-13 Binky Moon, LLC
technology
// telefonica : 2014-10-16 Telefónica S.A.
telefonica
// temasek : 2014-08-07 Temasek Holdings (Private) Limited
temasek
@@ -10403,6 +10408,9 @@ xin
// xn--cck2b3b : 2015-02-26 Amazon Registry Services, Inc.
ストア
// xn--cckwcxetd : 2019-12-19 Amazon EU S.à r.l.
アマゾン
// xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD
삼성
@@ -10472,6 +10480,9 @@ xin
// xn--j1aef : 2015-01-15 VeriSign Sarl
ком
// xn--jlq480n2rg : 2019-12-19 Amazon EU S.à r.l.
亚马逊
// xn--jlq61u9w7b : 2015-01-08 Nokia Corporation
诺基亚
@@ -10532,7 +10543,7 @@ xin
// xn--nyqy26a : 2014-11-07 Stable Tone Limited
健康
// xn--otu796d : 2017-08-06 Internet DotTrademark Organisation Limited
// xn--otu796d : 2017-08-06 Jiang Yu Liang Cai Technology Company Limited
招聘
// xn--p1acf : 2013-12-12 Rusnames Limited
@@ -10954,8 +10965,9 @@ certmgr.org
xenapponazure.com
// Civilized Discourse Construction Kit, Inc. : https://www.discourse.org/
// Submitted by Rishabh Nambiar <rishabh.nambiar@discourse.org>
// Submitted by Rishabh Nambiar & Michael Brown <team@discourse.org>
discourse.group
discourse.team
// ClearVox : http://www.clearvox.nl/
// Submitted by Leon Rowland <leon@clearvox.nl>
@@ -11685,6 +11697,7 @@ vologda.su
// Fancy Bits, LLC : http://getchannels.com
// Submitted by Aman Gupta <aman@getchannels.com>
channelsdvr.net
u.channelsdvr.net
// Fastly Inc. : http://www.fastly.com/
// Submitted by Fastly Security <security@fastly.com>
@@ -12604,6 +12617,10 @@ pubtls.org
// Submitted by Xavier De Cock <xdecock@gmail.com>
qualifioapp.com
// QuickBackend: https://www.quickbackend.com
// Submitted by Dani Biro <dani@pymet.com>
qbuser.com
// Redstar Consultants : https://www.redstarconsultants.com/
// Submitted by Jons Slemmer <jons@redstarconsultants.com>
instantcloud.cn
@@ -12718,6 +12735,10 @@ my-firewall.org
myfirewall.org
spdns.org
// Senseering GmbH : https://www.senseering.de
// Submitted by Felix Mönckemeyer <f.moenckemeyer@senseering.de>
senseering.net
// Service Online LLC : http://drs.ua/
// Submitted by Serhii Bulakh <support@drs.ua>
biz.ua
@@ -12988,6 +13009,14 @@ remotewd.com
// Submitted by Yuvi Panda <yuvipanda@wikimedia.org>
wmflabs.org
// WoltLab GmbH : https://www.woltlab.com
// Submitted by Tim Düsterhus <security@woltlab.cloud>
myforum.community
community-pro.de
diskussionsbereich.de
community-pro.net
meinforum.net
// XenonCloud GbR: https://xenoncloud.net
// Submitted by Julian Uphoff <publicsuffixlist@xenoncloud.net>
half.host
@@ -87,6 +87,7 @@ nsFtpState::nsFtpState()
, mAnonymous(true)
, mRetryPass(false)
, mStorReplyReceived(false)
, mRlist1xxReceived(false)
, mInternalError(NS_OK)
, mReconnectAndLoginAgain(false)
, mCacheConnection(true)
@@ -1189,15 +1190,18 @@ nsFtpState::S_list() {
FTP_STATE
nsFtpState::R_list() {
if (mResponseCode/100 == 1) {
mRlist1xxReceived = true;
// OK, time to start reading from the data connection.
if (mDataStream && HasPendingCallback())
mDataStream->AsyncWait(this, 0, 0, CallbackTarget());
return FTP_READ_BUF;
}
if (mResponseCode/100 == 2) {
if (mResponseCode/100 == 2 && mRlist1xxReceived) {
//(DONE)
mNextState = FTP_COMPLETE;
mRlist1xxReceived = false;
return FTP_COMPLETE;
}
return FTP_ERROR;
@@ -185,6 +185,8 @@ private:
bool mRetryPass; // retrying the password
bool mStorReplyReceived; // FALSE if waiting for STOR
// completion status from server
bool mRlist1xxReceived; // TRUE if we have received a LIST
// 1xx response from the server
nsresult mInternalError; // represents internal state errors
bool mReconnectAndLoginAgain;
bool mCacheConnection;
-4
View File
@@ -722,8 +722,6 @@ public abstract class TreeBuilder<T> implements TokenHandler,
contextName);
}
}
contextName = null;
contextNode = null;
} else {
mode = INITIAL;
// If we are viewing XML source, put a foreign element permanently
@@ -1629,8 +1627,6 @@ public abstract class TreeBuilder<T> implements TokenHandler,
* @see nu.validator.htmlparser.common.TokenHandler#endTokenization()
*/
public final void endTokenization() throws SAXException {
formPointer = null;
headPointer = null;
deepTreeSurrogateParent = null;
templateModeStack = null;
if (stack != null) {
+2 -2
View File
@@ -143,8 +143,6 @@ nsHtml5TreeBuilder::startTokenization(nsHtml5Tokenizer* self)
tokenizer->setState(NS_HTML5TOKENIZER_DATA);
}
}
contextName = nullptr;
contextNode = nullptr;
} else {
mode = NS_HTML5TREE_BUILDER_INITIAL;
if (tokenizer->isViewingXmlSource()) {
@@ -583,6 +581,8 @@ nsHtml5TreeBuilder::endTokenization()
{
formPointer = nullptr;
headPointer = nullptr;
contextName = nullptr;
contextNode = nullptr;
deepTreeSurrogateParent = nullptr;
templateModeStack = nullptr;
if (stack) {
+2 -4
View File
@@ -686,7 +686,6 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
{ "chrome-devtools-frontend.appspot.com", true, false, false, -1, &kPinset_google_root_pems },
{ "chrome.com", true, false, false, -1, &kPinset_google_root_pems },
{ "chrome.google.com", true, false, false, -1, &kPinset_google_root_pems },
{ "chromereporting-pa.googleapis.com", true, false, false, -1, &kPinset_google_root_pems },
{ "chromiumbugs.appspot.com", true, false, false, -1, &kPinset_google_root_pems },
{ "chromiumcodereview.appspot.com", true, false, false, -1, &kPinset_google_root_pems },
{ "cl.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
@@ -1083,7 +1082,6 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
{ "torproject.org", false, false, false, -1, &kPinset_tor },
{ "touch.facebook.com", true, false, false, -1, &kPinset_facebook },
{ "tr.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
{ "translate.googleapis.com", true, false, false, -1, &kPinset_google_root_pems },
{ "tv.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
{ "tw.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
{ "twimg.com", true, false, false, -1, &kPinset_twitterCDN },
@@ -1133,8 +1131,8 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
{ "zh.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
};
// Pinning Preload List Length = 488;
// Pinning Preload List Length = 486;
static const int32_t kUnknownId = -1;
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1585251655362000);
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1590413552686000);
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+7 -12
View File
@@ -105,29 +105,24 @@ BackCert::Init()
return rv;
}
static const uint8_t CSC = der::CONTEXT_SPECIFIC | der::CONSTRUCTED;
// According to RFC 5280, all fields below this line are forbidden for
// certificate versions less than v3. However, for compatibility reasons,
// we parse v1/v2 certificates in the same way as v3 certificates. So if
// these fields appear in a v1 certificate, they will be used.
// Ignore issuerUniqueID if present.
if (tbsCertificate.Peek(CSC | 1)) {
rv = der::ExpectTagAndSkipValue(tbsCertificate, CSC | 1);
if (rv != Success) {
return rv;
}
rv = der::SkipOptionalImplicitPrimitiveTag(tbsCertificate, 1);
if (rv != Success) {
return rv;
}
// Ignore subjectUniqueID if present.
if (tbsCertificate.Peek(CSC | 2)) {
rv = der::ExpectTagAndSkipValue(tbsCertificate, CSC | 2);
if (rv != Success) {
return rv;
}
rv = der::SkipOptionalImplicitPrimitiveTag(tbsCertificate, 2);
if (rv != Success) {
return rv;
}
static const uint8_t CSC = der::CONTEXT_SPECIFIC | der::CONSTRUCTED;
rv = der::OptionalExtensions(
tbsCertificate, CSC | 3,
[this](Reader& extnID, const Input& extnValue, bool critical,
+11
View File
@@ -123,6 +123,17 @@ ExpectTagAndSkipValue(Reader& input, uint8_t tag)
return ExpectTagAndGetValue(input, tag, ignoredValue);
}
// This skips IMPLICIT OPTIONAL tags that are "primitive" (not constructed),
// given the number in the class of the tag (i.e. the number in the brackets in
// `issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL`).
inline Result SkipOptionalImplicitPrimitiveTag(Reader& input,
uint8_t numberInClass) {
if (input.Peek(CONTEXT_SPECIFIC | numberInClass)) {
return ExpectTagAndSkipValue(input, CONTEXT_SPECIFIC | numberInClass);
}
return Success;
}
// Like ExpectTagAndGetValue, except the output Input will contain the
// encoded tag and length along with the value.
inline Result
+18 -23
View File
@@ -285,26 +285,33 @@ DatabasePathFromWALPath(const char *zWALName)
MOZ_CRASH("Should never get here!");
}
already_AddRefed<QuotaObject>
GetQuotaObjectFromNameAndParameters(const char *zName,
const char *zURIParameterKey)
{
MOZ_ASSERT(zName);
MOZ_ASSERT(zURIParameterKey);
already_AddRefed<QuotaObject> GetQuotaObjectFromName(const char *zName,
bool deriveFromWal) {
// From Sqlite 3.31.0 the zName format changed to work consistently across
// database, wal and journal names.
// We must support both ways because this code will be uplifted to ensure
// that if system Sqlite is upgraded before us, we keep working properly.
// Once the Firefox minimum Sqlite version is 3.31.0, we can remove the else
// branch, DatabasePathFromWALPath, and the deriveFromWal argument.
const char* filename = zName;
if (deriveFromWal && sqlite3_libversion_number() < 3031000) {
filename = DatabasePathFromWALPath(zName);
}
MOZ_ASSERT(filename);
const char *persistenceType =
sqlite3_uri_parameter(zURIParameterKey, "persistenceType");
sqlite3_uri_parameter(filename, "persistenceType");
if (!persistenceType) {
return nullptr;
}
const char *group = sqlite3_uri_parameter(zURIParameterKey, "group");
const char *group = sqlite3_uri_parameter(filename, "group");
if (!group) {
NS_WARNING("SQLite URI had 'persistenceType' but not 'group'?!");
return nullptr;
}
const char *origin = sqlite3_uri_parameter(zURIParameterKey, "origin");
const char *origin = sqlite3_uri_parameter(filename, "origin");
if (!origin) {
NS_WARNING("SQLite URI had 'persistenceType' and 'group' but not "
"'origin'?!");
@@ -333,16 +340,7 @@ MaybeEstablishQuotaControl(const char *zName,
return;
}
MOZ_ASSERT(zName);
const char *zURIParameterKey = (flags & SQLITE_OPEN_WAL) ?
DatabasePathFromWALPath(zName) :
zName;
MOZ_ASSERT(zURIParameterKey);
pFile->quotaObject =
GetQuotaObjectFromNameAndParameters(zName, zURIParameterKey);
pFile->quotaObject = GetQuotaObjectFromName(zName, flags & SQLITE_OPEN_WAL);
}
/*
@@ -715,10 +713,7 @@ xDelete(sqlite3_vfs* vfs, const char *zName, int syncDir)
RefPtr<QuotaObject> quotaObject;
if (StringEndsWith(nsDependentCString(zName), NS_LITERAL_CSTRING("-wal"))) {
const char *zURIParameterKey = DatabasePathFromWALPath(zName);
MOZ_ASSERT(zURIParameterKey);
quotaObject = GetQuotaObjectFromNameAndParameters(zName, zURIParameterKey);
quotaObject = GetQuotaObjectFromName(zName, true);
}
rc = orig_vfs->xDelete(orig_vfs, zName, syncDir);
@@ -285,6 +285,11 @@ nsAppStartup::Run(void)
return rv;
}
// Make sure that the appropriate quit notifications have been dispatched
// regardless of whether the event loop has spun or not. Note that this call
// is a no-op if Quit has already been called previously.
Quit(eForceQuit);
nsresult retval = NS_OK;
if (mRestart) {
retval = NS_SUCCESS_RESTART_APP;
+6 -2
View File
@@ -58,7 +58,8 @@ nsBaseDragService::nsBaseDragService()
mDragAction(DRAGDROP_ACTION_NONE),
mDragActionFromChildProcess(DRAGDROP_ACTION_UNINITIALIZED), mTargetSize(0,0),
mContentPolicyType(nsIContentPolicy::TYPE_OTHER),
mSuppressLevel(0), mInputSource(nsIDOMMouseEvent::MOZ_SOURCE_MOUSE)
mSuppressLevel(0), mInputSource(nsIDOMMouseEvent::MOZ_SOURCE_MOUSE),
mEndingSession(false)
{
}
@@ -382,10 +383,12 @@ nsBaseDragService::TakeChildProcessDragAction()
NS_IMETHODIMP
nsBaseDragService::EndDragSession(bool aDoneDrag)
{
if (!mDoingDrag) {
if (!mDoingDrag || mEndingSession) {
return NS_ERROR_FAILURE;
}
mEndingSession = true;
if (aDoneDrag && !mSuppressLevel) {
FireDragEventAtSource(eDragEnd);
}
@@ -412,6 +415,7 @@ nsBaseDragService::EndDragSession(bool aDoneDrag)
}
mDoingDrag = false;
mEndingSession = false;
mCanDrop = false;
// release the source we've been holding on to.
+3
View File
@@ -147,6 +147,9 @@ protected:
bool mCanDrop;
bool mOnlyChromeDrop;
bool mDoingDrag;
// true if in EndDragSession
bool mEndingSession;
// true if mImage should be used to set a drag image
bool mHasImage;
// true if the user cancelled the drag operation
+3
View File
@@ -1556,6 +1556,9 @@ nsLocalFile::IsExecutable(bool* aResult)
// Search for any of the set of executable extensions.
static const char* const executableExts[] = {
"air", // Adobe AIR installer
#ifdef MOZ_WIDGET_COCOA
"fileloc", // File location files can be used to point to other files.
#endif
"jar" // java application bundle
};
nsDependentSubstring ext = Substring(path, dotIdx + 1);