Merge m-i to m-c, a=merge

This commit is contained in:
Phil Ringnalda 2015-01-25 11:43:56 -08:00
commit 626a37b7e9
27 changed files with 241 additions and 72 deletions

View File

@ -287,8 +287,7 @@ this.ContentControl.prototype = {
elem.dispatchEvent(evt);
} else {
let evt = this.document.createEvent('KeyboardEvent');
let keycode = aStepUp ? content.KeyEvent.DOM_VK_DOWN :
content.KeyEvent.DOM_VK_UP;
let keycode = aStepUp ? evt.DOM_VK_DOWN : evt.DOM_VK_UP;
evt.initKeyEvent(
"keypress", false, true, null, false, false, false, false, keycode, 0);
elem.dispatchEvent(evt);

View File

@ -21,8 +21,9 @@ skip-if = os == "mac" # Intermittent failures, bug 898317
[browser_newtab_bug998387.js]
[browser_newtab_disable.js]
[browser_newtab_drag_drop.js]
skip-if = os == "win" && debug # bug 1097056; test fails in --run-by-dir mode on win8 x64 debug
skip-if = os == "win" && debug || (os == 'mac' && os_version == '10.10') # bug 1097056; test fails in --run-by-dir mode on win8 x64 debug; Bug 1122479 - newtab drag-drop tests fail on OS X 10.10
[browser_newtab_drag_drop_ext.js]
skip-if = (os == 'mac' && os_version == '10.10') # bug 1122479 - newtab drag-drop tests fail on OS X 10.10
[browser_newtab_drop_preview.js]
[browser_newtab_enhanced.js]
[browser_newtab_focus.js]

View File

@ -6282,6 +6282,9 @@ class CGCallGenerator(CGThing):
self.cgRoot.prepend(CGWrapper(result, post=";\n"))
if resultOutParam is None:
call = CGWrapper(call, pre=resultVar + " = ")
elif result is not None:
assert resultOutParam is None
call = CGWrapper(call, pre=resultVar + " = ")
call = CGWrapper(call, post=";\n")
self.cgRoot.append(call)

View File

@ -85,7 +85,6 @@ typedef HANDLE (WINAPI *CreateFileWPtr)(LPCWSTR fname, DWORD access,
DWORD creation, DWORD flags,
HANDLE ftemplate);
static CreateFileWPtr sCreateFileWStub = nullptr;
static WCHAR* sReplacementConfigFile;
// Used with fix for flash fullscreen window loosing focus.
static bool gDelayFlashFocusReplyUntilEval = false;
@ -1933,10 +1932,6 @@ PluginModuleChild::DoNP_Initialize(const PluginSettings& aSettings)
# error Please implement me for your platform
#endif
#ifdef XP_WIN
CleanupProtectedModeHook();
#endif
return result;
}
@ -1971,7 +1966,8 @@ CreateFileHookFn(LPCWSTR fname, DWORD access, DWORD share,
HANDLE replacement =
sCreateFileWStub(tempFile, GENERIC_READ | GENERIC_WRITE, share,
security, TRUNCATE_EXISTING,
FILE_ATTRIBUTE_TEMPORARY,
FILE_ATTRIBUTE_TEMPORARY |
FILE_FLAG_DELETE_ON_CLOSE,
NULL);
if (replacement == INVALID_HANDLE_VALUE) {
break;
@ -2001,7 +1997,6 @@ CreateFileHookFn(LPCWSTR fname, DWORD access, DWORD share,
WriteFile(replacement, static_cast<const void*>(kSettingString),
sizeof(kSettingString) - 1, &wbytes, NULL);
SetFilePointer(replacement, 0, NULL, FILE_BEGIN);
sReplacementConfigFile = _wcsdup(tempFile);
return replacement;
}
return sCreateFileWStub(fname, access, share, security, creation, flags,
@ -2017,16 +2012,6 @@ PluginModuleChild::HookProtectedMode()
(void**) &sCreateFileWStub);
}
void
PluginModuleChild::CleanupProtectedModeHook()
{
if (sReplacementConfigFile) {
DeleteFile(sReplacementConfigFile);
free(sReplacementConfigFile);
sReplacementConfigFile = nullptr;
}
}
BOOL WINAPI
PMCGetWindowInfoHook(HWND hWnd, PWINDOWINFO pwi)
{

View File

@ -307,7 +307,6 @@ private:
#if defined(OS_WIN)
void HookProtectedMode();
void CleanupProtectedModeHook();
#endif
#if defined(MOZ_WIDGET_GTK)

View File

@ -19,9 +19,13 @@ interface SVGSVGElement : SVGGraphicsElement {
readonly attribute SVGAnimatedLength width;
readonly attribute SVGAnimatedLength height;
// readonly attribute SVGRect viewport;
[Constant]
readonly attribute float pixelUnitToMillimeterX;
[Constant]
readonly attribute float pixelUnitToMillimeterY;
[Constant]
readonly attribute float screenPixelToMillimeterX;
[Constant]
readonly attribute float screenPixelToMillimeterY;
readonly attribute boolean useCurrentView;
// readonly attribute SVGViewSpec currentView;

View File

@ -147,7 +147,8 @@ ClippedImage::ShouldClip()
// If the clipping region is the same size as the underlying image we
// don't have to do anything.
mShouldClip.emplace(!mClip.IsEqualInterior(nsIntRect(0, 0, width, height)));
} else if (progressTracker && progressTracker->IsLoading()) {
} else if (progressTracker &&
!(progressTracker->GetProgress() & FLAG_LOAD_COMPLETE)) {
// The image just hasn't finished loading yet. We don't yet know whether
// clipping with be needed or not for now. Just return without memoizing
// anything.

View File

@ -36,6 +36,7 @@ Decoder::Decoder(RasterImage* aImage)
, mDataError(false)
, mDecodeAborted(false)
, mImageIsTransient(false)
, mImageIsLocked(false)
, mFrameCount(0)
, mFailCode(NS_OK)
, mNeedsNewFrame(false)

View File

@ -189,6 +189,19 @@ public:
mImageIsTransient = aIsTransient;
}
/**
* Set whether the image is locked for the lifetime of this decoder. We lock
* the image during our initial decode to ensure that we don't evict any
* surfaces before we realize that the image is animated.
*/
void SetImageIsLocked()
{
MOZ_ASSERT(!mInitialized, "Shouldn't be initialized yet");
mImageIsLocked = true;
}
bool ImageIsLocked() const { return mImageIsLocked; }
size_t BytesDecoded() const { return mBytesDecoded; }
// The amount of time we've spent inside Write() so far for this decoder.
@ -445,6 +458,7 @@ protected:
bool mDataError;
bool mDecodeAborted;
bool mImageIsTransient;
bool mImageIsLocked;
private:
uint32_t mFrameCount; // Number of frames, including anything in-progress

View File

@ -127,18 +127,18 @@ class Downscaler
public:
explicit Downscaler(const nsIntSize&)
{
MOZ_RELEASE_ASSERT("Skia is not enabled");
MOZ_RELEASE_ASSERT(false, "Skia is not enabled");
}
const nsIntSize& OriginalSize() const { return nsIntSize(); }
const nsIntSize& TargetSize() const { return nsIntSize(); }
uint8_t* Buffer() { return nullptr; }
nsresult BeginFrame(const nsIntSize&, uint8_t*, bool)
{
return NS_ERROR_FAILURE;
}
uint8_t* RowBuffer() { return nullptr; }
void CommitRow() { }
bool HasInvalidation() const { return false; }
nsIntRect TakeInvalidRect() { return nsIntRect(); }

View File

@ -99,15 +99,6 @@ ProgressTracker::ResetImage()
mImage = nullptr;
}
bool
ProgressTracker::IsLoading() const
{
// Checking for whether OnStopRequest has fired allows us to say we're
// loading before OnStartRequest gets called, letting the request properly
// get removed from the cache in certain cases.
return !(mProgress & FLAG_LOAD_COMPLETE);
}
uint32_t
ProgressTracker::GetImageStatus() const
{

View File

@ -88,10 +88,6 @@ public:
return image.forget();
}
// Returns whether we are in the process of loading; that is, whether we have
// not received OnStopRequest from Necko.
bool IsLoading() const;
// Get the current image status (as in imgIRequest).
uint32_t GetImageStatus() const;

View File

@ -1365,6 +1365,15 @@ RasterImage::CreateDecoder(const Maybe<nsIntSize>& aSize, uint32_t aFlags)
decoder->SetSendPartialInvalidations(!mHasBeenDecoded);
decoder->SetImageIsTransient(mTransient);
decoder->SetDecodeFlags(DecodeFlags(aFlags));
if (!mHasBeenDecoded && aSize) {
// Lock the image while we're decoding, so that it doesn't get evicted from
// the SurfaceCache before we have a chance to realize that it's animated.
// The corresponding unlock happens in FinalizeDecoder.
LockImage();
decoder->SetImageIsLocked();
}
if (aSize) {
// We already have the size; tell the decoder so it can preallocate a
// frame. By default, we create an ARGB frame with no offset. If decoders
@ -1544,11 +1553,6 @@ RasterImage::Decode(DecodeStrategy aStrategy,
NotifyProgress(decoder->TakeProgress(),
decoder->TakeInvalidRect(),
decoder->GetDecodeFlags());
// Lock the image while we're decoding, so that it doesn't get evicted from
// the SurfaceCache before we have a chance to realize that it's animated.
// The corresponding unlock happens in FinalizeDecoder.
LockImage();
}
if (mHasSourceData) {
@ -2045,8 +2049,8 @@ RasterImage::FinalizeDecoder(Decoder* aDecoder)
}
}
if (!wasSize) {
// Unlock the image, balancing the LockImage call we made in Decode().
if (aDecoder->ImageIsLocked()) {
// Unlock the image, balancing the LockImage call we made in CreateDecoder.
UnlockImage();
}

View File

@ -233,7 +233,8 @@ nsresult imgRequest::RemoveProxy(imgRequestProxy *proxy, nsresult aStatus)
This way, if a proxy is destroyed without calling cancel on it, it won't leak
and won't leave a bad pointer in the observer list.
*/
if (progressTracker->IsLoading() && NS_FAILED(aStatus)) {
if (!(progressTracker->GetProgress() & FLAG_LAST_PART_COMPLETE) &&
NS_FAILED(aStatus)) {
LOG_MSG(GetImgLog(), "imgRequest::RemoveProxy", "load in progress. canceling");
this->Cancel(NS_BINDING_ABORTED);
@ -309,7 +310,7 @@ void imgRequest::ContinueCancel(nsresult aStatus)
RemoveFromCache();
if (mRequest && progressTracker->IsLoading()) {
if (mRequest && !(progressTracker->GetProgress() & FLAG_LAST_PART_COMPLETE)) {
mRequest->Cancel(aStatus);
}
}

View File

@ -535,9 +535,7 @@ BacktrackingAllocator::processInterval(LiveInterval *interval)
// be constructed so that any minimal interval is allocatable.
MOZ_ASSERT(!minimalInterval(interval));
if (canAllocate && fixed)
return splitAcrossCalls(interval);
return chooseIntervalSplit(interval, conflict);
return chooseIntervalSplit(interval, canAllocate && fixed, conflict);
}
}
@ -1521,11 +1519,62 @@ BacktrackingAllocator::trySplitAcrossHotcode(LiveInterval *interval, bool *succe
JitSpew(JitSpew_RegAlloc, " split across hot range %s", hotRange->toString());
SplitPositionVector splitPositions;
if (!splitPositions.append(hotRange->from) || !splitPositions.append(hotRange->to))
// Tweak the splitting method when compiling asm.js code to look at actual
// uses within the hot/cold code. This heuristic is in place as the below
// mechanism regresses several asm.js tests. Hopefully this will be fixed
// soon and this special case removed. See bug 948838.
if (compilingAsmJS()) {
SplitPositionVector splitPositions;
if (!splitPositions.append(hotRange->from) || !splitPositions.append(hotRange->to))
return false;
*success = true;
return splitAt(interval, splitPositions);
}
LiveInterval *hotInterval = LiveInterval::New(alloc(), interval->vreg(), 0);
LiveInterval *preInterval = nullptr, *postInterval = nullptr;
// Accumulate the ranges of hot and cold code in the interval. Note that
// we are only comparing with the single hot range found, so the cold code
// may contain separate hot ranges.
Vector<LiveInterval::Range, 1, SystemAllocPolicy> hotList, coldList;
for (size_t i = 0; i < interval->numRanges(); i++) {
LiveInterval::Range hot, coldPre, coldPost;
interval->getRange(i)->intersect(hotRange, &coldPre, &hot, &coldPost);
if (!hot.empty() && !hotInterval->addRange(hot.from, hot.to))
return false;
if (!coldPre.empty()) {
if (!preInterval)
preInterval = LiveInterval::New(alloc(), interval->vreg(), 0);
if (!preInterval->addRange(coldPre.from, coldPre.to))
return false;
}
if (!coldPost.empty()) {
if (!postInterval)
postInterval = LiveInterval::New(alloc(), interval->vreg(), 0);
if (!postInterval->addRange(coldPost.from, coldPost.to))
return false;
}
}
MOZ_ASSERT(preInterval || postInterval);
MOZ_ASSERT(hotInterval->numRanges());
LiveIntervalVector newIntervals;
if (!newIntervals.append(hotInterval))
return false;
if (preInterval && !newIntervals.append(preInterval))
return false;
if (postInterval && !newIntervals.append(postInterval))
return false;
distributeUses(interval, newIntervals);
*success = true;
return splitAt(interval, splitPositions);
return split(interval, newIntervals) && requeueIntervals(newIntervals);
}
bool
@ -1875,7 +1924,7 @@ BacktrackingAllocator::splitAcrossCalls(LiveInterval *interval)
}
bool
BacktrackingAllocator::chooseIntervalSplit(LiveInterval *interval, LiveInterval *conflict)
BacktrackingAllocator::chooseIntervalSplit(LiveInterval *interval, bool fixed, LiveInterval *conflict)
{
bool success = false;
@ -1884,6 +1933,9 @@ BacktrackingAllocator::chooseIntervalSplit(LiveInterval *interval, LiveInterval
if (success)
return true;
if (fixed)
return splitAcrossCalls(interval);
if (!trySplitBeforeFirstRegisterUse(interval, conflict, &success))
return false;
if (success)

View File

@ -236,7 +236,7 @@ class BacktrackingAllocator
size_t computePriority(const VirtualRegisterGroup *group);
size_t computeSpillWeight(const VirtualRegisterGroup *group);
bool chooseIntervalSplit(LiveInterval *interval, LiveInterval *conflict);
bool chooseIntervalSplit(LiveInterval *interval, bool fixed, LiveInterval *conflict);
bool splitAt(LiveInterval *interval,
const SplitPositionVector &splitPositions);
@ -245,6 +245,10 @@ class BacktrackingAllocator
bool trySplitBeforeFirstRegisterUse(LiveInterval *interval, LiveInterval *conflict, bool *success);
bool splitAtAllRegisterUses(LiveInterval *interval);
bool splitAcrossCalls(LiveInterval *interval);
bool compilingAsmJS() {
return mir->info().compilingAsmJS();
}
};
} // namespace jit

View File

@ -480,19 +480,19 @@ nsFieldSetFrame::Reflow(nsPresContext* aPresContext,
// Our child is "height:100%" but we actually want its height to be reduced
// by the amount of content-height the legend is eating up, unless our
// height is unconstrained (in which case the child's will be too).
if (aReflowState.ComputedHeight() != NS_UNCONSTRAINEDSIZE) {
kidReflowState.SetComputedHeight(
std::max(0, aReflowState.ComputedHeight() - mLegendSpace));
if (aReflowState.ComputedBSize() != NS_UNCONSTRAINEDSIZE) {
kidReflowState.SetComputedBSize(
std::max(0, aReflowState.ComputedBSize() - mLegendSpace));
}
if (aReflowState.ComputedMinHeight() > 0) {
kidReflowState.ComputedMinHeight() =
std::max(0, aReflowState.ComputedMinHeight() - mLegendSpace);
if (aReflowState.ComputedMinBSize() > 0) {
kidReflowState.ComputedMinBSize() =
std::max(0, aReflowState.ComputedMinBSize() - mLegendSpace);
}
if (aReflowState.ComputedMaxHeight() != NS_UNCONSTRAINEDSIZE) {
kidReflowState.ComputedMaxHeight() =
std::max(0, aReflowState.ComputedMaxHeight() - mLegendSpace);
if (aReflowState.ComputedMaxBSize() != NS_UNCONSTRAINEDSIZE) {
kidReflowState.ComputedMaxBSize() =
std::max(0, aReflowState.ComputedMaxBSize() - mLegendSpace);
}
nsHTMLReflowMetrics kidDesiredSize(kidReflowState,

View File

@ -99,6 +99,6 @@ fails-if(OSX==1006) == 672646-alpha-radial-gradient.html 672646-alpha-radial-gra
== 749467-1.html 749467-1-ref.html
# You get a little bit of rounding fuzz on OSX from transforming the paths between user space and device space
fuzzy-if(azureQuartz,2,113) fuzzy-if(d2d,12,21) == 784573-1.html 784573-1-ref.html
fuzzy-if(azureQuartz,2,128) fuzzy-if(d2d,12,21) == 784573-1.html 784573-1-ref.html
== 802658-1.html 802658-1-ref.html

View File

@ -52,9 +52,9 @@ fuzzy-if(!contentSameGfxBackendAsCanvas,1,88500) fuzzy-if(azureSkiaGL,2,89700) f
fuzzy-if(!contentSameGfxBackendAsCanvas,1,88500) fuzzy-if(azureSkiaGL,2,89700) fuzzy-if(azureQuartz,1,22367) == linear-vertical-1e.html linear-vertical-1-ref.html
== linear-vertical-subpixel-1.html linear-vertical-subpixel-1-ref.html
== linear-viewport.html linear-viewport-ref.html
== linear-zero-length-1a.html linear-zero-length-1-ref.html
== linear-zero-length-1b.html linear-zero-length-1-ref.html
== linear-zero-length-1c.html linear-zero-length-1-ref.html
fails-if(OSX==1010) == linear-zero-length-1a.html linear-zero-length-1-ref.html
fails-if(OSX==1010) == linear-zero-length-1b.html linear-zero-length-1-ref.html
fails-if(OSX==1010) == linear-zero-length-1c.html linear-zero-length-1-ref.html
== nostops.html about:blank
== onestop.html about:blank
fuzzy-if(!contentSameGfxBackendAsCanvas,1,5884) fuzzy-if(cocoaWidget,9,87824) fuzzy-if(azureSkiaGL,2,88024) random-if(d2d) == radial-1a.html radial-1-ref.html

View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Maximum height on fieldset</title>
<style>
div {
writing-mode: vertical-lr;
}
fieldset {
background:rgba(0,0,0,0.1);
border-color:teal;
border-width:2px;
height:100px;
}
</style>
</head>
<body>
<div>
<fieldset>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Duis odio est, cursus non adipiscing at, fringilla
quis eros. Sed volutpat nibh sit amet ante molestie a
vehicula nulla gravida. Mauris elementum cursus urna id
vestibulum.</p>
</fieldset>
</div>
</body>
</html>

View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Maximum height on fieldset</title>
<style>
div {
writing-mode: vertical-lr;
}
fieldset {
background:rgba(0,0,0,0.1);
border-color:teal;
border-width:2px;
max-height:100px;
}
</style>
</head>
<body>
<div>
<fieldset>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Duis odio est, cursus non adipiscing at, fringilla
quis eros. Sed volutpat nibh sit amet ante molestie a
vehicula nulla gravida. Mauris elementum cursus urna id
vestibulum.</p>
</fieldset>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Minimum height on fieldset</title>
<style>
div {
writing-mode: vertical-lr;
}
fieldset {
background:rgba(0,0,0,0.1);
border-color:teal;
border-width:2px;
height:400px;
}
</style>
</head>
<body>
<div>
<fieldset>
<p>Lorem ipsum.</p>
</fieldset>
</div>
</body>
</html>

View File

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Minimum height on fieldset</title>
<style>
div {
writing-mode: vertical-lr;
}
fieldset {
background:rgba(0,0,0,0.1);
border-color:teal;
border-width:2px;
min-height:200px;
max-height:400px;
}
</style>
</head>
<body>
<div>
<fieldset>
<p>Lorem ipsum.</p>
</fieldset>
</div>
</body>
</html>

View File

@ -35,3 +35,5 @@ fails == 1102175-1a.html 1102175-1-ref.html
== 1111944-1-list-marker.html 1111944-1-list-marker-ref.html
HTTP(..) == 1115916-1-vertical-metrics.html 1115916-1-vertical-metrics-ref.html
== 1122366-1-margin-collapse.html 1122366-1-margin-collapse-ref.html
== 1124636-1-fieldset-max-height.html 1124636-1-fieldset-max-height-ref.html
== 1124636-2-fieldset-min-height.html 1124636-2-fieldset-min-height-ref.html

View File

@ -23,5 +23,5 @@
TIMEOUT
[Test setting same duration multiple times does not fire duplicate durationchange]
expected: FAIL
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1116007

View File

@ -44,6 +44,8 @@
SimpleTest.waitForExplicitFinish();
const isOSXYosemite = navigator.userAgent.indexOf("Mac OS X 10.10") != -1;
var expectedAnchor = null;
var expectedSide = "", expectedAnchorEdge = "", expectedPack = "", expectedAlignment = "";
var zoomFactor = 1;
@ -292,7 +294,8 @@ function checkPanelPosition(panel)
adj = hwinpos + parseInt(getComputedStyle(panel, "").marginRight);
if (iscentered)
adj += Math.round(anchorRect.width) / 2;
isWithinHalfPixel(panelRect.right, anchorRect.right * zoomFactor - adj, "anchored on right");
if (!isOSXYosemite)
isWithinHalfPixel(panelRect.right, anchorRect.right * zoomFactor - adj, "anchored on right");
break;
}

View File

@ -8,7 +8,7 @@ support-files =
[test_custom_origin.xul]
skip-if = asan
[test_custom_origin_uninstall_install.xul]
skip-if = asan
skip-if = asan || (os == 'mac' && os_version == '10.10') # Bug 1123085
[test_install_appcache.xul]
skip-if = asan
[test_hosted.xul]
@ -22,9 +22,9 @@ skip-if = asan
[test_packaged_launch_no_registry.xul]
skip-if = asan
[test_hosted_uninstall.xul]
skip-if = os == "win" && os_version == "5.1" # see bug 981251
skip-if = (os == "win" && os_version == "5.1") || (os == 'mac' && os_version == '10.10') # WinXP: bug 981251; OS X 10.10: bug 1123085
[test_packaged_uninstall.xul]
skip-if = os == "win" && os_version == "5.1" # see bug 981251
skip-if = (os == "win" && os_version == "5.1") || (os == 'mac' && os_version == '10.10') # WinXP: bug 981251; OS X 10.10: bug 1123085
[test_hosted_update_from_webapp_runtime.xul]
skip-if = asan
[test_packaged_update_from_webapp_runtime.xul]