mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 05:37:11 +00:00
import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1209252: add buttons to clear session and signaling logs. r=jib, r=sicking (39d0a4b57d)
- Bug 1197673 - Use float type for SetAudioOutputVolume. r=eitan (75eae2f441)
- Bug 1188099 - (Part 4) Introduce mochitest coverage for speech global queue. r=smaug r=kdavis (fd4c804c72)
- Bug 1226015 - Have child send __delete__ in speech synth request protocol, fixes race. r=smaug (c46532745a)
- Bug 1230533 - Cancel speech when controlling window goes away. r=smaug (3dae89ffaf)
- Bug 1237176 - skip dom/media/webspeech/synth/test/test_bfcache.html on Linux and Android for frequent timeouts (0d1eabb6fb)
- Bug 1237176 - actually disable test_bfcache.html on Android (1558e0bf39)
- Bug 1240871 - Don't allow implicit "async" in IPDL (r=mccr8,billm) (1db25ace3c)
- Bug 1000040 - Part 2: Implement EthernetManager; r=vicamo (82c01ca9a7)
- Bug 1000040 - Part 3: Test cases; r=vicamo (6a967cc5d9)
- Bug 1245241 - part 2 - remove TYPE_SYSV Shmems from IPDL. r=billm (6d6a4570ca)
- Bug 1245241 - part 3 - remove unused AdoptShmem from IPDL. r=billm (2762a13841)
- Bug 1107792: Don't ask for similar if the surface has an error, and more data in crash reports. r=milan (ead5108a93)
- Bug 1231881 - Remove NativeSurfaceType::CAIRO_SURFACE. r=bas. (c0f03e02f6)
- Bug 1241163 - Replace DrawTarget::CreateSourceSurfaceFromNativeSurface(CAIRO_CONTEXT) with Factory::CreateSourceSurfaceForCairoSurface. r=jrmuizel (06a96cdce6)
- Bug 1240177 - part 1 - add helper function to make Skia image info, r=jrmuizel (6a7d05aeb7)
- Bug 1240177 - part 2 - cleanups of DrawTargetSkia and SourceSurfaceSkia creation for GPU contexts, r=jrmuizel (3211ea9c0e)
- Bug 1240177 - part 3 - make DrawTargetSkia::OptimizeSourceSurface directly upload to GPU textures, r=jrmuizel (743d57a46c)
- Bug 1240177 - part 4 - avoid GPU readbacks in SourceSurfaceSkia::DrawTargetWillChange, r=jrmuizel (f568754717)
- Bug 1240177 - fix SourceSurfaceSkia::DrawTargetWillChange deepCopyTo usage. r=mattwoodrow (2e53d13ba3)
- Bug 1239152 Memset RGBX surfaces to opaque white. r=nical (977c7d5ede)
- Bug 1245241 - part 4 - move SharedMemorySysV details into nsShmImage. r=nical (0015d3caac)
- Bug 1245241 - Force the main thread to sync with the compositor when it tries to allocate insane amounts of shmems. r=lsalzman (7683d2afa7)
- Bug 1245241 - fix SharedMemoryBasic_android CloseHandle to null out handle. r=billm a=kwierso (9fa3f93233)
- Bug 1239152 - skip memset since XShm is already initialized to zero. r=mchang (477ecf2d9a)
- Bug 1227927 Part 1 - Make nsIFrame::PrincipalChildList a const function. r=bz (d9b690a1bc)
- Bug 1214377 - Hack to solve Thunderbird's need to detect style pre-wrap. r=roc a=me (a481ba9020)
- Bug 1214377 - Hack to solve Thunderbird's need to detect style pre-wrap. rs=ehsan on a CLOSED TREE (a15dfcaeb3)
- Bug 1240372 - Don't OOM crash in nsDocumentEncoder::EncodeToStringWithMaxLength() when the string buffer allocation fails; r=bzbarsky (76bed6a40a)
- Bug 1143570 - Part 1: Use an nsBlockInFlowLineIterator to determine whether a BR frame is visible or not; r=roc (99609f6fcd)
- Bug 1064843 part 2 - Make nsSubDocumentFrame inherit nsContainerFrame. r=dholbert (070202e396)
- Bug 1064843 part 3 - Make nsFormControlFrame inherit nsContainerFrame. r=dholbert (cee5125993)
- Bug 1064843 part 4 - Add a placeholder type for top layer. r=roc (e4e564b05b)
- Bug 1064843 part 5 - Ensure frames behave properly for unknown child list id passed into SetInitialChildList. r=dholbert (540f3da6a1)
- Bug 1064843 part 6 - Add backdrop frame list. r=dholbert (79f91fc815)
- Bug 1215365 - Update ua style sheet of fullscreen element. r=heycam (b44060a518)
- Bug 1235969 - Unprefix uses of -moz-transform, -moz-transform-origin and -moz-backface-visibility in UA style sheets. r=xidorn (c7a83cdcae)
- Bug 1064843 part 7 - Add backdrop pseudo-element and add related UA stylesheet. r=heycam (1d89afa54a)
- Bug 1064843 part 8 - Add frame class for backdrop frame. r=dbaron (9146be0073)
- Bug 1064843 part 9 - Change nsCSSFrameConstructor::CreatePlaceholderFrameFor to accept parent style context. r=dbaron (bc860e67f8)
- Bug 1064843 part 10 - Create and render backdrop frame for top layer frames. r=dbaron (1c6f165769)
- Bug 1064843 part 11 - Move checkWindowPureColor helper function from top-layer test to WindowSnapshot.js. r=roc (ef274dec50)
- Bug 1064843 part 12 - Add test for ::backdrop of fullscreen. r=dholbert (b978209868)
- Bug 1227927 Part 2 - Remove nsIFrame::GetFirstPrincipalChild(). r=mats (3f4ba2ef58)
- Bug 1227927 Part 3 - Use ranged-based for-loop to rewrite some simple loops in part 2. r=mats (6b22236653)
- Bug 1227927 Part 4 - Add comment to nsFrameList::GetLength() to warn it's O(n). r=mats (a08aa9185e)
- Bug 1101817 - Part 1: Remove usages of WeakMap.prototype.clear from Gecko. r=yzen,mak,yoric,gijs,jlongster (a992931bfe)
- Bug 1101817 - Part 3: Remove WeakMap.prototype.clear usages from Addons SDK. r=mossop (e81a8c3477)
- Bug 1101817 - Part 4: Remove WeakMap.prototype.clear from web-platform test. r=Ms2ger (1be3f645a2)
- Bug 1101817 - Part 6: Remove Weak{Map,Set}.prototype.clear. r=evilpie (7a0dbffdc9)
- Bug 1235152 - [css-break] Don't apply border/padding twice on inlines with box-decoration-break:clone and direction:rtl. r=roc (e6446262c1)
This commit is contained in:
+112
-17
@@ -49,6 +49,8 @@
|
||||
#include "mozilla/dom/Element.h"
|
||||
#include "mozilla/dom/ShadowRoot.h"
|
||||
#include "mozilla/dom/EncodingUtils.h"
|
||||
#include "nsContainerFrame.h"
|
||||
#include "nsBlockFrame.h"
|
||||
#include "nsComputedDOMStyle.h"
|
||||
|
||||
using namespace mozilla;
|
||||
@@ -324,7 +326,43 @@ nsDocumentEncoder::IncludeInContext(nsINode *aNode)
|
||||
|
||||
static
|
||||
bool
|
||||
IsInvisibleBreak(nsINode *aNode) {
|
||||
LineHasNonEmptyContentWorker(nsIFrame* aFrame)
|
||||
{
|
||||
// Look for non-empty frames, but ignore inline and br frames.
|
||||
// For inline frames, descend into the children, if any.
|
||||
if (aFrame->GetType() == nsGkAtoms::inlineFrame) {
|
||||
for (nsIFrame* child : aFrame->PrincipalChildList()) {
|
||||
if (LineHasNonEmptyContentWorker(child)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (aFrame->GetType() != nsGkAtoms::brFrame &&
|
||||
!aFrame->IsEmpty()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static
|
||||
bool
|
||||
LineHasNonEmptyContent(nsLineBox* aLine)
|
||||
{
|
||||
int32_t count = aLine->GetChildCount();
|
||||
for (nsIFrame* frame = aLine->mFirstChild; count > 0;
|
||||
--count, frame = frame->GetNextSibling()) {
|
||||
if (LineHasNonEmptyContentWorker(frame)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static
|
||||
bool
|
||||
IsInvisibleBreak(nsINode *aNode)
|
||||
{
|
||||
if (!aNode->IsElement() || !aNode->IsEditable()) {
|
||||
return false;
|
||||
}
|
||||
@@ -333,14 +371,36 @@ IsInvisibleBreak(nsINode *aNode) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the BRFrame has caused a visible line break, it should have a next
|
||||
// sibling, or otherwise no siblings (or immediately after a br) and a
|
||||
// non-zero height.
|
||||
bool visible = frame->GetNextSibling() ||
|
||||
((!frame->GetPrevSibling() ||
|
||||
frame->GetPrevSibling()->GetType() == nsGkAtoms::brFrame) &&
|
||||
frame->GetRect().Height() != 0);
|
||||
return !visible;
|
||||
nsContainerFrame* f = frame->GetParent();
|
||||
while (f && f->IsFrameOfType(nsBox::eLineParticipant)) {
|
||||
f = f->GetParent();
|
||||
}
|
||||
nsBlockFrame* blockAncestor = do_QueryFrame(f);
|
||||
if (!blockAncestor) {
|
||||
// The container frame doesn't support line breaking.
|
||||
return false;
|
||||
}
|
||||
|
||||
bool valid = false;
|
||||
nsBlockInFlowLineIterator iter(blockAncestor, frame, &valid);
|
||||
if (!valid) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool lineNonEmpty = LineHasNonEmptyContent(iter.GetLine());
|
||||
|
||||
while (iter.Next()) {
|
||||
auto currentLine = iter.GetLine();
|
||||
// Completely skip empty lines.
|
||||
if (!currentLine->IsEmpty()) {
|
||||
// If we come across an inline line, the BR has caused a visible line break.
|
||||
if (currentLine->IsInline()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return lineNonEmpty;
|
||||
}
|
||||
|
||||
nsresult
|
||||
@@ -1047,6 +1107,9 @@ nsDocumentEncoder::EncodeToStringWithMaxLength(uint32_t aMaxLength,
|
||||
static const size_t bufferSize = 2048;
|
||||
if (!mCachedBuffer) {
|
||||
mCachedBuffer = nsStringBuffer::Alloc(bufferSize).take();
|
||||
if (NS_WARN_IF(!mCachedBuffer)) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
}
|
||||
NS_ASSERTION(!mCachedBuffer->IsReadonly(),
|
||||
"DocumentEncoder shouldn't keep reference to non-readonly buffer!");
|
||||
@@ -1374,10 +1437,6 @@ nsHTMLCopyEncoder::SetSelection(nsISelection* aSelection)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
range->GetCommonAncestorContainer(getter_AddRefs(commonParent));
|
||||
|
||||
// Thunderbird's msg compose code abuses the HTML copy encoder and gets
|
||||
// confused if mIsTextWidget ends up becoming true, so for now we skip
|
||||
// this logic in Thunderbird.
|
||||
#ifndef MOZ_THUNDERBIRD
|
||||
for (nsCOMPtr<nsIContent> selContent(do_QueryInterface(commonParent));
|
||||
selContent;
|
||||
selContent = selContent->GetParent())
|
||||
@@ -1388,6 +1447,46 @@ nsHTMLCopyEncoder::SetSelection(nsISelection* aSelection)
|
||||
mIsTextWidget = true;
|
||||
break;
|
||||
}
|
||||
#ifdef MOZ_THUNDERBIRD
|
||||
else if (selContent->IsHTMLElement(nsGkAtoms::body)) {
|
||||
// Currently, setting mIsTextWidget to 'true' will result in the selection
|
||||
// being encoded/copied as pre-formatted plain text.
|
||||
// This is fine for copying pre-formatted plain text with Firefox, it is
|
||||
// already not correct for copying pre-formatted "rich" text (bold, colour)
|
||||
// with Firefox. As long as the serialisers aren't fixed, copying
|
||||
// pre-formatted text in Firefox is broken. If we set mIsTextWidget,
|
||||
// pre-formatted plain text is copied, but pre-formatted "rich" text loses
|
||||
// the "rich" formatting. If we don't set mIsTextWidget, "rich" text
|
||||
// attributes aren't lost, but white-space is lost.
|
||||
// So far the story for Firefox.
|
||||
//
|
||||
// Thunderbird has two *conflicting* requirements.
|
||||
// Case 1:
|
||||
// When selecting and copying text, even pre-formatted text, as a quote
|
||||
// to be placed into a reply, we *always* expect HTML to be copied.
|
||||
// Case 2:
|
||||
// When copying text in a so-called "plain text" message, that is
|
||||
// one where the body carries style "white-space:pre-wrap", the text should
|
||||
// be copied as pre-formatted plain text.
|
||||
//
|
||||
// Therefore the following code checks for "pre-wrap" on the body.
|
||||
// This is a terrible hack.
|
||||
//
|
||||
// The proper fix would be this:
|
||||
// For case 1:
|
||||
// Communicate the fact that HTML is required to EncodeToString(),
|
||||
// bug 1141786.
|
||||
// For case 2:
|
||||
// Wait for Firefox to get fixed to detect pre-formatting correctly,
|
||||
// bug 1174452.
|
||||
nsAutoString styleVal;
|
||||
if (selContent->GetAttr(kNameSpaceID_None, nsGkAtoms::style, styleVal) &&
|
||||
styleVal.Find(NS_LITERAL_STRING("pre-wrap")) != kNotFound) {
|
||||
mIsTextWidget = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// normalize selection if we are not in a widget
|
||||
@@ -1397,11 +1496,7 @@ nsHTMLCopyEncoder::SetSelection(nsISelection* aSelection)
|
||||
mMimeType.AssignLiteral("text/plain");
|
||||
return NS_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
// XXX For better performance, we should try to get rid of the
|
||||
// Selection object here. See BMO bug 1245883
|
||||
|
||||
// also consider ourselves in a text widget if we can't find an html document
|
||||
nsCOMPtr<nsIHTMLDocument> htmlDoc = do_QueryInterface(mDocument);
|
||||
if (!(htmlDoc && mDocument->IsHTMLDocument())) {
|
||||
|
||||
Reference in New Issue
Block a user