Bug 1344642 - Part 2: Add a new pref for input type=week, month and datetime-local

This commit is contained in:
janekptacijarabaci
2018-04-15 14:52:09 +02:00
parent 054dde2728
commit c55addfa64
6 changed files with 73 additions and 24 deletions
+19 -7
View File
@@ -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
@@ -5785,6 +5786,20 @@ HTMLInputElement::IsInputDateTimeEnabled()
return sDateTimeEnabled;
}
/* 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()
{
@@ -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);
}
+9 -2
View File
@@ -1680,12 +1680,19 @@ 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.
+30 -6
View File
@@ -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]],
prefs: [["dom.forms.datetime", true], ["dom.forms.datetime.others", false]],
inputType: "month",
expectedType: "text"
}, {
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]],
prefs: [["dom.forms.datetime", true], ["dom.forms.datetime.others", false]],
inputType: "week",
expectedType: "text"
}, {
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]],
prefs: [["dom.forms.datetime", true], ["dom.forms.datetime.others", false]],
inputType: "datetime-local",
expectedType: "text"
}, {
prefs: [["dom.forms.datetime", false], ["dom.forms.datetime.others", true]],
inputType: "datetime-local",
expectedType: "datetime-local"
}
@@ -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>'
});
}
+5 -2
View File
@@ -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);
+1
View File
@@ -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);