Bug 1307252 - Hide the carets when the selection is made by select all. r?kats, r?kanru draft
authorTing-Yu Lin <tlin@mozilla.com>
Wed, 05 Oct 2016 15:46:36 +0800
changeset 421431 fb28d7f9f8ae28be1d0c89613c10bd7193ec1b05
parent 420990 ea104eeb14cc54da9a06c3766da63f73117723a0
child 533075 ebb3ad46b424dbacdf6dd4b5cb8321e3cf78c375
push id31496
push userbmo:tlin@mozilla.com
push dateThu, 06 Oct 2016 03:37:10 +0000
reviewerskats, kanru
bugs1307252
milestone52.0a1
Bug 1307252 - Hide the carets when the selection is made by select all. r?kats, r?kanru The mochitest for clipboard still needs the mozbrowsercaretstatechanged events, so we disable "layout.accessiblecaret.hide_carets_for_mouse_input". MozReview-Commit-ID: CD03lmjwUa9
dom/browser-element/mochitest/browserElementTestHelpers.js
dom/browser-element/mochitest/browserElement_CopyPaste.js
layout/base/AccessibleCaretManager.cpp
--- a/dom/browser-element/mochitest/browserElementTestHelpers.js
+++ b/dom/browser-element/mochitest/browserElementTestHelpers.js
@@ -60,18 +60,21 @@ const browserElementTestHelpers = {
   setClipboardPlainTextOnlyPref: function(value) {
     this._setPref('clipboard.plainTextOnly', value);
   },
 
   setEnabledPref: function(value) {
     this._setPref('dom.mozBrowserFramesEnabled', value);
   },
 
-  setAccessibleCaretEnabledPref: function(value) {
-    this._setPref('layout.accessiblecaret.enabled', value);
+  setupAccessibleCaretPref: function() {
+    this._setPref('layout.accessiblecaret.enabled', true);
+    // Disable hide carets for mouse input for select-all tests so that we can
+    // get mozbrowsercaretstatechanged events.
+    this._setPref('layout.accessiblecaret.hide_carets_for_mouse_input', false);
   },
 
   getOOPByDefaultPref: function() {
     return this._getBoolPref("dom.ipc.browser_frames.oop_by_default");
   },
 
   addPermission: function() {
     this.lockTestReady();
--- a/dom/browser-element/mochitest/browserElement_CopyPaste.js
+++ b/dom/browser-element/mochitest/browserElement_CopyPaste.js
@@ -2,17 +2,17 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Test that "cut, copy, paste, selectall" and caretstatechanged event works from inside an <iframe mozbrowser>.
 "use strict";
 
 SimpleTest.waitForExplicitFinish();
 SimpleTest.requestFlakyTimeout("untriaged");
 browserElementTestHelpers.setEnabledPref(true);
-browserElementTestHelpers.setAccessibleCaretEnabledPref(true);
+browserElementTestHelpers.setupAccessibleCaretPref();
 browserElementTestHelpers.addPermission();
 const { Services } = SpecialPowers.Cu.import('resource://gre/modules/Services.jsm');
 
 var gTextarea = null;
 var mm;
 var iframeOuter;
 var iframeInner;
 var state = 0;
--- a/layout/base/AccessibleCaretManager.cpp
+++ b/layout/base/AccessibleCaretManager.cpp
@@ -191,16 +191,24 @@ AccessibleCaretManager::OnSelectionChang
 
   // For mouse input we don't want to show the carets.
   if (sHideCaretsForMouseInput &&
       mLastInputSource == nsIDOMMouseEvent::MOZ_SOURCE_MOUSE) {
     HideCarets();
     return NS_OK;
   }
 
+  // No need to show the carets for select all action when we want to hide
+  // the carets for mouse input.
+  if (sHideCaretsForMouseInput &&
+      (aReason & nsISelectionListener::SELECTALL_REASON)) {
+    HideCarets();
+    return NS_OK;
+  }
+
   UpdateCarets();
   return NS_OK;
 }
 
 void
 AccessibleCaretManager::HideCarets()
 {
   if (mFirstCaret->IsLogicallyVisible() || mSecondCaret->IsLogicallyVisible()) {