зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1344642 - Part 2: Add a new pref for input type=week, month and datetime-local. r=smaug
--HG-- extra : rebase_source : 9cacecf2b14cdd8caabd56993b22d0bbb27eae6b
This commit is contained in:
Родитель
3c909e1184
Коммит
093aa14344
|
@ -544,7 +544,8 @@ GetDOMFileOrDirectoryPath(const OwningFileOrDirectory& aData,
|
|||
bool
|
||||
HTMLInputElement::ValueAsDateEnabled(JSContext* cx, JSObject* obj)
|
||||
{
|
||||
return IsExperimentalFormsEnabled() || IsInputDateTimeEnabled();
|
||||
return IsExperimentalFormsEnabled() || IsInputDateTimeEnabled() ||
|
||||
IsInputDateTimeOthersEnabled();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -5710,7 +5711,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()
|
|||
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()
|
||||
{
|
||||
|
@ -5835,12 +5850,9 @@ HTMLInputElement::ParseAttribute(int32_t aNamespaceID,
|
|||
if (aAttribute == nsGkAtoms::type) {
|
||||
aResult.ParseEnumValue(aValue, kInputTypeTable, false, kInputDefaultType);
|
||||
int32_t 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))) {
|
||||
// There's no public way to set an nsAttrValue to an enum value, but we
|
||||
// can just re-parse with a table that doesn't have any types other than
|
||||
// "text" in it.
|
||||
|
|
|
@ -1701,12 +1701,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.
|
||||
|
|
|
@ -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>'
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1192,10 +1192,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);
|
||||
|
||||
|
|
|
@ -13,6 +13,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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче