Bug 1344642 - Part 1: Cleanup dom.forms.datepicker related code

This commit is contained in:
janekptacijarabaci 2018-04-15 14:39:19 +02:00 committed by Roy Tam
commit 36d469a74f
20 changed files with 16 additions and 543 deletions

View file

@ -114,15 +114,12 @@
#include <limits>
#include "nsIColorPicker.h"
#include "nsIDatePicker.h"
#include "nsIStringEnumerator.h"
#include "HTMLSplitOnSpacesTokenizer.h"
#include "nsIController.h"
#include "nsIMIMEInfo.h"
#include "nsFrameSelection.h"
#include "nsIConsoleService.h"
// input type=date
#include "js/Date.h"
@ -543,8 +540,7 @@ GetDOMFileOrDirectoryPath(const OwningFileOrDirectory& aData,
bool
HTMLInputElement::ValueAsDateEnabled(JSContext* cx, JSObject* obj)
{
return IsExperimentalFormsEnabled() || IsDatePickerEnabled() ||
IsInputDateTimeEnabled();
return IsExperimentalFormsEnabled() || IsInputDateTimeEnabled();
}
NS_IMETHODIMP
@ -746,59 +742,6 @@ nsColorPickerShownCallback::Done(const nsAString& aColor)
NS_IMPL_ISUPPORTS(nsColorPickerShownCallback, nsIColorPickerShownCallback)
class DatePickerShownCallback final : public nsIDatePickerShownCallback
{
~DatePickerShownCallback() {}
public:
DatePickerShownCallback(HTMLInputElement* aInput,
nsIDatePicker* aDatePicker)
: mInput(aInput)
, mDatePicker(aDatePicker)
{}
NS_DECL_ISUPPORTS
NS_IMETHOD Done(const nsAString& aDate) override;
NS_IMETHOD Cancel() override;
private:
RefPtr<HTMLInputElement> mInput;
nsCOMPtr<nsIDatePicker> mDatePicker;
};
NS_IMETHODIMP
DatePickerShownCallback::Cancel()
{
mInput->PickerClosed();
return NS_OK;
}
NS_IMETHODIMP
DatePickerShownCallback::Done(const nsAString& aDate)
{
nsAutoString oldValue;
mInput->PickerClosed();
mInput->GetValue(oldValue);
if(!oldValue.Equals(aDate)){
mInput->SetValue(aDate);
nsContentUtils::DispatchTrustedEvent(mInput->OwnerDoc(),
static_cast<nsIDOMHTMLInputElement*>(mInput.get()),
NS_LITERAL_STRING("input"), true,
false);
return nsContentUtils::DispatchTrustedEvent(mInput->OwnerDoc(),
static_cast<nsIDOMHTMLInputElement*>(mInput.get()),
NS_LITERAL_STRING("change"), true,
false);
}
return NS_OK;
}
NS_IMPL_ISUPPORTS(DatePickerShownCallback, nsIDatePickerShownCallback)
bool
HTMLInputElement::IsPopupBlocked() const
{
@ -823,56 +766,6 @@ HTMLInputElement::IsPopupBlocked() const
return permission == nsIPopupWindowManager::DENY_POPUP;
}
nsresult
HTMLInputElement::InitDatePicker()
{
if (!IsDatePickerEnabled()) {
return NS_OK;
}
if (mPickerRunning) {
NS_WARNING("Just one nsIDatePicker is allowed");
return NS_ERROR_FAILURE;
}
nsCOMPtr<nsIDocument> doc = OwnerDoc();
nsCOMPtr<nsPIDOMWindowOuter> win = doc->GetWindow();
if (!win) {
return NS_ERROR_FAILURE;
}
if (IsPopupBlocked()) {
win->FirePopupBlockedEvent(doc, nullptr, EmptyString(), EmptyString());
return NS_OK;
}
// Get Loc title
nsXPIDLString title;
nsContentUtils::GetLocalizedString(nsContentUtils::eFORMS_PROPERTIES,
"DatePicker", title);
nsresult rv;
nsCOMPtr<nsIDatePicker> datePicker = do_CreateInstance("@mozilla.org/datepicker;1", &rv);
if (!datePicker) {
return rv;
}
nsAutoString initialValue;
GetValueInternal(initialValue);
rv = datePicker->Init(win, title, initialValue);
nsCOMPtr<nsIDatePickerShownCallback> callback =
new DatePickerShownCallback(this, datePicker);
rv = datePicker->Open(callback);
if (NS_SUCCEEDED(rv)) {
mPickerRunning = true;
}
return rv;
}
nsresult
HTMLInputElement::InitColorPicker()
{
@ -2570,9 +2463,8 @@ HTMLInputElement::ApplyStep(int32_t aStep)
bool
HTMLInputElement::IsExperimentalMobileType(uint8_t aType)
{
return (aType == NS_FORM_INPUT_DATE &&
!IsInputDateTimeEnabled() && !IsDatePickerEnabled()) ||
(aType == NS_FORM_INPUT_TIME && !IsInputDateTimeEnabled());
return (aType == NS_FORM_INPUT_DATE || aType == NS_FORM_INPUT_TIME) &&
!IsInputDateTimeEnabled();
}
bool
@ -4429,9 +4321,6 @@ HTMLInputElement::MaybeInitPickers(EventChainPostVisitor& aVisitor)
if (mType == NS_FORM_INPUT_COLOR) {
return InitColorPicker();
}
if (mType == NS_FORM_INPUT_DATE) {
return InitDatePicker();
}
return NS_OK;
}
@ -5814,10 +5703,8 @@ HTMLInputElement::ParseTime(const nsAString& aValue, uint32_t* aResult)
/* static */ bool
HTMLInputElement::IsDateTimeTypeSupported(uint8_t aDateTimeInputType)
{
return (aDateTimeInputType == NS_FORM_INPUT_DATE &&
(IsInputDateTimeEnabled() || IsExperimentalFormsEnabled() ||
IsDatePickerEnabled())) ||
(aDateTimeInputType == NS_FORM_INPUT_TIME &&
return ((aDateTimeInputType == NS_FORM_INPUT_DATE ||
aDateTimeInputType == NS_FORM_INPUT_TIME) &&
(IsInputDateTimeEnabled() || IsExperimentalFormsEnabled())) ||
((aDateTimeInputType == NS_FORM_INPUT_MONTH ||
aDateTimeInputType == NS_FORM_INPUT_WEEK ||
@ -5869,20 +5756,6 @@ HTMLInputElement::IsDirPickerEnabled()
return sDirPickerEnabled;
}
/* static */ bool
HTMLInputElement::IsDatePickerEnabled()
{
static bool sDatePickerEnabled = false;
static bool sDatePickerPrefCached = false;
if (!sDatePickerPrefCached) {
sDatePickerPrefCached = true;
Preferences::AddBoolVarCache(&sDatePickerEnabled, "dom.forms.datepicker",
false);
}
return sDatePickerEnabled;
}
/* static */ bool
HTMLInputElement::IsExperimentalFormsEnabled()
{

View file

@ -1451,7 +1451,6 @@ protected:
};
nsresult InitFilePicker(FilePickerType aType);
nsresult InitColorPicker();
nsresult InitDatePicker();
/**
* Use this function before trying to open a picker.
@ -1647,7 +1646,7 @@ private:
/**
* Checks if aDateTimeInputType should be supported based on "dom.forms.datetime",
* "dom.forms.datepicker" and "dom.experimental_forms".
* and "dom.experimental_forms".
*/
static bool
IsDateTimeTypeSupported(uint8_t aDateTimeInputType);
@ -1673,13 +1672,6 @@ private:
static bool
IsDirPickerEnabled();
/**
* Checks preference "dom.forms.datepicker" to determine if date picker should
* be supported.
*/
static bool
IsDatePickerEnabled();
/**
* Checks preference "dom.experimental_forms" to determine if experimental
* implementation of input element should be enabled.

View file

@ -37,23 +37,15 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=764481
inputType: "color",
expectedType: "color"
}, {
prefs: [["dom.experimental_forms", false], ["dom.forms.datepicker", false],
["dom.forms.datetime", false]],
prefs: [["dom.experimental_forms", false], ["dom.forms.datetime", false]],
inputType: "date",
expectedType: "text"
}, {
prefs: [["dom.experimental_forms", true], ["dom.forms.datepicker", false],
["dom.forms.datetime", false]],
prefs: [["dom.experimental_forms", true], ["dom.forms.datetime", false]],
inputType: "date",
expectedType: "date"
}, {
prefs: [["dom.experimental_forms", false], ["dom.forms.datepicker", true],
["dom.forms.datetime", false]],
inputType: "date",
expectedType: "date"
}, {
prefs: [["dom.experimental_forms", false], ["dom.forms.datepicker", false],
["dom.forms.datetime", true]],
prefs: [["dom.experimental_forms", false], ["dom.forms.datetime", true]],
inputType: "date",
expectedType: "date"
}, {

View file

@ -12,12 +12,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=874640
/** Test for Bug 874640 **/
var states = [
// dom.experimental_forms, dom.forms.datepicker, dom.forms.datetime, expectedValueAsDate
[ 'true', 'true', 'true', 'true' ],
[ 'true', 'false', 'false', 'true' ],
[ 'false', 'true', 'false', 'true' ],
[ 'false', 'false', 'true', 'true' ],
[ 'false', 'false', 'false', 'false' ],
// dom.experimental_forms, dom.forms.datetime, expectedValueAsDate
[ 'true', 'true', 'true' ],
[ 'true', 'false', 'true' ],
[ 'false', 'true', 'true' ],
[ 'false', 'false', 'false' ],
'end'
];
@ -33,12 +32,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=874640
SpecialPowers.pushPrefEnv({"set":[
["dom.experimental_forms", state[0] === 'true'],
["dom.forms.datepicker", state[1] === 'true'],
["dom.forms.datetime", state[2] === 'true']]},
["dom.forms.datetime", state[1] === 'true']]},
function() {
iframe.src = 'data:text/html,<script>' +
'parent.is("valueAsDate" in document.createElement("input"), ' +
state[3] + ', "valueAsDate presence state should be ' + state[3] + '");' +
state[2] + ', "valueAsDate presence state should be ' + state[2] + '");' +
'<\/script>'
});
}

View file

@ -1,87 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "DatePickerParent.h"
#include "nsComponentManagerUtils.h"
#include "nsIDocument.h"
#include "nsIDOMWindow.h"
#include "mozilla/Unused.h"
#include "mozilla/dom/Element.h"
#include "mozilla/dom/TabParent.h"
using mozilla::Unused;
using namespace mozilla::dom;
NS_IMPL_ISUPPORTS(DatePickerParent::DatePickerShownCallback,
nsIDatePickerShownCallback);
NS_IMETHODIMP
DatePickerParent::DatePickerShownCallback::Cancel()
{
if (mDatePickerParent) {
Unused << mDatePickerParent->SendCancel();
}
return NS_OK;
}
NS_IMETHODIMP
DatePickerParent::DatePickerShownCallback::Done(const nsAString& aDate)
{
if (mDatePickerParent) {
Unused << mDatePickerParent->Send__delete__(mDatePickerParent,
nsString(aDate));
}
return NS_OK;
}
void
DatePickerParent::DatePickerShownCallback::Destroy()
{
mDatePickerParent = nullptr;
}
bool
DatePickerParent::CreateDatePicker()
{
mPicker = do_CreateInstance("@mozilla.org/datepicker;1");
if (!mPicker) {
return false;
}
Element* ownerElement = TabParent::GetFrom(Manager())->GetOwnerElement();
if (!ownerElement) {
return false;
}
nsCOMPtr<mozIDOMWindowProxy> window = do_QueryInterface(ownerElement->OwnerDoc()->GetWindow());
if (!window) {
return false;
}
return NS_SUCCEEDED(mPicker->Init(window, mTitle, mInitialDate));
}
bool
DatePickerParent::RecvOpen()
{
if (!CreateDatePicker()) {
Unused << Send__delete__(this, mInitialDate);
return true;
}
mCallback = new DatePickerShownCallback(this);
mPicker->Open(mCallback);
return true;
};
void
DatePickerParent::ActorDestroy(ActorDestroyReason aWhy)
{
if (mCallback) {
mCallback->Destroy();
}
}

View file

@ -1,61 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_DatePickerParent_h
#define mozilla_dom_DatePickerParent_h
#include "mozilla/dom/PDatePickerParent.h"
#include "nsIDatePicker.h"
namespace mozilla {
namespace dom {
class DatePickerParent : public PDatePickerParent
{
public:
DatePickerParent(const nsString& aTitle,
const nsString& aInitialDate)
: mTitle(aTitle)
, mInitialDate(aInitialDate)
{}
virtual bool RecvOpen() override;
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
class DatePickerShownCallback final
: public nsIDatePickerShownCallback
{
public:
explicit DatePickerShownCallback(DatePickerParent* aDatePickerParnet)
: mDatePickerParent(aDatePickerParnet)
{}
NS_DECL_ISUPPORTS
NS_DECL_NSIDATEPICKERSHOWNCALLBACK
void Destroy();
private:
~DatePickerShownCallback() {}
DatePickerParent* mDatePickerParent;
};
private:
virtual ~DatePickerParent() {}
bool CreateDatePicker();
RefPtr<DatePickerShownCallback> mCallback;
nsCOMPtr<nsIDatePicker> mPicker;
nsString mTitle;
nsString mInitialDate;
};
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_DatePickerParent_h

View file

@ -9,7 +9,6 @@ include protocol PBlob;
include protocol PColorPicker;
include protocol PContent;
include protocol PContentBridge;
include protocol PDatePicker;
include protocol PDocAccessible;
include protocol PFilePicker;
include protocol PIndexedDBPermissionRequest;
@ -116,7 +115,6 @@ nested(upto inside_cpow) sync protocol PBrowser
manager PContent or PContentBridge;
manages PColorPicker;
manages PDatePicker;
manages PDocAccessible;
manages PFilePicker;
manages PIndexedDBPermissionRequest;
@ -441,12 +439,6 @@ parent:
*/
async PColorPicker(nsString title, nsString initialColor);
/**
* Create an asynchronous date picker on the parent side,
* but don't open it yet.
*/
async PDatePicker(nsString title, nsString initialDate);
async PFilePicker(nsString aTitle, int16_t aMode);
/**

View file

@ -1,27 +0,0 @@
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 8 -*- */
/* vim: set sw=4 ts=8 et tw=80 ft=cpp : */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
include protocol PBrowser;
namespace mozilla {
namespace dom {
protocol PDatePicker
{
manager PBrowser;
parent:
async Open();
child:
async Cancel();
async __delete__(nsString color);
};
} // namespace dom
} // namespace mozilla

View file

@ -96,7 +96,6 @@
#include "LayersLogging.h"
#include "nsDOMClassInfoID.h"
#include "nsColorPickerProxy.h"
#include "nsDatePickerProxy.h"
#include "nsContentPermissionHelper.h"
#include "nsPresShell.h"
#include "nsIAppsService.h"
@ -2013,21 +2012,6 @@ TabChild::DeallocPColorPickerChild(PColorPickerChild* aColorPicker)
return true;
}
PDatePickerChild*
TabChild::AllocPDatePickerChild(const nsString&, const nsString&)
{
NS_RUNTIMEABORT("unused");
return nullptr;
}
bool
TabChild::DeallocPDatePickerChild(PDatePickerChild* aDatePicker)
{
nsDatePickerProxy* picker = static_cast<nsDatePickerProxy*>(aDatePicker);
NS_RELEASE(picker);
return true;
}
PFilePickerChild*
TabChild::AllocPFilePickerChild(const nsString&, const int16_t&)
{

View file

@ -451,10 +451,6 @@ public:
virtual bool DeallocPColorPickerChild(PColorPickerChild* aActor) override;
virtual PDatePickerChild*
AllocPDatePickerChild(const nsString& title, const nsString& initialDate) override;
virtual bool DeallocPDatePickerChild(PDatePickerChild* actor) override;
virtual PFilePickerChild*
AllocPFilePickerChild(const nsString& aTitle, const int16_t& aMode) override;

View file

@ -80,7 +80,6 @@
#include "PermissionMessageUtils.h"
#include "StructuredCloneData.h"
#include "ColorPickerParent.h"
#include "DatePickerParent.h"
#include "FilePickerParent.h"
#include "TabChild.h"
#include "LoadContext.h"
@ -2424,20 +2423,6 @@ TabParent::DeallocPColorPickerParent(PColorPickerParent* actor)
return true;
}
PDatePickerParent*
TabParent::AllocPDatePickerParent(const nsString& aTitle,
const nsString& aInitialDate)
{
return new DatePickerParent(aTitle, aInitialDate);
}
bool
TabParent::DeallocPDatePickerParent(PDatePickerParent* actor)
{
delete actor;
return true;
}
PRenderFrameParent*
TabParent::AllocPRenderFrameParent()
{

View file

@ -347,10 +347,6 @@ public:
virtual bool
DeallocPColorPickerParent(PColorPickerParent* aColorPicker) override;
virtual PDatePickerParent*
AllocPDatePickerParent(const nsString& aTitle, const nsString& aInitialDate) override;
virtual bool DeallocPDatePickerParent(PDatePickerParent* aDatePicker) override;
virtual PDocAccessibleParent*
AllocPDocAccessibleParent(PDocAccessibleParent*, const uint64_t&,
const uint32_t&, const IAccessibleHolder&) override;

View file

@ -55,7 +55,6 @@ UNIFIED_SOURCES += [
'ContentProcess.cpp',
'ContentProcessManager.cpp',
'CrashReporterParent.cpp',
'DatePickerParent.cpp',
'FilePickerParent.cpp',
'nsIContentChild.cpp',
'nsIContentParent.cpp',
@ -95,7 +94,6 @@ IPDL_SOURCES += [
'PContentPermissionRequest.ipdl',
'PCrashReporter.ipdl',
'PCycleCollectWithLogs.ipdl',
'PDatePicker.ipdl',
'PFilePicker.ipdl',
'PMemoryReportRequest.ipdl',
'PPluginWidget.ipdl',

View file

@ -34,7 +34,6 @@ NoDirSelected=No directory selected.
# %S will be a number greater or equal to 2.
XFilesSelected=%S files selected.
ColorPicker=Choose a color
DatePicker=Choose a date
# LOCALIZATION NOTE (AndNMoreFiles): Semi-colon list of plural forms.
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
# This string is shown at the end of the tooltip text for <input type='file'