diff options
author | janekptacijarabaci <janekptacijarabaci@seznam.cz> | 2018-04-15 14:52:09 +0200 |
---|---|---|
committer | janekptacijarabaci <janekptacijarabaci@seznam.cz> | 2018-04-15 14:52:09 +0200 |
commit | c55addfa6422cd6fd3886f914b71139c4dd0edcc (patch) | |
tree | 2c5406fb382e855d74d939ff90d4d5b0fb50d316 | |
parent | 054dde272820f12b4f3c60ee4c8b7ede47126aa6 (diff) | |
download | uxp-c55addfa6422cd6fd3886f914b71139c4dd0edcc.tar.gz |
Bug 1344642 - Part 2: Add a new pref for input type=week, month and datetime-local
-rw-r--r-- | dom/html/HTMLInputElement.cpp | 26 | ||||
-rw-r--r-- | dom/html/HTMLInputElement.h | 11 | ||||
-rw-r--r-- | dom/html/test/forms/test_input_types_pref.html | 36 | ||||
-rw-r--r-- | dom/html/test/forms/test_valueAsDate_pref.html | 16 | ||||
-rw-r--r-- | modules/libpref/init/all.js | 7 | ||||
-rw-r--r-- | testing/profiles/prefs_general.js | 1 |
6 files changed, 73 insertions, 24 deletions
diff --git a/dom/html/HTMLInputElement.cpp b/dom/html/HTMLInputElement.cpp index 3a3136a60b..52062c4b9b 100644 --- a/dom/html/HTMLInputElement.cpp +++ b/dom/html/HTMLInputElement.cpp @@ -540,7 +540,8 @@ GetDOMFileOrDirectoryPath(const OwningFileOrDirectory& aData, bool HTMLInputElement::ValueAsDateEnabled(JSContext* cx, JSObject* obj) { - return IsExperimentalFormsEnabled() || IsInputDateTimeEnabled(); + return IsExperimentalFormsEnabled() || IsInputDateTimeEnabled() || + IsInputDateTimeOthersEnabled(); } NS_IMETHODIMP @@ -5709,7 +5710,7 @@ HTMLInputElement::IsDateTimeTypeSupported(uint8_t aDateTimeInputType) ((aDateTimeInputType == NS_FORM_INPUT_MONTH || aDateTimeInputType == NS_FORM_INPUT_WEEK || aDateTimeInputType == NS_FORM_INPUT_DATETIME_LOCAL) && - IsInputDateTimeEnabled()); + IsInputDateTimeOthersEnabled()); } /* static */ bool @@ -5786,6 +5787,20 @@ HTMLInputElement::IsInputDateTimeEnabled() } /* static */ bool +HTMLInputElement::IsInputDateTimeOthersEnabled() +{ + static bool sDateTimeOthersEnabled = false; + static bool sDateTimeOthersPrefCached = false; + if (!sDateTimeOthersPrefCached) { + sDateTimeOthersPrefCached = true; + Preferences::AddBoolVarCache(&sDateTimeOthersEnabled, + "dom.forms.datetime.others", false); + } + + return sDateTimeOthersEnabled; +} + +/* static */ bool HTMLInputElement::IsInputNumberEnabled() { static bool sInputNumberEnabled = false; @@ -5827,12 +5842,9 @@ HTMLInputElement::ParseAttribute(int32_t aNamespaceID, bool success = aResult.ParseEnumValue(aValue, kInputTypeTable, false); if (success) { newType = aResult.GetEnumValue(); - if ((IsExperimentalMobileType(newType) && - !IsExperimentalFormsEnabled()) || - (newType == NS_FORM_INPUT_NUMBER && !IsInputNumberEnabled()) || + if ((newType == NS_FORM_INPUT_NUMBER && !IsInputNumberEnabled()) || (newType == NS_FORM_INPUT_COLOR && !IsInputColorEnabled()) || - (IsDateTimeInputType(newType) && - !IsDateTimeTypeSupported(newType))) { + (IsDateTimeInputType(newType) && !IsDateTimeTypeSupported(newType))) { newType = kInputDefaultType->value; aResult.SetTo(newType, &aValue); } diff --git a/dom/html/HTMLInputElement.h b/dom/html/HTMLInputElement.h index 305b765562..98a5904437 100644 --- a/dom/html/HTMLInputElement.h +++ b/dom/html/HTMLInputElement.h @@ -1680,13 +1680,20 @@ private: IsExperimentalFormsEnabled(); /** - * Checks preference "dom.forms.datetime" to determine if input date/time - * related types should be supported. + * Checks preference "dom.forms.datetime" to determine if input date and time + * should be supported. */ static bool IsInputDateTimeEnabled(); /** + * Checks preference "dom.forms.datetime.others" to determine if input week, + * month and datetime-local should be supported. + */ + static bool + IsInputDateTimeOthersEnabled(); + + /** * Checks preference "dom.forms.number" to determine if input type=number * should be supported. */ diff --git a/dom/html/test/forms/test_input_types_pref.html b/dom/html/test/forms/test_input_types_pref.html index 73c4d65ab3..5279d6a2ac 100644 --- a/dom/html/test/forms/test_input_types_pref.html +++ b/dom/html/test/forms/test_input_types_pref.html @@ -49,27 +49,51 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=764481 inputType: "date", expectedType: "date" }, { - prefs: [["dom.forms.datetime", false]], + prefs: [["dom.experimental_forms", false], ["dom.forms.datetime", false]], + inputType: "time", + expectedType: "text" + }, { + prefs: [["dom.experimental_forms", true], ["dom.forms.datetime", false]], + inputType: "time", + expectedType: "time" + }, { + prefs: [["dom.experimental_forms", false], ["dom.forms.datetime", true]], + inputType: "time", + expectedType: "time" + }, { + prefs: [["dom.forms.datetime", false], ["dom.forms.datetime.others", false]], + inputType: "month", + expectedType: "text" + }, { + prefs: [["dom.forms.datetime", true], ["dom.forms.datetime.others", false]], inputType: "month", expectedType: "text" }, { - prefs: [["dom.forms.datetime", true]], + prefs: [["dom.forms.datetime", false], ["dom.forms.datetime.others", true]], inputType: "month", expectedType: "month" }, { - prefs: [["dom.forms.datetime", false]], + prefs: [["dom.forms.datetime", false], ["dom.forms.datetime.others", false]], + inputType: "week", + expectedType: "text" + }, { + prefs: [["dom.forms.datetime", true], ["dom.forms.datetime.others", false]], inputType: "week", expectedType: "text" }, { - prefs: [["dom.forms.datetime", true]], + prefs: [["dom.forms.datetime", false], ["dom.forms.datetime.others", true]], inputType: "week", expectedType: "week" }, { - prefs: [["dom.forms.datetime", false]], + prefs: [["dom.forms.datetime", false], ["dom.forms.datetime.others", false]], + inputType: "datetime-local", + expectedType: "text" + }, { + prefs: [["dom.forms.datetime", true], ["dom.forms.datetime.others", false]], inputType: "datetime-local", expectedType: "text" }, { - prefs: [["dom.forms.datetime", true]], + prefs: [["dom.forms.datetime", false], ["dom.forms.datetime.others", true]], inputType: "datetime-local", expectedType: "datetime-local" } diff --git a/dom/html/test/forms/test_valueAsDate_pref.html b/dom/html/test/forms/test_valueAsDate_pref.html index 91e2e1bfc6..0369980e4d 100644 --- a/dom/html/test/forms/test_valueAsDate_pref.html +++ b/dom/html/test/forms/test_valueAsDate_pref.html @@ -12,11 +12,12 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=874640 /** Test for Bug 874640 **/ var states = [ - // dom.experimental_forms, dom.forms.datetime, expectedValueAsDate - [ 'true', 'true', 'true' ], - [ 'true', 'false', 'true' ], - [ 'false', 'true', 'true' ], - [ 'false', 'false', 'false' ], + // dom.experimental_forms, dom.forms.datetime, dom.forms.datetime.others, expectedValueAsDate + [ 'true', 'true', ,'true', 'true' ], + [ 'true', 'false', 'false', 'true' ], + [ 'false', 'true', 'false', 'true' ], + [ 'false', 'false', 'true', 'true' ], + [ 'false', 'false', 'false', 'false' ], 'end' ]; @@ -32,11 +33,12 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=874640 SpecialPowers.pushPrefEnv({"set":[ ["dom.experimental_forms", state[0] === 'true'], - ["dom.forms.datetime", state[1] === 'true']]}, + ["dom.forms.datetime", state[1] === 'true'], + ["dom.forms.datetime.others", state[2] === 'true']]}, function() { iframe.src = 'data:text/html,<script>' + 'parent.is("valueAsDate" in document.createElement("input"), ' + - state[2] + ', "valueAsDate presence state should be ' + state[2] + '");' + + state[3] + ', "valueAsDate presence state should be ' + state[3] + '");' + '<\/script>' }); } diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js index 59f8de9acf..e3e23550ac 100644 --- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -1179,10 +1179,13 @@ pref("dom.forms.number", true); // platforms which don't have a color picker implemented yet. pref("dom.forms.color", true); -// Support for input type=date, time, month, week and datetime-local. By -// default, disabled. +// Support for input type=date and type=time. By default, disabled. pref("dom.forms.datetime", false); +// Support for input type=month, type=week and type=datetime-local. By default, +// disabled. +pref("dom.forms.datetime.others", false); + // Enable time picker UI. By default, disabled. pref("dom.forms.datetime.timepicker", false); diff --git a/testing/profiles/prefs_general.js b/testing/profiles/prefs_general.js index 91218b5f39..ac2c1e077e 100644 --- a/testing/profiles/prefs_general.js +++ b/testing/profiles/prefs_general.js @@ -12,6 +12,7 @@ user_pref("dom.experimental_forms", true); // on for testing user_pref("dom.forms.number", true); // on for testing user_pref("dom.forms.color", true); // on for testing user_pref("dom.forms.datetime", true); // on for testing +user_pref("dom.forms.datetime.others", true); // on for testing user_pref("dom.max_script_run_time", 0); // no slow script dialogs user_pref("hangmonitor.timeout", 0); // no hang monitor user_pref("dom.max_chrome_script_run_time", 0); |