summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorajith.v <ajith.v@samsung.com>2014-10-21 22:32:29 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-22 05:32:50 +0000
commite77498c3ec23d38f9075557f3af93d6f18afa3b1 (patch)
tree949e1637a8272ea27f1d129b6d81ab3b5119e6d1
parent50df3edc46d054d4b7a6cec4098cd1538d66d511 (diff)
downloadchromium_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}
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java8
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java26
-rw-r--r--content/renderer/render_view_impl.cc7
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) {