Bug 1429384 - Stop toggling selectedness state of <option disabled>. r?automatedtester draft
authorAndreas Tolfsen <ato@sny.no>
Wed, 10 Jan 2018 13:30:17 +0000
changeset 718550 e45dead93e3bda2153364f50bb5e9041ae241e07
parent 718505 d5f42a23909eb181274731b07e4984bfbd18557d
child 745516 9c97b2239e96d6594449e55a6eb7f3af1865d920
push id94961
push userbmo:ato@sny.no
push dateWed, 10 Jan 2018 13:39:06 +0000
reviewersautomatedtester
bugs1429384
milestone59.0a1
Bug 1429384 - Stop toggling selectedness state of <option disabled>. r?automatedtester When WebDriver:ElementClick clicks an <option disabled> element, its selectedness state should according to a new specification change proposed not change: https://github.com/w3c/webdriver/pull/1189 This patch provides tests for the specification change. MozReview-Commit-ID: EXG98LjgB7d
testing/marionette/interaction.js
testing/web-platform/meta/MANIFEST.json
testing/web-platform/tests/webdriver/tests/element_click/select.py
--- a/testing/marionette/interaction.js
+++ b/testing/marionette/interaction.js
@@ -266,28 +266,30 @@ interaction.selectOption = function(el) 
   }
 
   let containerEl = element.getContainer(el);
 
   event.mouseover(containerEl);
   event.mousemove(containerEl);
   event.mousedown(containerEl);
   event.focus(containerEl);
-  event.input(containerEl);
 
