author | Masayuki Nakano <masayuki@d-toybox.com> |
Wed, 07 Apr 2010 11:10:54 +0900 | |
changeset 40526 | 8e6ef255d9d6a9cf369af9a8aa60a2378441cb30 |
parent 40525 | 2c04659a51ce9e8fb93cf52dd7eca1fa373d2530 |
child 40527 | 9996ac775114cd3dcef81c9095772f5cf0132c16 |
push id | 12648 |
push user | masayuki@d-toybox.com |
push date | Wed, 07 Apr 2010 02:11:23 +0000 |
treeherder | mozilla-central@8e6ef255d9d6 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | dbaron |
bugs | 183646 |
milestone | 1.9.3a4pre |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
|
--- a/layout/generic/nsTextFrameThebes.cpp +++ b/layout/generic/nsTextFrameThebes.cpp @@ -3123,22 +3123,27 @@ nsTextPaintStyle::InitCommonColors() selectionBGColor)), NS_LUMINOSITY_DIFFERENCE(defaultWindowBackgroundColor, selectionBGColor)); mInitCommonColors = PR_TRUE; } static nsIContent* -FindElementAncestor(nsINode* aNode) -{ - while (aNode && !aNode->IsNodeOfType(nsINode::eELEMENT)) { - aNode = aNode->GetParent(); - } - return static_cast<nsIContent*>(aNode); +FindElementAncestorForMozSelection(nsIContent* aContent) +{ + NS_ENSURE_TRUE(aContent, nsnull); + while (aContent && aContent->IsInNativeAnonymousSubtree()) { + aContent = aContent->GetBindingParent(); + } + NS_ASSERTION(aContent, "aContent isn't in non-anonymous tree?"); + while (aContent && !aContent->IsNodeOfType(nsINode::eELEMENT)) { + aContent = aContent->GetParent(); + } + return aContent; } PRBool nsTextPaintStyle::InitSelectionColors() { if (mInitSelectionColors) return PR_TRUE; @@ -3150,17 +3155,18 @@ nsTextPaintStyle::InitSelectionColors() // We're not caching this fact, so every call to GetSelectionColors // will come through here. We could avoid this, but it's not really worth it. return PR_FALSE; } mInitSelectionColors = PR_TRUE; nsIFrame* nonGeneratedAncestor = nsLayoutUtils::GetNonGeneratedAncestor(mFrame); - nsIContent* selectionContent = FindElementAncestor(nonGeneratedAncestor->GetContent()); + nsIContent* selectionContent = + FindElementAncestorForMozSelection(nonGeneratedAncestor->GetContent()); if (selectionContent && selectionStatus == nsISelectionController::SELECTION_ON) { nsRefPtr<nsStyleContext> sc = nsnull; sc = mPresContext->StyleSet()-> ProbePseudoElementStyle(selectionContent, nsCSSPseudoElements::ePseudo_mozSelection, mFrame->GetStyleContext());
new file mode 100644 --- /dev/null +++ b/layout/reftests/selection/pseudo-element-of-native-anonymous-ref.html @@ -0,0 +1,13 @@ +<html> +<head> +<style type="text/css"> +input { + color: white; + background-color: green; +} +</style> +</head> +<body onload="document.getElementById('i').select();"> +<input value="text" id="i"> +</body> +</html> \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/layout/reftests/selection/pseudo-element-of-native-anonymous.html @@ -0,0 +1,17 @@ +<html> +<head> +<style type="text/css"> +input { + color: white; + background-color: green; +} +input::-moz-selection { + color: red; + background-color: blue; +} +</style> +</head> +<body onload="document.getElementById('i').select();"> +<input value="text" id="i"> +</body> +</html> \ No newline at end of file
--- a/layout/reftests/selection/reftest.list +++ b/layout/reftests/selection/reftest.list @@ -19,8 +19,9 @@ == extend-3d.html extend-3-ref.html == extend-3e.html extend-3-ref.html == extend-3f.html extend-3-ref.html == extend-3g.html extend-3-ref.html == extend-3h.html extend-3-ref.html == extend-3i.html extend-3-ref.html == extend-4a.html extend-4-ref.html == extend-4b.html extend-4-ref.html +!= pseudo-element-of-native-anonymous.html pseudo-element-of-native-anonymous-ref.html