diff options
author | ajith.v <ajith.v@samsung.com> | 2014-10-21 22:32:29 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-22 05:32:50 +0000 |
commit | e77498c3ec23d38f9075557f3af93d6f18afa3b1 (patch) | |
tree | 949e1637a8272ea27f1d129b6d81ab3b5119e6d1 | |
parent | 50df3edc46d054d4b7a6cec4098cd1538d66d511 (diff) | |
download | chromium_src-e77498c3ec23d38f9075557f3af93d6f18afa3b1.zip chromium_src-e77498c3ec23d38f9075557f3af93d6f18afa3b1.tar.gz chromium_src-e77498c3ec23d38f9075557f3af93d6f18afa3b1.tar.bz2 |
Fixed the insertion handle showing issue on readonly element.
Insertion handle is showing when we long press on readonly input
elements, which is not correct. This change takes care of correcting
it by counter measuring inside isEditableNode() API.
BUG=
Review URL: https://codereview.chromium.org/660343003
Cr-Commit-Position: refs/heads/master@{#300636}
3 files changed, 39 insertions, 2 deletions
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java index 1fde399..b424046 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java @@ -1884,6 +1884,14 @@ public class ContentViewCore return mHasSelection; } + /** + * @return Whether the page has an active, touch-controlled insertion handle. + */ + @VisibleForTesting + protected boolean hasInsertion() { + return mHasInsertion; + } + private void hidePastePopup() { if (mPastePopupMenu == null) return; mPastePopupMenu.hide(); diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java index 50d0b4c..a21dca6 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java @@ -32,6 +32,8 @@ public class ContentViewCoreSelectionTest extends ContentShellTestBase { "<br/><input id=\"input_text\" type=\"text\" value=\"Sample Text\" />" + "<br/><textarea id=\"empty_textarea\" rows=\"2\" cols=\"20\"></textarea>" + "<br/><textarea id=\"textarea\" rows=\"2\" cols=\"20\">Sample Text</textarea>" + + "<br/><input id=\"readonly_text\" type=\"text\" readonly value=\"Sample Text\"/>" + + "<br/><input id=\"disabled_text\" type=\"text\" disabled value=\"Sample Text\" />" + "</form></body></html>"); private ContentViewCore mContentViewCore; @@ -173,6 +175,30 @@ public class ContentViewCoreSelectionTest extends ContentShellTestBase { assertWaitForPastePopupStatus(false); } + @SmallTest + @Feature({"TextInput"}) + public void testPastePopupNotShownOnLongPressingReadOnlyInput() throws Throwable { + copyStringToClipboard(); + DOMUtils.longPressNode(this, mContentViewCore, "empty_input_text"); + assertWaitForPastePopupStatus(true); + assertTrue(mContentViewCore.hasInsertion()); + DOMUtils.longPressNode(this, mContentViewCore, "readonly_text"); + assertWaitForPastePopupStatus(false); + assertFalse(mContentViewCore.hasInsertion()); + } + + @SmallTest + @Feature({"TextInput"}) + public void testPastePopupNotShownOnLongPressingDisabledInput() throws Throwable { + copyStringToClipboard(); + DOMUtils.longPressNode(this, mContentViewCore, "empty_input_text"); + assertWaitForPastePopupStatus(true); + assertTrue(mContentViewCore.hasInsertion()); + DOMUtils.longPressNode(this, mContentViewCore, "disabled_text"); + assertWaitForPastePopupStatus(false); + assertFalse(mContentViewCore.hasInsertion()); + } + private void assertWaitForSelectActionBarVisible( final boolean visible) throws InterruptedException { assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 2e8f9bc..16ff33b 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -2526,8 +2526,11 @@ bool RenderViewImpl::IsEditableNode(const WebNode& node) const { if (node.isElementNode()) { const WebElement& element = node.toConst<WebElement>(); - if (element.isTextFormControlElement()) - return true; + if (element.isTextFormControlElement()) { + if (!(element.hasAttribute("readonly") || + element.hasAttribute("disabled"))) + return true; + } // Also return true if it has an ARIA role of 'textbox'. for (unsigned i = 0; i < element.attributeCount(); ++i) { |