-  // Clicking <option> in <select> should not be deselected if selected.
-  // However, clicking one in a <select multiple> should toggle
-  // selectedness the way holding down Control works.
-  if (containerEl.multiple) {
-    el.selected = !el.selected;
-  } else if (!el.selected) {
-    el.selected = true;
+  if (!el.disabled) {
+    // Clicking <option> in <select> should not be deselected if selected.
+    // However, clicking one in a <select multiple> should toggle
+    // selectedness the way holding down Control works.
+    if (containerEl.multiple) {
+      el.selected = !el.selected;
+    } else if (!el.selected) {
+      el.selected = true;
+    }
+    event.input(containerEl);
+    event.change(containerEl);
   }
 
-  event.change(containerEl);
   event.mouseup(containerEl);
   event.click(containerEl);
 };
 
 /**
  * Waits until the event loop has spun enough times to process the
  * DOM events generated by clicking an element, or until the document
  * is unloaded.
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -378568,17 +378568,17 @@
    "f8af4287f3b0f6925a2a6c5c75b3788e24de1680",
    "support"
   ],
   "./config.default.json": [
    "403d365196f6fe2c631d27fe6042e3114d204016",
    "support"
   ],
   "./lint.whitelist": [
-   "c1882978da83989f00a26ad55432711df4e92b5d",
+   "466e640065159fe12574aec8682dc74cf67fe49a",
    "support"
   ],
   "./serve.py": [
    "0efa39b1f26f86d73f2fce4f9e46003d62057b41",
    "support"
   ],
   "./server-side.md": [
    "c51b17fbac2a2e3121dc74f7badbd2873ce92f61",
@@ -529180,17 +529180,17 @@
    "9a4881ad5825e2c4e967226f537e4e5ae281c2fb",
    "reftest"
   ],
   "custom-elements/CustomElementRegistry.html": [
    "d1661ab1734f7d1a252030aeac7e9842a7a4cb3b",
    "testharness"
   ],
   "custom-elements/Document-createElement.html": [
-   "fb10e851deb193aed700c8ab6790c216766cc362",
+   "14960ee9498f6ff23c1c94d3351a8ef383e60067",
    "testharness"
   ],
   "custom-elements/HTMLElement-constructor.html": [
    "64522527ef425b90c704b20b000c8feef0d1ca25",
    "testharness"
   ],
   "custom-elements/OWNERS": [
    "9f6553b67cad3b479d3beb678653db4e712ed227",
@@ -529240,17 +529240,17 @@
    "b338f193a803ea679bbf0e041f71daf1e6d703f6",
    "testharness"
   ],
   "custom-elements/parser/parser-constructs-custom-element-synchronously.html": [
    "dc0ca4a066d9a05362a81b263594965763919e46",
    "testharness"
   ],
   "custom-elements/parser/parser-constructs-custom-elements-with-is.html": [
-   "7a7df7aab092906b5a753c0d122b971aff01517a",
+   "17145d44113ea88688060c6cfd10d162cd97e28b",
    "testharness"
   ],
   "custom-elements/parser/parser-constructs-custom-elements.html": [
    "228d4a90d57dc942692becc6f126ec9130b3a4e0",
    "testharness"
   ],
   "custom-elements/parser/parser-fallsback-to-unknown-element.html": [
    "2fbbd742bfdc3ab63c5d5f01160830451fe620d2",
@@ -536692,17 +536692,17 @@
    "99a355c63562aded2e2b252d989de332e8c12a0d",
    "testharness"
   ],
   "html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-percent-encoded.html": [
    "ac172eb5c05ee24b8e3059cbc68851729f1be943",
    "testharness"
   ],
   "html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html": [
-   "8de758988400b4b1acad6bb4c94069b4d0167c20",
+   "9bc91bc9bb368e8bf42810ed8aed936a6c9d581a",
    "testharness"
   ],
   "html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-id-top.html": [
    "4a4da96ba43bd45b6723b852277c9169b56ec2e1",
    "testharness"
   ],
   "html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-top.html": [
    "2dabab8b5505e7934c0977f1cf0975d4600981d5",
@@ -554756,17 +554756,17 @@
    "eb5608b416f1f461e2acd0dbc848cd93807250d9",
    "support"
   ],
   "http/refresh/subresource.any.js": [
    "dd861a7c3fd42255edb603f50c7466dd9132917c",
    "testharness"
   ],
   "http/resources/securedimage.py": [
-   "b03f45c4dad3a9cd0f0fb67a99a79be3ba64b199",
+   "d5aa250e8cba8384f47fca2c559aa6a310dff457",
    "support"
   ],
   "imagebitmap-renderingcontext/bitmaprenderer-as-imagesource.html": [
    "f80d1496329c64643d2b40e478779929de20c499",
    "testharness"
   ],
   "imagebitmap-renderingcontext/context-creation-with-alpha.html": [
    "a7fc0b2af3b6d824ea86ebe96de07c947938e4c0",
@@ -574480,17 +574480,17 @@
    "4aaa0b1995643f4e18c47d1947476a1a67fe997d",
    "testharness"
   ],
   "service-workers/service-worker/fetch-request-xhr.https.html": [
    "b30618dfe4c10370865229cbe9606cce8ed42040",
    "testharness"
   ],
   "service-workers/service-worker/fetch-response-taint.https.html": [
-   "217383b4dddcc6f984c4cc7cd5f99e1f9b86cdd1",
+   "154a52255d0aae9a99879389afba6214b803b08d",
    "testharness"
   ],
   "service-workers/service-worker/fetch-response-xhr.https.html": [
    "6b68ad7251c3daef1cd2bde8660f01c3e47b711f",
    "testharness"
   ],
   "service-workers/service-worker/fetch-waits-for-activate.https.html": [
    "04eeedc3f074aff32281a438acda62b7a6d86e2d",
@@ -575824,17 +575824,17 @@
    "40ec7850c61a3ee7578f055d3eef87293cfad482",
    "testharness"
   ],
   "service-workers/service-worker/windowclient-navigate.https.html": [
    "828d8d920459541a37e747ac01376fdcac51ffb3",
    "testharness"
   ],
   "service-workers/service-worker/worker-interception.https.html": [
-   "2c5e8cb2b7be6d394aaa1400158d3f14895909f3",
+   "41f7e5e8da2c305370fddad83518cd0fa57547eb",
    "testharness"
   ],
   "service-workers/specgen.json": [
    "0d98c8249e25cd4c7a4d88f722cfe8f235fb7a66",
    "support"
   ],
   "service-workers/stub-3.1-service-worker-obj.html": [
    "26e7afb8569cc3c997c6338dc86bfbe7232a8c0e",
@@ -583160,17 +583160,17 @@
    "d589b53f0096893600e696b43ec19ca84e5ee2ab",
    "wdspec"
   ],
   "webdriver/tests/actions/key_shortcuts.py": [
    "dbe27dd0b1625169fc8cc2055f8fb49d5a4a78d2",
    "wdspec"
   ],
   "webdriver/tests/actions/modifier_click.py": [
-   "a41f28b359c950af698be51ef35e4d78dca53e2c",
+   "88a384182fdd9df1515b9d8cfda8f56aed138ec7",
    "wdspec"
   ],
   "webdriver/tests/actions/mouse.py": [
    "0af689cee458ed260b2b9cc6f3231c314a3a6638",
    "wdspec"
   ],
   "webdriver/tests/actions/mouse_dblclick.py": [
    "61bab159bf1ccc7d44e4034a3e67d60b13fc1607",
@@ -583240,17 +583240,17 @@
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/element_click/bubbling.py": [
    "5437f5ca12b93e9a0087e9b341d63af6bace4ffd",
    "wdspec"
   ],
   "webdriver/tests/element_click/select.py": [
-   "5ba51b660c7203bba3ada597c2f56fe094358e1f",
+   "bbce720456bd6bae72ad256b56b7743be85959f3",
    "wdspec"
   ],
   "webdriver/tests/element_click/stale.py": [
    "37af63203540dfe11d36fe05d74694f05c6505f2",
    "wdspec"
   ],
   "webdriver/tests/element_retrieval/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
--- a/testing/web-platform/tests/webdriver/tests/element_click/select.py
+++ b/testing/web-platform/tests/webdriver/tests/element_click/select.py
@@ -206,8 +206,20 @@ def test_out_of_view_multiple(session):
         <option>19
         <option>20
       </select>""")
     options = session.find.css("option")
 
     last_option = options[-1]
     last_option.click()
     assert last_option.selected
+
+
+def test_option_disabled(session):
+    session.url = inline("""
+        <select>
+          <option disabled>foo
+        </select>""")
+    option = session.find.css("option", all=False)
+    assert not option.selected
+
+    option.click()
+    assert not option.selected