Bug 1140105 - Can't query for a specific font face when the selection is collapsed. r=ehsan
authorJorg K <mozilla@jorgk.com>
Fri, 24 Apr 2015 05:57:00 -0400
changeset 240976 ac070191059428966e28fe158dadcc60c161d6b4
parent 240975 a8963c3c2c56476b6a49a08b15cc564854782113
child 240977 466a8f140def9e0a4d46787a326baae9bc4610ce
push id58983
push userryanvm@gmail.com
push dateFri, 24 Apr 2015 18:49:25 +0000
treeherdermozilla-inbound@b04704294a81 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersehsan
bugs1140105
milestone40.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1140105 - Can't query for a specific font face when the selection is collapsed. r=ehsan
dom/imptests/failures/editing/conformancetest/test_runtest.html.json
editor/libeditor/nsHTMLEditorStyle.cpp
editor/libeditor/tests/chrome.ini
editor/libeditor/tests/test_bug1140105.html
--- a/dom/imptests/failures/editing/conformancetest/test_runtest.html.json
+++ b/dom/imptests/failures/editing/conformancetest/test_runtest.html.json
@@ -6414,16 +6414,17 @@
   "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foo<s>bar]</s>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foo<sub>bar]</sub>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foo<sub>bar]</sub>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foo<sup>bar]</sup>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foo<sup>bar]</sup>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foo<u>bar]</u>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foo<u>bar]</u>baz\" compare innerHTML":true,
   "[[\"inserttext\",\"a\"]] \"[foo<a href=http://www.google.com>bar]</a>baz\" compare innerHTML":true,
+  "[[\"inserttext\",\"a\"]] \"foo<font color=brown><a href=http://www.google.com>[bar]</a></font>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foo<font face=sans-serif>bar]</font>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foo<font face=sans-serif>bar]</font>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foo<font size=4>bar]</font>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foo<font size=4>bar]</font>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foo<font color=#0000FF>bar]</font>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foo<font color=#0000FF>bar]</font>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"true\"],[\"inserttext\",\"a\"]] \"[foo<span style=background-color:#00FFFF>bar]</span>baz\" compare innerHTML":true,
   "[[\"stylewithcss\",\"false\"],[\"inserttext\",\"a\"]] \"[foo<span style=background-color:#00FFFF>bar]</span>baz\" compare innerHTML":true,
--- a/editor/libeditor/nsHTMLEditorStyle.cpp
+++ b/editor/libeditor/nsHTMLEditorStyle.cpp
@@ -1073,16 +1073,19 @@ nsHTMLEditor::GetInlinePropertyBase(nsIA
       }
       if (isSet) {
         *aFirst = *aAny = *aAll = theSetting;
         return NS_OK;
       }
 
       if (mHTMLCSSUtils->IsCSSEditableProperty(collapsedNode, &aProperty,
                                                aAttribute)) {
+        if (aValue) {
+          tOutString.Assign(*aValue);
+        }
         *aFirst = *aAny = *aAll =
           mHTMLCSSUtils->IsCSSEquivalentToHTMLInlineStyleSet(collapsedNode,
               &aProperty, aAttribute, tOutString, nsHTMLCSSUtils::eComputed);
         if (outValue) {
           outValue->Assign(tOutString);
         }
         return NS_OK;
       }
--- a/editor/libeditor/tests/chrome.ini
+++ b/editor/libeditor/tests/chrome.ini
@@ -19,16 +19,17 @@ skip-if = buildapp == 'mulet'
 [test_bug636465.xul]
 [test_bug646194.xul]
 [test_bug780908.xul]
 [test_bug830600.html]
 [test_bug1053048.html]
 [test_bug1100966.html]
 [test_bug1102906.html]
 [test_bug1101392.html]
+[test_bug1140105.html]
 [test_bug1154791.html]
 [test_composition_event_created_in_chrome.html]
 [test_contenteditable_text_input_handling.html]
 [test_dragdrop.html]
 skip-if = buildapp == 'mulet'
 [test_htmleditor_keyevent_handling.html]
 [test_selection_move_commands.xul]
 [test_texteditor_keyevent_handling.html]
new file mode 100644
--- /dev/null
+++ b/editor/libeditor/tests/test_bug1140105.html
@@ -0,0 +1,70 @@
+<!DOCTYPE>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1140105
+-->
+<head>
+  <title>Test for Bug 1140105</title>
+  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
+  <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
+</head>
+<body>
+<div id="display">
+</div>
+
+<div id="content" contenteditable><font face="Arial">1234567890</font></div>
+
+<pre id="test">
+</pre>
+
+<script class="testbody" type="application/javascript">
+
+/** Test for Bug 1140105 **/
+SimpleTest.waitForExplicitFinish();
+SimpleTest.waitForFocus(function() {
+  var div = document.getElementById("content");
+  div.focus();
+  synthesizeMouseAtCenter(div, {});
+  synthesizeKey("VK_LEFT", {});
+
+  var sel = window.getSelection();
+  var selRange = sel.getRangeAt(0);
+  is(selRange.endContainer.nodeName, "#text", "selection should be in text node");
+  is(selRange.endOffset, 9, "offset should be 9");
+
+  var firstHas = {};
+  var anyHas = {};
+  var allHas = {};
+  var editor = getEditor();
+
+  var atomService = Components.classes["@mozilla.org/atom-service;1"].getService(Components.interfaces.nsIAtomService);
+  var propAtom = atomService.getAtom("font");
+  editor.getInlineProperty(propAtom, "face", "Arial", firstHas, anyHas, allHas);
+  is(firstHas.value, true, "Test for Arial: firstHas: true expected");
+  is(anyHas.value, true, "Test for Arial: anyHas: true expected");
+  is(allHas.value, true, "Test for Arial: allHas: true expected");
+  editor.getInlineProperty(propAtom, "face", "Courier", firstHas, anyHas, allHas);
+  is(firstHas.value, false, "Test for Courier: firstHas: false expected");
+  is(anyHas.value, false, "Test for Courier: anyHas: false expected");
+  is(allHas.value, false, "Test for Courier: allHas: false expected");
+
+  SimpleTest.finish();
+
+});
+
+function getEditor() {
+  var Ci = Components.interfaces;
+  var editingSession = window.QueryInterface(Ci.nsIInterfaceRequestor)
+                             .getInterface(Ci.nsIWebNavigation)
+                             .QueryInterface(Ci.nsIInterfaceRequestor)
+                             .getInterface(Ci.nsIEditingSession);
+  var editor = editingSession.getEditorForWindow(window);
+  editor.QueryInterface(Ci.nsIHTMLEditor);
+  return editor;
+}
+
+</script>
+</body>
+
+</html>