Bug 1428849 - Remove datetimepicker.xml bindings. r=mconley
authorTim Nguyen <ntim.bugs@gmail.com>
Tue, 09 Jan 2018 19:39:30 +0000
changeset 450210 3eba56d0b50fdc02d246b9c84a0bd2dcf2d2ac94
parent 450209 3575689ce19141b040ed28e7b0202259bd0856ae
child 450211 0a4fe34f8d6c636b17bb56eddfd7ad8f6ce4931b
push id8527
push userCallek@gmail.com
push dateThu, 11 Jan 2018 21:05:50 +0000
treeherdermozilla-beta@95342d212a7a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmconley
bugs1428849
milestone59.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1428849 - Remove datetimepicker.xml bindings. r=mconley MozReview-Commit-ID: LhfabvhJP5d
testing/marionette/doc/api/interaction.js.html
testing/marionette/interaction.js
toolkit/content/jar.mn
toolkit/content/tests/chrome/chrome.ini
toolkit/content/tests/chrome/test_datepicker.xul
toolkit/content/tests/chrome/test_timepicker.xul
toolkit/content/widgets/datetimepicker.xml
toolkit/content/xul.css
toolkit/locales/en-US/chrome/global/datetimepicker.dtd
toolkit/locales/jar.mn
toolkit/themes/osx/global/arrow/arrow-lft-hov.gif
toolkit/themes/osx/global/arrow/arrow-lft.gif
toolkit/themes/osx/global/arrow/arrow-rit-hov.gif
toolkit/themes/osx/global/datetimepicker.css
toolkit/themes/osx/global/jar.mn
toolkit/themes/shared/non-mac.jar.inc.mn
toolkit/themes/windows/global/datetimepicker.css
toolkit/themes/windows/global/jar.mn
--- a/testing/marionette/doc/api/interaction.js.html
+++ b/testing/marionette/doc/api/interaction.js.html
@@ -53,17 +53,16 @@ this.EXPORTED_SYMBOLS = ["interaction"];
 
 /** XUL elements that support disabled attribute. */
 const DISABLED_ATTRIBUTE_SUPPORTED_XUL = new Set([
   "ARROWSCROLLBOX",
   "BUTTON",
   "CHECKBOX",
   "COLORPICKER",
   "COMMAND",
-  "DATEPICKER",
   "DESCRIPTION",
   "KEY",
   "KEYSET",
   "LABEL",
   "LISTBOX",
   "LISTCELL",
   "LISTHEAD",
   "LISTHEADER",
@@ -76,17 +75,16 @@ const DISABLED_ATTRIBUTE_SUPPORTED_XUL =
   "RADIO",
   "RADIOGROUP",
   "RICHLISTBOX",
   "RICHLISTITEM",
   "SCALE",
   "TAB",
   "TABS",
   "TEXTBOX",
-  "TIMEPICKER",
   "TOOLBARBUTTON",
   "TREE",
 ]);
 
 /** XUL elements that support checked property. */
 const CHECKED_PROPERTY_SUPPORTED_XUL = new Set([
   "BUTTON",
   "CHECKBOX",
--- a/testing/marionette/interaction.js
+++ b/testing/marionette/interaction.js
@@ -27,17 +27,16 @@ this.EXPORTED_SYMBOLS = ["interaction"];
 
 /** XUL elements that support disabled attribute. */
 const DISABLED_ATTRIBUTE_SUPPORTED_XUL = new Set([
   "ARROWSCROLLBOX",
   "BUTTON",
   "CHECKBOX",
   "COLORPICKER",
   "COMMAND",
-  "DATEPICKER",
   "DESCRIPTION",
   "KEY",
   "KEYSET",
   "LABEL",
   "LISTBOX",
   "LISTCELL",
   "LISTHEAD",
   "LISTHEADER",
@@ -50,17 +49,16 @@ const DISABLED_ATTRIBUTE_SUPPORTED_XUL =
   "RADIO",
   "RADIOGROUP",
   "RICHLISTBOX",
   "RICHLISTITEM",
   "SCALE",
   "TAB",
   "TABS",
   "TEXTBOX",
-  "TIMEPICKER",
   "TOOLBARBUTTON",
   "TREE",
 ]);
 
 /**
  * Common form controls that user can change the value property
  * interactively.
  */
--- a/toolkit/content/jar.mn
+++ b/toolkit/content/jar.mn
@@ -66,17 +66,16 @@ toolkit.jar:
    content/global/bindings/autocomplete.xml    (widgets/autocomplete.xml)
    content/global/bindings/browser.xml         (widgets/browser.xml)
    content/global/bindings/button.xml          (widgets/button.xml)
    content/global/bindings/calendar.js         (widgets/calendar.js)
    content/global/bindings/checkbox.xml        (widgets/checkbox.xml)
    content/global/bindings/colorpicker.xml     (widgets/colorpicker.xml)
    content/global/bindings/datekeeper.js       (widgets/datekeeper.js)
    content/global/bindings/datepicker.js       (widgets/datepicker.js)
-   content/global/bindings/datetimepicker.xml  (widgets/datetimepicker.xml)
    content/global/bindings/datetimepopup.xml   (widgets/datetimepopup.xml)
    content/global/bindings/datetimebox.xml     (widgets/datetimebox.xml)
    content/global/bindings/datetimebox.css     (widgets/datetimebox.css)
 *  content/global/bindings/dialog.xml          (widgets/dialog.xml)
    content/global/bindings/editor.xml          (widgets/editor.xml)
    content/global/bindings/filefield.xml       (widgets/filefield.xml)
 *  content/global/bindings/findbar.xml         (widgets/findbar.xml)
    content/global/bindings/general.xml         (widgets/general.xml)
--- a/toolkit/content/tests/chrome/chrome.ini
+++ b/toolkit/content/tests/chrome/chrome.ini
@@ -98,17 +98,16 @@ fail-if = (os == 'win' && ccov) # Bug 14
 skip-if = (os == 'mac' && os_version == '10.10') # Unexpectedly perma-passes on OSX 10.10
 [test_bug792324.xul]
 [test_bug1048178.xul]
 skip-if = toolkit == "cocoa"
 [test_button.xul]
 [test_closemenu_attribute.xul]
 [test_colorpicker_popup.xul]
 [test_contextmenu_list.xul]
-[test_datepicker.xul]
 [test_deck.xul]
 [test_dialogfocus.xul]
 [test_findbar.xul]
 fail-if = (os == 'win' && ccov) # Bug 1423667
 subsuite = clipboard
 [test_findbar_entireword.xul]
 [test_findbar_events.xul]
 [test_focus_anons.xul]
@@ -172,17 +171,16 @@ support-files = window_preferences_onsyn
 [test_showcaret.xul]
 [test_subframe_origin.xul]
 [test_tabbox.xul]
 [test_tabindex.xul]
 [test_textbox_dictionary.xul]
 [test_textbox_emptytext.xul]
 [test_textbox_number.xul]
 [test_textbox_search.xul]
-[test_timepicker.xul]
 [test_titlebar.xul]
 skip-if = os == "linux"
 [test_toolbar.xul]
 [test_tooltip.xul]
 skip-if = (os == 'mac' && os_version == '10.10') || (os == 'win') # Bug 1141245, frequent timeouts on OSX 10.10, Windows
 [test_tooltip_noautohide.xul]
 [test_tree.xul]
 [test_tree_hier.xul]
deleted file mode 100644
--- a/toolkit/content/tests/chrome/test_datepicker.xul
+++ /dev/null
@@ -1,415 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
-<!--
-  XUL Widget Test for datepicker
-  -->
-<window title="datepicker" width="500" height="600"
-        onload="setTimeout(testtag_datepickers, 0);"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
-
-<hbox onpopupshown="testtag_datepicker_UI_popup()"
-      onpopuphidden="testtag_finish()">
-<datepicker id="datepicker"/>
-<datepicker id="datepicker-popup" type="popup"/>
-<hbox onDOMMouseScroll="mouseScrolled = event.defaultPrevented;">
-  <datepicker id="datepicker-grid" type="grid" value="2007-04-21"/>
-</hbox>
-</hbox>
-
-<!-- Test-only key bindings, but must not conflict with the application. -->
-<keyset id="mainKeyset">
-  <key id="key_alt_z" key="Z" oncommand="return" modifiers="alt"/>
-  <key id="key_ctrl_q" key="Q" oncommand="return" modifiers="control"/>
-  <key id="key_meta_e" key="E" oncommand="return" modifiers="meta"/>
-</keyset>
-
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-</pre>
-</body>
-
-<script>
-<![CDATA[
-
-var mouseScrolled = false;
-
-SimpleTest.waitForExplicitFinish();
-
-function testtag_datepickers()
-{
-  var dppopup = document.getElementById("datepicker-popup");
-  testtag_datepicker(document.getElementById("datepicker"), "", "datepicker");
-  testtag_datepicker(dppopup, "popup", "datepicker popup");
-
-  var gridpicker = document.getElementById("datepicker-grid");
-  is(gridpicker.monthField.selectedIndex, "3", "datepicker grid correct month is initially selected");
-  testtag_datepicker(gridpicker, "grid", "datepicker grid");
-  dppopup.open = true;
-}
-
-function testtag_finish()
-{
-  ok(!document.getElementById("datepicker-popup").open, "datepicker popup open false again");
-
-  var dpgrid = document.getElementById("datepicker-grid");
-  synthesizeWheel(dpgrid, 5, 5, { deltaY: 10.0,
-                                  deltaMode: WheelEvent.DOM_DELTA_LINE });
-  is(mouseScrolled, true, "mouse scrolled");
-  is(dpgrid.displayedMonth, 2, "mouse scroll changed month");
-
-  SimpleTest.finish();
-}
-
-function testtag_datepicker(dp, type, testid)
-{
-  testid += " ";
-
-  var today = new Date();
-  var tyear = today.getFullYear();
-  var tmonth = today.getMonth();
-  var tdate = today.getDate();
-
-  // testtag_comparedate(dp, testid + "initial", tyear, tmonth, tdate);
-
-  // check that setting the value property works
-  dp.value = testtag_getdatestring(tyear, tmonth, tdate);
-  testtag_comparedate(dp, testid + "set value", tyear, tmonth, tdate);
-
-  // check that setting the dateValue property works
-  dp.dateValue = today;
-  testtag_comparedate(dp, testid + "set dateValue", tyear, tmonth, tdate);
-  ok(dp.value !== today, testid + " set dateValue different date");
-
-  ok(!dp.readOnly, testid + "readOnly");
-  dp.readOnly = true;
-  ok(dp.readOnly, testid + "set readOnly");
-  dp.readOnly = false;
-  ok(!dp.readOnly, testid + "clear readOnly");
-
-  var setDateField = function(field, value, expectException,
-                              expectedYear, expectedMonth, expectedDate)
-  {
-    var exh = false;
-    try {
-      dp[field] = value;
-    } catch (ex) { exh = true; }
-    is(exh, expectException, testid + "set " + field + " " + value);
-    testtag_comparedate(dp, testid + "set " + field + " " + value,
-                        expectedYear, expectedMonth, expectedDate);
-  }
-
-  // check the value property
-  setDateField("value", "2003-1-27", false, 2003, 0, 27);
-  setDateField("value", "2002-11-8", false, 2002, 10, 8);
-  setDateField("value", "2001-07-02", false, 2001, 6, 2);
-  setDateField("value", "2002-10-25", false, 2002, 9, 25);
-
-  // check that the year, month and date fields can be set properly
-  setDateField("year", 2002, false, 2002, 9, 25);
-  setDateField("year", 0, true, 2002, 9, 25);
-
-  setDateField("month", 6, false, 2002, 6, 25);
-  setDateField("month", 9, false, 2002, 9, 25);
-  setDateField("month", 10, false, 2002, 10, 25);
-  setDateField("month", -1, true, 2002, 10, 25);
-  setDateField("month", 12, true, 2002, 10, 25);
-
-  setDateField("date", 9, false, 2002, 10, 9);
-  setDateField("date", 10, false, 2002, 10, 10);
-  setDateField("date", 15, false, 2002, 10, 15);
-  setDateField("date", 0, true, 2002, 10, 15);
-  setDateField("date", 32, true, 2002, 10, 15);
-
-  // check leap year handling
-  setDateField("value", "1600-2-29", false, 1600, 1, 29);
-  setDateField("value", "2000-2-29", false, 2000, 1, 29);
-  setDateField("value", "2003-2-29", false, 2003, 2, 1);
-  setDateField("value", "2004-2-29", false, 2004, 1, 29);
-  setDateField("value", "2100-2-29", false, 2100, 2, 1);
-
-  // check invalid values for the value and dateValue properties
-  dp.value = "2002-07-15";
-  setDateField("value", "", true, 2002, 6, 15);
-  setDateField("value", "2-2", true, 2002, 6, 15);
-  setDateField("value", "2000-5-6-6", true, 2002, 6, 15);
-  setDateField("value", "2000-a-19", true, 2002, 6, 15);
-  setDateField("dateValue", "none", true, 2002, 6, 15);
-
-  // grid and popup types can display a different month than the current one
-  var isGridOrPopup = (type == "grid" || type == "popup");
-  dp.displayedMonth = 3;
-  testtag_comparedate(dp, testid + "set displayedMonth",
-                      2002, isGridOrPopup ? 6 : 3, 15, 3);
-
-  dp.displayedYear = 2009;
-  testtag_comparedate(dp, testid + "set displayedYear",
-                      isGridOrPopup ? 2002 : 2009, isGridOrPopup ? 6 : 3, 15, 3, 2009);
-
-  if (isGridOrPopup) {
-    dp.value = "2008-02-29";
-    dp.displayedYear = 2009;
-    is(dp.displayedMonth, 1, "set displayedYear during leap year");
-  }
-
-  is(dp.open, false, testid + "open false");
-  if (type != "popup") {
-    dp.open = true;
-    ok(!dp.open, testid + "open still false");
-  }
-
-  // check the fields
-  if (type != "grid") {
-    ok(dp.yearField instanceof HTMLInputElement, testid + "yearField");
-    ok(dp.monthField instanceof HTMLInputElement, testid + "monthField");
-    ok(dp.dateField instanceof HTMLInputElement, testid + "dateField");
-
-    testtag_datepicker_UI_fields(dp, testid);
-
-    dp.readOnly = true;
-
-    // check that keyboard usage doesn't change the value when the datepicker
-    // is read only
-    testtag_datepicker_UI_key(dp, testid + "readonly ", "2003-01-29",
-                              dp.yearField, 2003, 0, 29, 2003, 0, 29);
-    testtag_datepicker_UI_key(dp, testid + "readonly ", "2003-04-29",
-                              dp.monthField, 2003, 3, 29, 2003, 3, 29);
-    testtag_datepicker_UI_key(dp, testid + "readonly ", "2003-06-15",
-                              dp.dateField, 2003, 5, 15, 2003, 5, 15);
-
-    dp.readOnly = false;
-  }
-  else {
-    testtag_datepicker_UI_grid(dp, "grid", testid);
-  }
-}
-
-function testtag_datepicker_UI_fields(dp, testid)
-{
-  testid += "UI";
-  dp.focus();
-
-  // test adjusting the date with the up and down keys
-  testtag_datepicker_UI_key(dp, testid, "2003-01-29", dp.yearField, 2004, 0, 29, 2003, 0, 29);
-  testtag_datepicker_UI_key(dp, testid, "1600-02-29", dp.yearField, 1601, 1, 28, 1600, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2000-02-29", dp.yearField, 2001, 1, 28, 2000, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2004-02-29", dp.yearField, 2005, 1, 28, 2004, 1, 28);
-
-  testtag_datepicker_UI_key(dp, testid, "2003-04-29", dp.monthField, 2003, 4, 29, 2003, 3, 29);
-  testtag_datepicker_UI_key(dp, testid, "2003-01-15", dp.monthField, 2003, 1, 15, 2003, 0, 15);
-  testtag_datepicker_UI_key(dp, testid, "2003-12-29", dp.monthField, 2003, 0, 29, 2003, 11, 29);
-  testtag_datepicker_UI_key(dp, testid, "2003-03-31", dp.monthField, 2003, 3, 30, 2003, 2, 30);
-
-  testtag_datepicker_UI_key(dp, testid, "2003-06-15", dp.dateField, 2003, 5, 16, 2003, 5, 15);
-  testtag_datepicker_UI_key(dp, testid, "2003-06-01", dp.dateField, 2003, 5, 2, 2003, 5, 1);
-  testtag_datepicker_UI_key(dp, testid, "2003-06-30", dp.dateField, 2003, 5, 1, 2003, 5, 30);
-  testtag_datepicker_UI_key(dp, testid, "1600-02-28", dp.dateField, 1600, 1, 29, 1600, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2000-02-28", dp.dateField, 2000, 1, 29, 2000, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2003-02-28", dp.dateField, 2003, 1, 1, 2003, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2004-02-28", dp.dateField, 2004, 1, 29, 2004, 1, 28);
-  testtag_datepicker_UI_key(dp, testid, "2100-02-28", dp.dateField, 2100, 1, 1, 2100, 1, 28);
-
-  synthesizeKeyExpectEvent('Z', { altKey: true }, $("key_alt_z"), "command", testid + " alt shortcut");
-  synthesizeKeyExpectEvent('Q', { ctrlKey: true }, $("key_ctrl_q"), "command", testid + " ctrl shortcut");
-  synthesizeKeyExpectEvent('E', { metaKey: true }, $("key_meta_e"), "command", testid + " meta shortcut");
-}
-
-function testtag_datepicker_UI_grid(dp, type, testid)
-{
-  testid += "UI ";
-
-  // check that pressing the cursor keys moves the date properly. For grid
-  // types, focus the grid first. For popup types, the grid should be focused
-  // automatically when opening the popup.
-  var ktarget = dp;
-  if (type == "grid")
-    dp.focus();
-  else
-    ktarget = dp.attachedControl;
-
-  dp.value = "2003-02-22";
-
-  synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "change", testid + "key left");
-  is(dp.value, "2003-02-21", testid + "key left");
-
-  synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "change", testid + "key right");
-  is(dp.value, "2003-02-22", testid + "key right");
-  synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "change", testid + "key right next week");
-  is(dp.value, "2003-02-23", testid + "key right next week");
-  synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "change", testid + "key left previous week");
-  is(dp.value, "2003-02-22", testid + "key left previous week");
-
-  synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "change", testid + "key up");
-  is(dp.value, "2003-02-15", testid + "key up");
-  synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "change", testid + "key down");
-  is(dp.value, "2003-02-22", testid + "key down");
-  synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "change");
-  is(dp.value, "2003-03-01", testid + "key down next month", testid + "key down next month");
-  synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "change");
-  is(dp.value, "2003-02-22", testid + "key up previous month", testid + "key up previous month");
-
-  // the displayed month may be changed with the page up and page down keys,
-  // however this only changes the displayed month, not the current value.
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down");
-  is(dp.value, "2003-02-22", testid + "key page down");
-
-  // the monthchange event is fired when the displayed month is changed
-  synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "monthchange", testid + "key up after month change");
-  is(dp.value, "2003-02-15", testid + "key up after month change");
-
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up");
-  is(dp.value, "2003-02-15", testid + "key page up");
-
-  // check handling at the start and end of the month
-  dp.value = "2010-10-01";
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-10-01");
-  is(dp.displayedMonth, 8, testid + "key page up 2010-10-01 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-10-01 displayedYear");
-
-  dp.value = "2010-10-01";
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-10-01");
-  is(dp.displayedMonth, 10, testid + "key page down 2010-10-01 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page down 2010-10-01 displayedYear");
-
-  dp.value = "2010-10-31";
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-10-31");
-  is(dp.displayedMonth, 8, testid + "key page up 2010-10-31 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-10-01 displayedYear");
-  dp.value = "2010-10-31";
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-10-31");
-  is(dp.displayedMonth, 10, testid + "key page down 2010-10-31 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-10-31 displayedYear");
-
-  // check handling at the end of february
-  dp.value = "2010-03-31";
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-03-31");
-  is(dp.displayedMonth, 1, testid + "key page up 2010-03-31 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-03-31 displayedYear");
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-02-28");
-  is(dp.displayedMonth, 0, testid + "key page up 2010-02-28 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-02-28 displayedYear");
-
-  dp.value = "2010-01-31";
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-01-31");
-  is(dp.displayedMonth, 1, testid + "key page down 2010-01-31 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-01-31 displayedYear");
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-02-28");
-  is(dp.displayedMonth, 2, testid + "key page down 2010-02-28 displayedMonth");
-  is(dp.displayedYear, 2010, testid + "key page up 2010-02-28 displayedYear");
-
-  // check handling at the end of february during a leap year
-  dp.value = "2008-01-31";
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2008-01-31");
-  is(dp.displayedMonth, 1, testid + "key page down 2008-01-31 displayedMonth");
-  is(dp.displayedYear, 2008, testid + "key page up 2008-01-31 displayedYear");
-  dp.value = "2008-03-31";
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2008-03-31");
-  is(dp.displayedMonth, 1, testid + "key page up 2008-03-31 displayedMonth");
-  is(dp.displayedYear, 2008, testid + "key page up 2008-03-31 displayedYear");
-
-  // the value of a read only datepicker cannot be changed
-  dp.value = "2003-02-15";
-
-  dp.readOnly = true;
-  synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "!change", testid + "key left read only");
-  is(dp.value, "2003-02-15", testid + "key left read only");
-  synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "!change", testid + "key right read only");
-  is(dp.value, "2003-02-15", testid + "key right read only");
-  synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "!change", testid + "key down read only");
-  is(dp.value, "2003-02-15", testid + "key down read only");
-  synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "!change", testid + "key up read only");
-  is(dp.value, "2003-02-15", testid + "key up read only");
-
-  // month can still be changed even when readonly
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange",
-                           testid + "key page up read only");
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange",
-                           testid + "key page down read only");
-
-  dp.readOnly = false;
-  synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "change", testid + "key left changeable again");
-  is(dp.value, "2003-02-14", testid + "key left changeable again");
-
-  // the value of a disabled datepicker cannot be changed
-  dp.disabled = true;
-  synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "!change", testid + "key left disabled");
-  is(dp.value, "2003-02-14", testid + "key left disabled");
-  synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "!change", testid + "key right disabled");
-  is(dp.value, "2003-02-14", testid + "key right disabled");
-  synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "!change", testid + "key down disabled");
-  is(dp.value, "2003-02-14", testid + "key down disabled");
-  synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "!change", testid + "key up disabled");
-  is(dp.value, "2003-02-14", testid + "key up disabled");
-
-  // month cannot be changed even when disabled
-  synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "!monthchange",
-                           testid + "key page down disabled");
-  synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "!monthchange",
-                           testid + "key page up disabled");
-
-  dp.disabled = false;
-  synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "change", testid + "key right enabled again");
-  is(dp.value, "2003-02-15", testid + "key right enabled again");
-}
-
-function testtag_datepicker_UI_popup()
-{
-  var dppopup = document.getElementById("datepicker-popup");
-  is(dppopup.open, true, "datepicker popup after open");
-  testtag_datepicker_UI_grid(dppopup, "popup", "datepicker popup ");
-  dppopup.open = false;
-}
-
-function testtag_datepicker_UI_key(dp, testid, value, field,
-                                   uyear, umonth, udate,
-                                   dyear, dmonth, ddate)
-{
-  dp.value = value;
-  field.focus();
-
-  synthesizeKey("VK_UP", { });
-  testtag_comparedate(dp, testid + " " + value + " key up", uyear, umonth, udate);
-
-  synthesizeKey("VK_DOWN", { });
-  testtag_comparedate(dp, testid + " " + value + " key down", dyear, dmonth, ddate);
-}
-
-function testtag_getdatestring(year, month, date)
-{
-  month = (month < 9) ? ("0" + ++month) : month + 1;
-  if (date < 10)
-    date = "0" + date;
-  return year + "-" + month + "-" + date;
-}
-
-function testtag_comparedate(dp, testid, year, month, date, displayedMonth, displayedYear)
-{
-  is(dp.value, testtag_getdatestring(year, month, date), testid + " value");
-  if (testid.indexOf("initial") == -1)
-    is(dp.getAttribute("value"),
-                  testtag_getdatestring(year, month, date),
-                  testid + " value attribute");
-
-  var dateValue = dp.dateValue;
-  ok(dateValue.getFullYear() == year &&
-                dateValue.getMonth() == month &&
-                dateValue.getDate() == date,
-                testid + " dateValue");
-
-  is(dp.year, year, testid + " year");
-  is(dp.month, month, testid + " month");
-  is(dp.displayedMonth, displayedMonth ? displayedMonth : month, testid + " displayedMonth");
-  is(dp.displayedYear, displayedYear ? displayedYear : year, testid + " displayedYear");
-  is(dp.date, date, testid + " date");
-}
-
-]]>
-
-</script>
-
-</window>
deleted file mode 100644
--- a/toolkit/content/tests/chrome/test_timepicker.xul
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
-<!--
-  XUL Widget Test for timepicker
-  -->
-<window title="timepicker" width="500" height="600"
-        onload="setTimeout(testtag_timepicker, 0);"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>  
-  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>  
-
-<timepicker id="timepicker"/>
-
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-</pre>
-</body>
-
-<script>
-<![CDATA[
-
-SimpleTest.waitForExplicitFinish();
-
-function testtag_timepicker()
-{
-  var tp = document.getElementById("timepicker");
-  
-  var testid = "timepicker ";
-
-  var today = new Date();
-  var thour = today.getHours();
-  var tminute = today.getMinutes();
-  var tsecond = today.getSeconds();
-
-  // testtag_comparetime(tp, testid + "initial", thour, tminute, tsecond);
-
-  // check that setting the value property works
-  tp.value = testtag_gettimestring(thour, tminute, tsecond);
-  testtag_comparetime(tp, testid + "set value", thour, tminute, tsecond);
-
-  var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
-  var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory-nu-latn";
-  var fdt = new Date(2000,0,1,16,7,9).toLocaleTimeString(locale);
-  is(tp.is24HourClock, Number(fdt.match(numberOrder)[2]) > 12, "is24HourClock");
-
-  // check that setting the dateValue property works
-  tp.dateValue = today;
-  testtag_comparetime(tp, testid + "set dateValue", thour, tminute, tsecond);
-  ok(tp.value !== today, testid + " set dateValue different time");
-
-  ok(!tp.readOnly, testid + "readOnly");
-  tp.readOnly = true;
-  ok(tp.readOnly, testid + "set readOnly");
-  tp.readOnly = false;
-  ok(!tp.readOnly, testid + "clear readOnly");
-
-  function setTimeField(field, value, expectException,
-                        expectedHour, expectedMinute, expectedSecond)
-  {
-    var exh = false;
-    try {
-      tp[field] = value;
-    } catch (ex) { exh = true; }
-    is(exh, expectException, testid + "set " + field + " " + value);
-    testtag_comparetime(tp, testid + "set " + field + " " + value,
-                        expectedHour, expectedMinute, expectedSecond);
-  }
-
-  // check the value property
-  setTimeField("value", "0:0:0", false, 0, 0, 0);
-  setTimeField("value", "21:1:40", false, 21, 1, 40);
-  setTimeField("value", "7:11:8", false, 7, 11, 8);
-  setTimeField("value", "04:07:02", false, 4, 7, 2);
-  setTimeField("value", "10:42:20", false, 10, 42, 20);
-
-  // check that the hour, minute and second fields can be set properly
-  setTimeField("hour", 7, false, 7, 42, 20);
-  setTimeField("hour", 0, false, 0, 42, 20);
-  setTimeField("hour", 21, false, 21, 42, 20);
-  setTimeField("hour", -1, true, 21, 42, 20);
-  setTimeField("hour", 24, true, 21, 42, 20);
-
-  setTimeField("minute", 0, false, 21, 0, 20);
-  setTimeField("minute", 9, false, 21, 9, 20);
-  setTimeField("minute", 10, false, 21, 10, 20);
-  setTimeField("minute", 35, false, 21, 35, 20);
-  setTimeField("minute", -1, true, 21, 35, 20);
-  setTimeField("minute", 60, true, 21, 35, 20);
-
-  setTimeField("second", 0, false, 21, 35, 0);
-  setTimeField("second", 9, false, 21, 35, 9);
-  setTimeField("second", 10, false, 21, 35, 10);
-  setTimeField("second", 51, false, 21, 35, 51);
-  setTimeField("second", -1, true, 21, 35, 51);
-  setTimeField("second", 60, true, 21, 35, 51);
-
-  // check when seconds is not specified
-  setTimeField("value", "06:05", false, 6, 5, 0);
-  setTimeField("value", "06:15", false, 6, 15, 0);
-  setTimeField("value", "16:15", false, 16, 15, 0);
-
-  // check that times overflow properly
-  setTimeField("value", "5:65:21", false, 6, 5, 21);
-  setTimeField("value", "5:25:72", false, 5, 26, 12);
-
-  // check invalid values for the value and dateValue properties
-  tp.value = "14:25:48";
-  setTimeField("value", "", true, 14, 25, 48);
-  setTimeField("value", "1:5:6:6", true, 14, 25, 48);
-  setTimeField("value", "2:a:19", true, 14, 25, 48);
-  setTimeField("dateValue", "none", true, 14, 25, 48);
-
-  // check the fields
-  ok(tp.hourField instanceof HTMLInputElement, testid + "hourField");
-  ok(tp.minuteField instanceof HTMLInputElement, testid + "minuteField");
-  ok(tp.secondField instanceof HTMLInputElement, testid + "secondField");
-
-  testtag_timepicker_UI(tp, testid);
-
-  tp.readOnly = true;
-
-  // check that keyboard usage doesn't change the value when the timepicker
-  // is read only
-  testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
-                            tp.hourField, 14, 25, 48, 14, 25, 48);
-  testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
-                            tp.minuteField, 14, 25, 48, 14, 25, 48);
-  testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
-                            tp.secondField, 14, 25, 48, 14, 25, 48);
-
-  SimpleTest.finish();
-}
-
-function testtag_timepicker_UI(tp, testid)
-{
-  testid += "UI";
-
-  // test adjusting the time with the up and down keys
-  testtag_timepicker_UI_key(tp, testid, "0:12:25", tp.hourField, 1, 12, 25, 0, 12, 25);
-  testtag_timepicker_UI_key(tp, testid, "11:12:25", tp.hourField, 12, 12, 25, 11, 12, 25);
-  testtag_timepicker_UI_key(tp, testid, "7:12:25", tp.hourField, 8, 12, 25, 7, 12, 25);
-  testtag_timepicker_UI_key(tp, testid, "16:12:25", tp.hourField, 17, 12, 25, 16, 12, 25);
-  testtag_timepicker_UI_key(tp, testid, "23:12:25", tp.hourField, 0, 12, 25, 23, 12, 25);
-
-  testtag_timepicker_UI_key(tp, testid, "15:23:46", tp.minuteField, 15, 24, 46, 15, 23, 46);
-  testtag_timepicker_UI_key(tp, testid, "15:0:46", tp.minuteField, 15, 1, 46, 15, 0, 46);
-  testtag_timepicker_UI_key(tp, testid, "15:59:46", tp.minuteField, 15, 0, 46, 15, 59, 46);
-
-  testtag_timepicker_UI_key(tp, testid, "11:50:46", tp.secondField, 11, 50, 47, 11, 50, 46);
-  testtag_timepicker_UI_key(tp, testid, "11:50:0", tp.secondField, 11, 50, 1, 11, 50, 0);
-  testtag_timepicker_UI_key(tp, testid, "11:50:59", tp.secondField, 11, 50, 0, 11, 50, 59);
-}
-
-function testtag_timepicker_UI_key(tp, testid, value, field,
-                                   uhour, uminute, usecond,
-                                   dhour, dminute, dsecond)
-{
-  tp.value = value;
-  field.focus();
-
-  var eventTarget = tp.readOnly ? null : tp;
-
-  var testname = testid + " " + value + " key up";
-  synthesizeKeyExpectEvent("VK_UP", { }, eventTarget, "change", testname);
-  testtag_comparetime(tp, testname, uhour, uminute, usecond);
-
-  testname = testid + " " + value + " key down";
-  synthesizeKeyExpectEvent("VK_DOWN", { }, eventTarget, "change", testname);
-  testtag_comparetime(tp, testname, dhour, dminute, dsecond);
-}
-
-function testtag_gettimestring(hour, minute, second)
-{
-  if (minute < 10)
-    minute = "0" + minute;
-  if (second < 10)
-    second = "0" + second;
-  return hour + ":" + minute + ":" + second;
-}
-
-function testtag_comparetime(tp, testid, hour, minute, second)
-{
-  is(tp.value, testtag_gettimestring(hour, minute, second), testid + " value");
-  is(tp.getAttribute("value"),
-                testtag_gettimestring(hour, minute, second),
-                testid + " value attribute");
-
-  var dateValue = tp.dateValue;
-  ok(dateValue.getHours() == hour &&
-                dateValue.getMinutes() == minute &&
-                dateValue.getSeconds() == second,
-                testid + " dateValue");
-
-  is(tp.hour, hour, testid + " hour");
-  is(tp.minute, minute, testid + " minute");
-  is(tp.second, second, testid + " second");
-}
-
-]]>
-
-</script>
-
-</window>
deleted file mode 100644
--- a/toolkit/content/widgets/datetimepicker.xml
+++ /dev/null
@@ -1,1282 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- 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/. -->
-
-<!DOCTYPE bindings [
-  <!ENTITY % datetimepickerDTD SYSTEM "chrome://global/locale/datetimepicker.dtd">
-  %datetimepickerDTD;
-]>
-
-<bindings id="timepickerBindings"
-   xmlns="http://www.mozilla.org/xbl"
-   xmlns:html="http://www.w3.org/1999/xhtml"
-   xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-   xmlns:xbl="http://www.mozilla.org/xbl">
-
-  <binding id="datetimepicker-base"
-           extends="chrome://global/content/bindings/general.xml#basecontrol">
-
-    <resources>
-      <stylesheet src="chrome://global/content/textbox.css"/>
-      <stylesheet src="chrome://global/skin/textbox.css"/>
-      <stylesheet src="chrome://global/skin/dropmarker.css"/>
-      <stylesheet src="chrome://global/skin/datetimepicker.css"/>
-    </resources>
-
-    <content align="center">
-      <xul:hbox class="datetimepicker-input-box" align="center"
-                xbl:inherits="context,disabled,readonly">
-        <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-one"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:label anonid="sep-first" class="datetimepicker-separator" value=":"/>
-        <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-two"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:label anonid="sep-second" class="datetimepicker-separator" value=":"/>
-        <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-three"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-ampm"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-      </xul:hbox>
-      <xul:spinbuttons anonid="buttons" xbl:inherits="disabled"
-                       onup="this.parentNode._increaseOrDecrease(1);"
-                       ondown="this.parentNode._increaseOrDecrease(-1);"/>
-    </content>
-
-    <implementation>
-      <field name="_dateValue">null</field>
-      <field name="_fieldOne">
-        document.getAnonymousElementByAttribute(this, "anonid", "input-one");
-      </field>
-      <field name="_fieldTwo">
-        document.getAnonymousElementByAttribute(this, "anonid", "input-two");
-      </field>
-      <field name="_fieldThree">
-        document.getAnonymousElementByAttribute(this, "anonid", "input-three");
-      </field>
-      <field name="_fieldAMPM">
-        document.getAnonymousElementByAttribute(this, "anonid", "input-ampm");
-      </field>
-      <field name="_separatorFirst">
-        document.getAnonymousElementByAttribute(this, "anonid", "sep-first");
-      </field>
-      <field name="_separatorSecond">
-        document.getAnonymousElementByAttribute(this, "anonid", "sep-second");
-      </field>
-      <field name="_lastFocusedField">null</field>
-      <field name="_hasEntry">true</field>
-      <field name="_valueEntered">false</field>
-      <field name="attachedControl">null</field>
-
-      <property name="_currentField" readonly="true">
-        <getter>
-          var focusedInput = document.activeElement;
-          if (focusedInput == this._fieldOne ||
-              focusedInput == this._fieldTwo ||
-              focusedInput == this._fieldThree ||
-              focusedInput == this._fieldAMPM)
-            return focusedInput;
-          return this._lastFocusedField || this._fieldOne;
-        </getter>
-      </property>
-
-      <property name="dateValue" onget="return new Date(this._dateValue);">
-        <setter>
-          <![CDATA[
-            if (!(val instanceof Date))
-              throw "Invalid Date";
-
-            this._setValueNoSync(val);
-            if (this.attachedControl)
-              this.attachedControl._setValueNoSync(val);
-            return val;
-          ]]>
-        </setter>
-      </property>
-
-      <property name="readOnly" onset="if (val) this.setAttribute('readonly', 'true');
-                                       else this.removeAttribute('readonly'); return val;"
-                                onget="return this.getAttribute('readonly') == 'true';"/>
-
-      <method name="_fireEvent">
-        <parameter name="aEventName"/>
-        <parameter name="aTarget"/>
-        <body>
-          var event = document.createEvent("Events");
-          event.initEvent(aEventName, true, true);
-          return !aTarget.dispatchEvent(event);
-        </body>
-      </method>
-
-      <method name="_setValueOnChange">
-        <parameter name="aField"/>
-        <body>
-          <![CDATA[
-            if (!this._hasEntry)
-              return;
-
-            if (aField == this._fieldOne ||
-                aField == this._fieldTwo ||
-                aField == this._fieldThree) {
-              var value = Number(aField.value);
-              if (isNaN(value))
-                value = 0;
-
-              value = this._constrainValue(aField, value, true);
-              this._setFieldValue(aField, value);
-            }
-          ]]>
-        </body>
-      </method>
-
-      <method name="_init">
-        <body/>
-      </method>
-
-      <constructor>
-        this._init();
-
-        var cval = this.getAttribute("value");
-        if (cval) {
-          try {
-            this.value = cval;
-            return;
-          } catch (ex) { }
-        }
-        this.dateValue = new Date();
-      </constructor>
-
-      <destructor>
-        if (this.attachedControl) {
-          this.attachedControl.attachedControl = null;
-          this.attachedControl = null;
-        }
-      </destructor>
-
-    </implementation>
-
-    <handlers>
-      <handler event="focus" phase="capturing">
-        <![CDATA[
-          var target = event.originalTarget;
-          if (target == this._fieldOne ||
-              target == this._fieldTwo ||
-              target == this._fieldThree ||
-              target == this._fieldAMPM)
-            this._lastFocusedField = target;
-        ]]>
-      </handler>
-
-      <handler event="keypress">
-        <![CDATA[
-          if (this._hasEntry && event.charCode &&
-              this._currentField != this._fieldAMPM &&
-                !(event.altKey || event.ctrlKey || event.metaKey) &&
-              (event.charCode < 48 || event.charCode > 57))
-            event.preventDefault();
-        ]]>
-      </handler>
-
-      <handler event="keypress" keycode="VK_UP">
-        if (this._hasEntry)
-          this._increaseOrDecrease(1);
-      </handler>
-      <handler event="keypress" keycode="VK_DOWN">
-        if (this._hasEntry)
-          this._increaseOrDecrease(-1);
-      </handler>
-
-      <handler event="input">
-        this._valueEntered = true;
-      </handler>
-
-      <handler event="change">
-        this._setValueOnChange(event.originalTarget);
-      </handler>
-    </handlers>
-
-  </binding>
-
-  <binding id="timepicker"
-           extends="chrome://global/content/bindings/datetimepicker.xml#datetimepicker-base">
-
-    <implementation>
-      <field name="is24HourClock">false</field>
-      <field name="hourLeadingZero">false</field>
-      <field name="minuteLeadingZero">true</field>
-      <field name="secondLeadingZero">true</field>
-      <field name="amIndicator">"AM"</field>
-      <field name="pmIndicator">"PM"</field>
-
-      <field name="hourField">null</field>
-      <field name="minuteField">null</field>
-      <field name="secondField">null</field>
-
-      <property name="value">
-        <getter>
-          <![CDATA[
-            var minute = this._dateValue.getMinutes();
-            if (minute < 10)
-              minute = "0" + minute;
-
-            var second = this._dateValue.getSeconds();
-            if (second < 10)
-              second = "0" + second;
-            return this._dateValue.getHours() + ":" + minute + ":" + second;
-          ]]>
-        </getter>
-        <setter>
-          <![CDATA[
-            var items = val.match(/^([0-9]{1,2})\:([0-9]{1,2})\:?([0-9]{1,2})?$/);
-            if (!items)
-              throw "Invalid Time";
-
-            var dt = this.dateValue;
-            dt.setHours(items[1]);
-            dt.setMinutes(items[2]);
-            dt.setSeconds(items[3] ? items[3] : 0);
-            this.dateValue = dt;
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="hour" onget="return this._dateValue.getHours();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 0 || valnum > 23)
-              throw "Invalid Hour";
-            this._setFieldValue(this.hourField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="minute" onget="return this._dateValue.getMinutes();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 0 || valnum > 59)
-              throw "Invalid Minute";
-            this._setFieldValue(this.minuteField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="second" onget="return this._dateValue.getSeconds();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 0 || valnum > 59)
-              throw "Invalid Second";
-            this._setFieldValue(this.secondField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="isPM">
-        <getter>
-          <![CDATA[
-            return (this.hour >= 12);
-          ]]>
-        </getter>
-        <setter>
-          <![CDATA[
-            if (val) {
-              if (this.hour < 12)
-                this.hour += 12;
-            } else if (this.hour >= 12)
-              this.hour -= 12;
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="hideSeconds">
-        <getter>
-          return (this.getAttribute("hideseconds") == "true");
-        </getter>
-        <setter>
-          if (val)
-            this.setAttribute("hideseconds", "true");
-          else
-            this.removeAttribute("hideseconds");
-          if (this.secondField)
-            this.secondField.parentNode.collapsed = val;
-          this._separatorSecond.collapsed = val;
-          return val;
-        </setter>
-      </property>
-      <property name="increment">
-        <getter>
-          <![CDATA[
-            var increment = this.getAttribute("increment");
-            increment = Number(increment);
-            if (isNaN(increment) || increment <= 0 || increment >= 60)
-              return 1;
-            return increment;
-          ]]>
-        </getter>
-        <setter>
-          <![CDATA[
-            if (typeof val == "number")
-              this.setAttribute("increment", val);
-            return val;
-          ]]>
-        </setter>
-      </property>
-
-      <method name="_setValueNoSync">
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            var dt = new Date(aValue);
-            if (!isNaN(dt)) {
-              this._dateValue = dt;
-              this.setAttribute("value", this.value);
-              this._updateUI(this.hourField, this.hour);
-              this._updateUI(this.minuteField, this.minute);
-              this._updateUI(this.secondField, this.second);
-            }
-          ]]>
-        </body>
-      </method>
-      <method name="_increaseOrDecrease">
-        <parameter name="aDir"/>
-        <body>
-          <![CDATA[
-            if (this.disabled || this.readOnly)
-              return;
-
-            var field = this._currentField;
-            if (this._valueEntered)
-              this._setValueOnChange(field);
-
-            if (field == this._fieldAMPM) {
-              this.isPM = !this.isPM;
-              this._fireEvent("change", this);
-            } else {
-              var oldval;
-              var change = aDir;
-              if (field == this.hourField) {
-                oldval = this.hour;
-              } else if (field == this.minuteField) {
-                oldval = this.minute;
-                change *= this.increment;
-              } else if (field == this.secondField) {
-                oldval = this.second;
-              }
-
-              var newval = this._constrainValue(field, oldval + change, false);
-
-              if (field == this.hourField)
-                this.hour = newval;
-              else if (field == this.minuteField)
-                this.minute = newval;
-              else if (field == this.secondField)
-                this.second = newval;
-
-              if (oldval != newval)
-                this._fireEvent("change", this);
-            }
-            field.select();
-          ]]>
-        </body>
-      </method>
-      <method name="_setFieldValue">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            if (aField == this.hourField)
-              this._dateValue.setHours(aValue);
-            else if (aField == this.minuteField)
-              this._dateValue.setMinutes(aValue);
-            else if (aField == this.secondField)
-              this._dateValue.setSeconds(aValue);
-
-            this.setAttribute("value", this.value);
-            this._updateUI(aField, aValue);
-
-            if (this.attachedControl)
-              this.attachedControl._setValueNoSync(this._dateValue);
-          ]]>
-        </body>
-      </method>
-      <method name="_updateUI">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            this._valueEntered = false;
-
-            var prependZero = false;
-            if (aField == this.hourField) {
-              prependZero = this.hourLeadingZero;
-              if (!this.is24HourClock) {
-                if (aValue >= 12) {
-                  if (aValue > 12)
-                    aValue -= 12;
-                  this._fieldAMPM.value = this.pmIndicator;
-                } else {
-                  if (aValue == 0)
-                    aValue = 12;
-                  this._fieldAMPM.value = this.amIndicator;
-                }
-              }
-            } else if (aField == this.minuteField) {
-              prependZero = this.minuteLeadingZero;
-            } else if (aField == this.secondField) {
-              prependZero = this.secondLeadingZero;
-            }
-
-            if (prependZero && aValue < 10)
-              aField.value = "0" + aValue;
-            else
-              aField.value = aValue;
-          ]]>
-        </body>
-      </method>
-      <method name="_constrainValue">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <parameter name="aNoWrap"/>
-        <body>
-          <![CDATA[
-            // aNoWrap is true when the user entered a value, so just
-            // constrain within limits. If false, the value is being
-            // incremented or decremented, so wrap around values
-            var max = (aField == this.hourField) ? 24 : 60;
-            if (aValue < 0)
-              return aNoWrap ? 0 : max + aValue;
-            if (aValue >= max)
-              return aNoWrap ? max - 1 : aValue - max;
-            return aValue;
-          ]]>
-        </body>
-      </method>
-      <method name="_init">
-        <body>
-          <![CDATA[
-            this.hourField = this._fieldOne;
-            this.minuteField = this._fieldTwo;
-            this.secondField = this._fieldThree;
-
-            var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
-
-            var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory-nu-latn";
-
-            var pmTime = new Date(2000, 0, 1, 16, 7, 9).toLocaleTimeString(locale);
-            var numberFields = pmTime.match(numberOrder);
-            if (numberFields) {
-              this._separatorFirst.value = numberFields[3];
-              this._separatorSecond.value = numberFields[5];
-              if (Number(numberFields[2]) > 12)
-                this.is24HourClock = true;
-              else
-                this.pmIndicator = numberFields[1] || numberFields[7];
-            }
-
-            var amTime = new Date(2000, 0, 1, 1, 7, 9).toLocaleTimeString(locale);
-            numberFields = amTime.match(numberOrder);
-            if (numberFields) {
-              this.hourLeadingZero = (numberFields[2].length > 1);
-              this.minuteLeadingZero = (numberFields[4].length > 1);
-              this.secondLeadingZero = (numberFields[6].length > 1);
-
-              if (!this.is24HourClock) {
-                this.amIndicator = numberFields[1] || numberFields[7];
-                if (numberFields[1]) {
-                  var mfield = this._fieldAMPM.parentNode;
-                  var mcontainer = mfield.parentNode;
-                  mcontainer.insertBefore(mfield, mcontainer.firstChild);
-                }
-                var size = (numberFields[1] || numberFields[7]).length;
-                if (this.pmIndicator.length > size)
-                  size = this.pmIndicator.length;
-                this._fieldAMPM.size = size;
-                this._fieldAMPM.maxLength = size;
-              } else {
-                this._fieldAMPM.parentNode.collapsed = true;
-              }
-            }
-
-            this.hideSeconds = this.hideSeconds;
-          ]]>
-        </body>
-      </method>
-    </implementation>
-
-    <handlers>
-      <handler event="keypress">
-        <![CDATA[
-          // just allow any printable character to switch the AM/PM state
-          if (event.charCode && !this.disabled && !this.readOnly &&
-              this._currentField == this._fieldAMPM) {
-            this.isPM = !this.isPM;
-            this._fieldAMPM.select();
-            this._fireEvent("change", this);
-            event.preventDefault();
-          }
-        ]]>
-      </handler>
-    </handlers>
-
-  </binding>
-
-  <binding id="datepicker"
-           extends="chrome://global/content/bindings/datetimepicker.xml#datetimepicker-base">
-
-    <implementation>
-      <field name="yearLeadingZero">false</field>
-      <field name="monthLeadingZero">true</field>
-      <field name="dateLeadingZero">true</field>
-
-      <field name="yearField"/>
-      <field name="monthField"/>
-      <field name="dateField"/>
-
-      <property name="value">
-        <getter>
-          <![CDATA[
-            var month = this._dateValue.getMonth();
-            month = (month < 9) ? month = "0" + ++month : month + 1;
-
-            var date = this._dateValue.getDate();
-            if (date < 10)
-              date = "0" + date;
-            return this._dateValue.getFullYear() + "-" + month + "-" + date;
-          ]]>
-
-        </getter>
-        <setter>
-          <![CDATA[
-            var results = val.match(/^([0-9]{1,4})\-([0-9]{1,2})\-([0-9]{1,2})$/);
-            if (!results)
-              throw "Invalid Date";
-
-            this.dateValue = new Date(results[1] + "/" + results[2] + "/" + results[3]);
-            this.setAttribute("value", this.value);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="year" onget="return this._dateValue.getFullYear();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 1 || valnum > 9999)
-              throw "Invalid Year";
-            this._setFieldValue(this.yearField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="month" onget="return this._dateValue.getMonth();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 0 || valnum > 11)
-              throw "Invalid Month";
-            this._setFieldValue(this.monthField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="date" onget="return this._dateValue.getDate();">
-        <setter>
-          <![CDATA[
-            var valnum = Number(val);
-            if (isNaN(valnum) || valnum < 1 || valnum > 31)
-              throw "Invalid Date";
-            this._setFieldValue(this.dateField, valnum);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="open" onget="return false;" onset="return val;"/>
-
-      <property name="displayedMonth" onget="return this.month;"
-                onset="this.month = val; return val;"/>
-      <property name="displayedYear" onget="return this.year;"
-                onset="this.year = val; return val;"/>
-
-      <method name="_setValueNoSync">
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            var dt = new Date(aValue);
-            if (!isNaN(dt)) {
-              this._dateValue = dt;
-              this.setAttribute("value", this.value);
-              this._updateUI(this.yearField, this.year);
-              this._updateUI(this.monthField, this.month);
-              this._updateUI(this.dateField, this.date);
-            }
-          ]]>
-        </body>
-      </method>
-      <method name="_increaseOrDecrease">
-        <parameter name="aDir"/>
-        <body>
-          <![CDATA[
-            if (this.disabled || this.readOnly)
-              return;
-
-            var field = this._currentField;
-            if (this._valueEntered)
-              this._setValueOnChange(field);
-
-            var oldval;
-            if (field == this.yearField)
-              oldval = this.year;
-            else if (field == this.monthField)
-              oldval = this.month;
-            else if (field == this.dateField)
-              oldval = this.date;
-
-            var newval = this._constrainValue(field, oldval + aDir, false);
-
-            if (field == this.yearField)
-              this.year = newval;
-            else if (field == this.monthField)
-              this.month = newval;
-            else if (field == this.dateField)
-              this.date = newval;
-
-            if (oldval != newval)
-              this._fireEvent("change", this);
-            field.select();
-          ]]>
-        </body>
-      </method>
-      <method name="_setFieldValue">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            if (aField == this.yearField) {
-              let oldDate = this.date;
-              this._dateValue.setFullYear(aValue);
-              if (oldDate != this.date) {
-                this._dateValue.setDate(0);
-                this._updateUI(this.dateField, this.date);
-              }
-            } else if (aField == this.monthField) {
-              let oldDate = this.date;
-              this._dateValue.setMonth(aValue);
-              if (oldDate != this.date) {
-                this._dateValue.setDate(0);
-                this._updateUI(this.dateField, this.date);
-              }
-            } else if (aField == this.dateField) {
-              this._dateValue.setDate(aValue);
-            }
-
-            this.setAttribute("value", this.value);
-            this._updateUI(aField, aValue);
-
-            if (this.attachedControl)
-              this.attachedControl._setValueNoSync(this._dateValue);
-          ]]>
-        </body>
-      </method>
-      <method name="_updateUI">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            this._valueEntered = false;
-
-            var prependZero = false;
-            if (aField == this.yearField) {
-              if (this.yearLeadingZero) {
-                aField.value = ("000" + aValue).slice(-4);
-                return;
-              }
-            } else if (aField == this.monthField) {
-              aValue++;
-              prependZero = this.monthLeadingZero;
-            } else if (aField == this.dateField) {
-              prependZero = this.dateLeadingZero;
-            }
-            if (prependZero && aValue < 10)
-              aField.value = "0" + aValue;
-            else
-              aField.value = aValue;
-          ]]>
-        </body>
-      </method>
-      <method name="_constrainValue">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <parameter name="aNoWrap"/>
-        <body>
-          <![CDATA[
-            // the month will be 1 to 12 if entered by the user, so subtract 1
-            if (aNoWrap && aField == this.monthField)
-              aValue--;
-
-            if (aField == this.dateField) {
-              if (aValue < 1)
-                return new Date(this.year, this.month + 1, 0).getDate();
-
-              var currentMonth = this.month;
-              var dt = new Date(this.year, currentMonth, aValue);
-              return (dt.getMonth() != currentMonth ? 1 : aValue);
-            }
-            var min = (aField == this.monthField) ? 0 : 1;
-            var max = (aField == this.monthField) ? 11 : 9999;
-            if (aValue < min)
-              return aNoWrap ? min : max;
-            if (aValue > max)
-              return aNoWrap ? max : min;
-            return aValue;
-          ]]>
-        </body>
-      </method>
-      <method name="_init">
-        <body>
-          <![CDATA[
-            // We'll default to YYYY/MM/DD to start.
-            var yfield = "input-one";
-            var mfield = "input-two";
-            var dfield = "input-three";
-            var twoDigitYear = false;
-            this.yearLeadingZero = true;
-            this.monthLeadingZero = true;
-            this.dateLeadingZero = true;
-
-            var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
-
-            var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory-nu-latn";
-
-            var dt = new Date(2002, 9, 4).toLocaleDateString(locale);
-            var numberFields = dt.match(numberOrder);
-            if (numberFields) {
-              this._separatorFirst.value = numberFields[3];
-              this._separatorSecond.value = numberFields[5];
-
-              var yi = 2, mi = 4, di = 6;
-
-              function fieldForNumber(i) {
-                if (i == 2)
-                  return "input-one";
-                if (i == 4)
-                  return "input-two";
-                return "input-three";
-              }
-
-              for (var i = 1; i < numberFields.length; i++) {
-                switch (Number(numberFields[i])) {
-                  case 2:
-                    twoDigitYear = true; // fall through
-                  case 2002:
-                    yi = i;
-                    yfield = fieldForNumber(i);
-                    break;
-                  case 9, 10:
-                    mi = i;
-                    mfield = fieldForNumber(i);
-                    break;
-                  case 4:
-                    di = i;
-                    dfield = fieldForNumber(i);
-                    break;
-                }
-              }
-
-              this.yearLeadingZero = (numberFields[yi].length > 1);
-              this.monthLeadingZero = (numberFields[mi].length > 1);
-              this.dateLeadingZero = (numberFields[di].length > 1);
-            }
-
-            this.yearField = document.getAnonymousElementByAttribute(this, "anonid", yfield);
-            if (!twoDigitYear)
-              this.yearField.parentNode.classList.add("datetimepicker-input-subbox", "datetimepicker-year");
-            this.monthField = document.getAnonymousElementByAttribute(this, "anonid", mfield);
-            this.dateField = document.getAnonymousElementByAttribute(this, "anonid", dfield);
-
-            this._fieldAMPM.parentNode.collapsed = true;
-            this.yearField.size = twoDigitYear ? 2 : 4;
-            this.yearField.maxLength = twoDigitYear ? 2 : 4;
-          ]]>
-        </body>
-      </method>
-    </implementation>
-
-  </binding>
-
-  <binding id="datepicker-grid"
-           extends="chrome://global/content/bindings/datetimepicker.xml#datepicker">
-
-    <content>
-      <vbox class="datepicker-mainbox"
-            xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-        <hbox class="datepicker-monthbox" align="center">
-          <button class="datepicker-previous datepicker-button" type="repeat"
-                  xbl:inherits="disabled"
-                  oncommand="document.getBindingParent(this)._increaseOrDecreaseMonth(-1);"/>
-          <spacer flex="1"/>
-          <deck anonid="monthlabeldeck">
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-            <label class="datepicker-gridlabel" value=""/>
-          </deck>
-          <label anonid="yearlabel" class="datepicker-gridlabel"/>
-          <spacer flex="1"/>
-          <button class="datepicker-next datepicker-button" type="repeat"
-                  xbl:inherits="disabled"
-                  oncommand="document.getBindingParent(this)._increaseOrDecreaseMonth(1);"/>
-        </hbox>
-        <grid class="datepicker-grid" role="grid">
-          <columns>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-            <column class="datepicker-gridrow" flex="1"/>
-          </columns>
-          <rows anonid="datebox">
-            <row anonid="dayofweekbox">
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-              <label class="datepicker-weeklabel" role="columnheader"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-            <row>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-              <label class="datepicker-gridlabel" role="gridcell"/>
-            </row>
-          </rows>
-        </grid>
-      </vbox>
-    </content>
-
-    <implementation>
-      <field name="_hasEntry">false</field>
-      <field name="_weekStart">&firstdayofweek.default;</field>
-      <field name="_displayedDate">null</field>
-      <field name="_todayItem">null</field>
-
-      <field name="yearField">
-        document.getAnonymousElementByAttribute(this, "anonid", "yearlabel");
-      </field>
-      <field name="monthField">
-        document.getAnonymousElementByAttribute(this, "anonid", "monthlabeldeck");
-      </field>
-      <field name="dateField">
-        document.getAnonymousElementByAttribute(this, "anonid", "datebox");
-      </field>
-
-      <field name="_selectedItem">null</field>
-
-      <property name="selectedItem" onget="return this._selectedItem">
-        <setter>
-          <![CDATA[
-            if (!val.value)
-              return val;
-            if (val.parentNode.parentNode != this.dateField)
-              return val;
-
-            if (this._selectedItem)
-              this._selectedItem.removeAttribute("selected");
-            this._selectedItem = val;
-            val.setAttribute("selected", "true");
-            this._displayedDate.setDate(val.value);
-            return val;
-          ]]>
-        </setter>
-      </property>
-
-      <property name="displayedMonth">
-        <getter>
-          return this._displayedDate.getMonth();
-        </getter>
-        <setter>
-          this._updateUI(this.monthField, val, true);
-          return val;
-        </setter>
-      </property>
-      <property name="displayedYear">
-        <getter>
-          return this._displayedDate.getFullYear();
-        </getter>
-        <setter>
-          this._updateUI(this.yearField, val, true);
-          return val;
-        </setter>
-      </property>
-
-      <method name="_init">
-        <body>
-          <![CDATA[
-            var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory";
-            var dtfMonth = Intl.DateTimeFormat(locale, {month: "long", timeZone: "UTC"});
-            var dtfWeekday = Intl.DateTimeFormat(locale, {weekday: "narrow"});
-
-            var monthLabel = this.monthField.firstChild;
-            var tempDate = new Date(Date.UTC(2005, 0, 1));
-            for (var month = 0; month < 12; month++) {
-              tempDate.setUTCMonth(month);
-              monthLabel.setAttribute("value", dtfMonth.format(tempDate));
-              monthLabel = monthLabel.nextSibling;
-            }
-
-            var fdow = Number(this.getAttribute("firstdayofweek"));
-            if (!isNaN(fdow) && fdow >= 0 && fdow <= 6)
-              this._weekStart = fdow;
-
-            var weekbox = document.getAnonymousElementByAttribute(this, "anonid", "dayofweekbox").childNodes;
-            var date = new Date();
-            date.setDate(date.getDate() - (date.getDay() - this._weekStart));
-            for (var i = 0; i < weekbox.length; i++) {
-              weekbox[i].value = dtfWeekday.format(date);
-              date.setDate(date.getDate() + 1);
-            }
-          ]]>
-        </body>
-      </method>
-      <method name="_setValueNoSync">
-        <parameter name="aValue"/>
-        <body>
-          <![CDATA[
-            var dt = new Date(aValue);
-            if (!isNaN(dt)) {
-              this._dateValue = dt;
-              this.setAttribute("value", this.value);
-              this._updateUI();
-            }
-          ]]>
-        </body>
-      </method>
-      <method name="_updateUI">
-        <parameter name="aField"/>
-        <parameter name="aValue"/>
-        <parameter name="aCheckMonth"/>
-        <body>
-          <![CDATA[
-            var date;
-            var currentMonth;
-            if (aCheckMonth) {
-              if (!this._displayedDate)
-                this._displayedDate = this.dateValue;
-
-              var expectedMonth = aValue;
-              if (aField == this.monthField) {
-                this._displayedDate.setMonth(aValue);
-              } else {
-                expectedMonth = this._displayedDate.getMonth();
-                this._displayedDate.setFullYear(aValue);
-              }
-
-              if (expectedMonth != -1 && expectedMonth != 12 &&
-                  expectedMonth != this._displayedDate.getMonth()) {
-                // If the month isn't what was expected, then the month overflowed.
-                // Setting the date to 0 will go back to the last day of the right month.
-                this._displayedDate.setDate(0);
-              }
-
-              date = new Date(this._displayedDate);
-              currentMonth = this._displayedDate.getMonth();
-            } else {
-              var samemonth = (this._displayedDate &&
-                               this._displayedDate.getMonth() == this.month &&
-                               this._displayedDate.getFullYear() == this.year);
-              if (samemonth) {
-                var items = this.dateField.getElementsByAttribute("value", this.date);
-                if (items.length)
-                  this.selectedItem = items[0];
-                return;
-              }
-
-              date = this.dateValue;
-              this._displayedDate = new Date(date);
-              currentMonth = this.month;
-            }
-
-            if (this._todayItem) {
-              this._todayItem.removeAttribute("today");
-              this._todayItem = null;
-            }
-
-            if (this._selectedItem) {
-              this._selectedItem.removeAttribute("selected");
-              this._selectedItem = null;
-            }
-
-            // Update the month and year title
-            this.monthField.selectedIndex = currentMonth;
-            this.yearField.setAttribute("value", date.getFullYear());
-
-            date.setDate(1);
-            var firstWeekday = (7 + date.getDay() - this._weekStart) % 7;
-            date.setDate(date.getDate() - firstWeekday);
-
-            var today = new Date();
-            var datebox = this.dateField;
-            for (var k = 1; k < datebox.childNodes.length; k++) {
-              var row = datebox.childNodes[k];
-              for (var i = 0; i < 7; i++) {
-                var item = row.childNodes[i];
-
-                if (currentMonth == date.getMonth()) {
-                  item.value = date.getDate();
-
-                  // highlight today
-                  if (this._isSameDay(today, date)) {
-                    this._todayItem = item;
-                    item.setAttribute("today", "true");
-                  }
-
-                  // highlight the selected date
-                  if (this._isSameDay(this._dateValue, date)) {
-                    this._selectedItem = item;
-                    item.setAttribute("selected", "true");
-                  }
-                } else {
-                  item.value = "";
-                }
-
-                date.setDate(date.getDate() + 1);
-              }
-            }
-
-            this._fireEvent("monthchange", this);
-          ]]>
-        </body>
-      </method>
-      <method name="_increaseOrDecreaseDateFromEvent">
-        <parameter name="aEvent"/>
-        <parameter name="aDiff"/>
-        <body>
-          <![CDATA[
-            if (aEvent.originalTarget == this && !this.disabled && !this.readOnly) {
-              var newdate = this.dateValue;
-              newdate.setDate(newdate.getDate() + aDiff);
-              this.dateValue = newdate;
-              this._fireEvent("change", this);
-            }
-            aEvent.stopPropagation();
-            aEvent.preventDefault();
-          ]]>
-        </body>
-      </method>
-      <method name="_increaseOrDecreaseMonth">
-        <parameter name="aDir"/>
-        <body>
-          <![CDATA[
-            if (!this.disabled) {
-              var month = this._displayedDate ? this._displayedDate.getMonth() :
-                                                this.month;
-              this._updateUI(this.monthField, month + aDir, true);
-            }
-          ]]>
-        </body>
-      </method>
-      <method name="_isSameDay">
-        <parameter name="aDate1"/>
-        <parameter name="aDate2"/>
-        <body>
-          <![CDATA[
-            return (aDate1 && aDate2 &&
-                    aDate1.getDate() == aDate2.getDate() &&
-                    aDate1.getMonth() == aDate2.getMonth() &&
-                    aDate1.getFullYear() == aDate2.getFullYear());
-          ]]>
-        </body>
-      </method>
-
-    </implementation>
-
-    <handlers>
-      <handler event="click">
-        <![CDATA[
-          if (event.button != 0 || this.disabled || this.readOnly)
-            return;
-
-          var target = event.originalTarget;
-          if (target.classList.contains("datepicker-gridlabel") &&
-              target != this.selectedItem) {
-            this.selectedItem = target;
-            this._dateValue = new Date(this._displayedDate);
-            if (this.attachedControl)
-              this.attachedControl._setValueNoSync(this._dateValue);
-            this._fireEvent("change", this);
-
-            if (this.attachedControl && "open" in this.attachedControl)
-              this.attachedControl.open = false; // close the popup
-          }
-        ]]>
-      </handler>
-      <handler event="MozMousePixelScroll" preventdefault="true"/>
-      <handler event="DOMMouseScroll" preventdefault="true">
-        <![CDATA[
-          this._increaseOrDecreaseMonth(event.detail < 0 ? -1 : 1);
-        ]]>
-      </handler>
-      <handler event="keypress" keycode="VK_LEFT"
-               action="this._increaseOrDecreaseDateFromEvent(event, -1);"/>
-      <handler event="keypress" keycode="VK_RIGHT"
-               action="this._increaseOrDecreaseDateFromEvent(event, 1);"/>
-      <handler event="keypress" keycode="VK_UP"
-               action="this._increaseOrDecreaseDateFromEvent(event, -7);"/>
-      <handler event="keypress" keycode="VK_DOWN"
-               action="this._increaseOrDecreaseDateFromEvent(event, 7);"/>
-      <handler event="keypress" keycode="VK_PAGE_UP" preventdefault="true"
-               action="this._increaseOrDecreaseMonth(-1);"/>
-      <handler event="keypress" keycode="VK_PAGE_DOWN" preventdefault="true"
-               action="this._increaseOrDecreaseMonth(1);"/>
-    </handlers>
-  </binding>
-
-  <binding id="datepicker-popup" display="xul:menu"
-           extends="chrome://global/content/bindings/datetimepicker.xml#datepicker">
-    <content align="center">
-      <xul:hbox class="textbox-input-box datetimepicker-input-box" align="center"
-                allowevents="true" xbl:inherits="context,disabled,readonly">
-        <xul:hbox class="datetimepicker-input-subbox" align="baseline">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-one"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:label anonid="sep-first" class="datetimepicker-separator" value=":"/>
-        <xul:hbox class="datetimepicker-input-subbox" align="baseline">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-two"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:label anonid="sep-second" class="datetimepicker-separator" value=":"/>
-        <xul:hbox class="datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-three"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-        <xul:hbox class="datetimepicker-input-subbox" align="center">
-          <html:input class="datetimepicker-input textbox-input" anonid="input-ampm"
-                      size="2" maxlength="2"
-                      xbl:inherits="disabled,readonly"/>
-        </xul:hbox>
-      </xul:hbox>
-      <xul:spinbuttons anonid="buttons" xbl:inherits="disabled" allowevents="true"
-                       onup="this.parentNode._increaseOrDecrease(1);"
-                       ondown="this.parentNode._increaseOrDecrease(-1);"/>
-      <xul:dropmarker class="datepicker-dropmarker" xbl:inherits="disabled"/>
-      <xul:panel onpopupshown="this.firstChild.focus();" level="top">
-        <xul:datepicker anonid="grid" type="grid" class="datepicker-popupgrid"
-                        xbl:inherits="disabled,readonly,firstdayofweek"/>
-      </xul:panel>
-    </content>
-    <implementation>
-      <constructor>
-        var grid = document.getAnonymousElementByAttribute(this, "anonid", "grid");
-        this.attachedControl = grid;
-        grid.attachedControl = this;
-        grid._setValueNoSync(this._dateValue);
-      </constructor>
-      <property name="open" onget="return this.hasAttribute('open');">
-        <setter>
-          <![CDATA[
-            if (this.boxObject instanceof MenuBoxObject)
-              this.boxObject.openMenu(val);
-            return val;
-          ]]>
-        </setter>
-      </property>
-      <property name="displayedMonth">
-        <getter>
-          return document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedMonth;
-        </getter>
-        <setter>
-          document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedMonth = val;
-          return val;
-        </setter>
-      </property>
-      <property name="displayedYear">
-        <getter>
-          return document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedYear;
-        </getter>
-        <setter>
-          document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedYear = val;
-          return val;
-        </setter>
-      </property>
-    </implementation>
-  </binding>
-
-</bindings>
--- a/toolkit/content/xul.css
+++ b/toolkit/content/xul.css
@@ -1022,34 +1022,16 @@ richlistbox {
 richlistitem {
   -moz-binding: url('chrome://global/content/bindings/richlistbox.xml#richlistitem');
 }
 
 richlistbox > listheader {
   -moz-box-ordinal-group: 1;
 }
 
-/********** datepicker and timepicker ********/
-
-datepicker {
-  -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#datepicker');
-}
-
-datepicker[type="popup"] {
-  -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#datepicker-popup');
-}
-
-datepicker[type="grid"] {
-  -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#datepicker-grid');
-}
-
-timepicker {
-  -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#timepicker');
-}
-
 
 /*********** findbar ************/
 findbar {
   -moz-binding: url('chrome://global/content/bindings/findbar.xml#findbar');
   overflow-x: hidden;
 }
 
 .findbar-textbox {
deleted file mode 100644
--- a/toolkit/locales/en-US/chrome/global/datetimepicker.dtd
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- 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/. -->
-
-<!-- first day of week to display in datepicker, a value from 0 to 6,
-     0 = Sunday, 1 = Monday, etc. -->
-<!ENTITY firstdayofweek.default "0">
--- a/toolkit/locales/jar.mn
+++ b/toolkit/locales/jar.mn
@@ -34,17 +34,16 @@
   locale/@AB_CD@/global/config.dtd                      (%chrome/global/config.dtd)
   locale/@AB_CD@/global/config.properties               (%chrome/global/config.properties)
   locale/@AB_CD@/global/contentAreaCommands.properties  (%chrome/global/contentAreaCommands.properties)
 #ifndef MOZ_FENNEC
   locale/@AB_CD@/global/customizeToolbar.dtd            (%chrome/global/customizeToolbar.dtd)
   locale/@AB_CD@/global/customizeToolbar.properties     (%chrome/global/customizeToolbar.properties)
 #endif
   locale/@AB_CD@/global/datetimebox.dtd                 (%chrome/global/datetimebox.dtd)
-  locale/@AB_CD@/global/datetimepicker.dtd              (%chrome/global/datetimepicker.dtd)
   locale/@AB_CD@/global/dialogOverlay.dtd               (%chrome/global/dialogOverlay.dtd)
 #ifndef MOZ_FENNEC
   locale/@AB_CD@/global/editMenuOverlay.dtd             (%chrome/global/editMenuOverlay.dtd)
 #endif
   locale/@AB_CD@/global/extensions.properties           (%chrome/global/extensions.properties)
   locale/@AB_CD@/global/fallbackMenubar.properties      (%chrome/global/fallbackMenubar.properties)
   locale/@AB_CD@/global/filefield.properties            (%chrome/global/filefield.properties)
 #ifdef MOZ_GTK
deleted file mode 100644
index 3367bde3123df49622ac6e93bb3af8db110fe0e5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c5c362d89b19dadd509869efa700a2dedcbffa3e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5010921adc6cdd64d5d2a489ac8f989e5127d40c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/toolkit/themes/osx/global/datetimepicker.css
+++ /dev/null
@@ -1,126 +0,0 @@
-/* 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/. */
-
-@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-@namespace html url("http://www.w3.org/1999/xhtml");
-
-datepicker, timepicker {
-  padding: 0 0 1px;
-  margin: 4px;
-  border: none;
-}
-
-.datetimepicker-input-box {
-  -moz-appearance: textfield;
-  cursor: text;
-  margin-right: 4px;
-  margin-bottom: 2px;
-  border: 3px solid;
-  -moz-border-top-colors: transparent #888888 #000000;
-  -moz-border-right-colors: transparent #FFFFFF #000000;
-  -moz-border-bottom-colors: transparent #FFFFFF #000000;
-  -moz-border-left-colors: transparent #888888 #000000;
-  border-top-right-radius: 2px;
-  border-bottom-left-radius: 2px;
-  padding: 0px;
-  background-color: -moz-Field;
-  color: -moz-FieldText;
-}
-
-.datetimepicker-input-subbox {
-  width: 1.6em;
-}
-
-html|*.datetimepicker-input {
-  text-align: end;
-}
-
-.datetimepicker-separator {
-  margin: 0 !important;
-}
-
-.datetimepicker-year {
-  width: 3.2em;
-}
-
-.datepicker-dropmarker {
-  margin-bottom: 2px;
-}
-
-datepicker[readonly="true"],
-timepicker[readonly="true"] {
-  background-color: -moz-Dialog;
-  color: -moz-DialogText;
-}
-
-datepicker[disabled="true"],
-timepicker[disabled="true"] {
-  cursor: default;
-  -moz-border-top-colors: transparent ThreeDShadow -moz-Dialog;
-  -moz-border-right-colors: transparent ThreeDShadow -moz-Dialog;
-  -moz-border-bottom-colors: transparent ThreeDShadow -moz-Dialog;
-  -moz-border-left-colors: transparent ThreeDShadow -moz-Dialog;
-  background-color: -moz-Dialog;
-  color: GrayText;
-} 
-
-.datepicker-mainbox {
-  margin: 2px 4px;
-  border: 2px solid;
-  -moz-border-top-colors: ThreeDShadow ThreeDDarkShadow;
-  -moz-border-right-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
-  background-color: #EEEEEE;
-  color: -moz-DialogText;
-}
-
-.datepicker-popupgrid > .datepicker-mainbox {
-  margin: 0;
-  border: none;
-}
-
-.datepicker-gridlabel, .datepicker-weeklabel {
-  text-align: center;
-}
-
-.datepicker-gridlabel[today="true"] {
-  background-color: darkgrey;
-  color: white;
-}
-
-.datepicker-gridlabel[selected="true"] {
-  background-color: Highlight;
-  color: HighlightText;
-}
-
-.datepicker-button {
-  -moz-appearance: none;
-  min-width: 8px;
-  padding: 0px;
-}
-
-.datepicker-previous {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft.gif");
-}
-
-.datepicker-next {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit.gif");
-}
-
-.datepicker-previous:hover {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-hov.gif");
-}
-
-.datepicker-next:hover {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-hov.gif");
-}
-
-.datepicker-previous[disabled="true"] {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-dis.gif");
-}
-
-.datepicker-next[disabled="true"] {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-dis.gif");
-}
--- a/toolkit/themes/osx/global/jar.mn
+++ b/toolkit/themes/osx/global/jar.mn
@@ -31,33 +31,29 @@ toolkit.jar:
   skin/classic/global/richlistbox.css
   skin/classic/global/scrollbars.css                                 (nativescrollbars.css)
   skin/classic/global/scrollbox.css
   skin/classic/global/spinbuttons.css
   skin/classic/global/splitter.css
   skin/classic/global/tabprompts.css
   skin/classic/global/tabbox.css
   skin/classic/global/textbox.css
-  skin/classic/global/datetimepicker.css
   skin/classic/global/toolbar.css
   skin/classic/global/toolbarbutton.css
 * skin/classic/global/tree.css
   skin/classic/global/wizard.css
 * skin/classic/global/alerts/alert.css                               (alerts/alert.css)
   skin/classic/global/arrow/arrow-dn-dis.gif                         (arrow/arrow-dn-dis.gif)
   skin/classic/global/arrow/arrow-dn-dis.png                         (arrow/arrow-dn-dis.png)
   skin/classic/global/arrow/arrow-dn-sharp.gif                       (arrow/arrow-dn-sharp.gif)
   skin/classic/global/arrow/arrow-dn.gif                             (arrow/arrow-dn.gif)
   skin/classic/global/arrow/arrow-dn.png                             (arrow/arrow-dn.png)
   skin/classic/global/arrow/arrow-lft-dis.gif                        (arrow/arrow-lft-dis.gif)
-  skin/classic/global/arrow/arrow-lft-hov.gif                        (arrow/arrow-lft-hov.gif)
   skin/classic/global/arrow/arrow-lft-sharp.gif                      (arrow/arrow-lft-sharp.gif)
-  skin/classic/global/arrow/arrow-lft.gif                            (arrow/arrow-lft.gif)
   skin/classic/global/arrow/arrow-rit-dis.gif                        (arrow/arrow-rit-dis.gif)
-  skin/classic/global/arrow/arrow-rit-hov.gif                        (arrow/arrow-rit-hov.gif)
   skin/classic/global/arrow/arrow-rit-sharp.gif                      (arrow/arrow-rit-sharp.gif)
   skin/classic/global/arrow/arrow-rit.gif                            (arrow/arrow-rit.gif)
   skin/classic/global/arrow/arrow-up-dis.gif                         (arrow/arrow-up-dis.gif)
   skin/classic/global/arrow/arrow-up-sharp.gif                       (arrow/arrow-up-sharp.gif)
   skin/classic/global/arrow/arrow-up.gif                             (arrow/arrow-up.gif)
   skin/classic/global/arrow/panelarrow-horizontal.svg                (arrow/panelarrow-horizontal.svg)
   skin/classic/global/arrow/panelarrow-vertical.svg                  (arrow/panelarrow-vertical.svg)
   skin/classic/global/checkbox/cbox-check.gif                        (checkbox/cbox-check.gif)
--- a/toolkit/themes/shared/non-mac.jar.inc.mn
+++ b/toolkit/themes/shared/non-mac.jar.inc.mn
@@ -6,33 +6,28 @@
 # by the shared jar manifest, which in turn is included by the os-specific
 # manifests.
 # As a result, the source file paths are relative to the location of the
 # actual manifests.
 
 #include jar.inc.mn
 
   skin/classic/global/customizeToolbar.css                 (../../windows/global/customizeToolbar.css)
-  skin/classic/global/datetimepicker.css                   (../../windows/global/datetimepicker.css)
   skin/classic/global/dialog.css                           (../../windows/global/dialog.css)
   skin/classic/global/filefield.css                        (../../windows/global/filefield.css)
   skin/classic/global/progressmeter.css                    (../../windows/global/progressmeter.css)
   skin/classic/global/resizer.css                          (../../windows/global/resizer.css)
   skin/classic/global/richlistbox.css                      (../../windows/global/richlistbox.css)
   skin/classic/global/scrollbars.css                       (../../windows/global/xulscrollbars.css)
   skin/classic/global/spinbuttons.css                      (../../windows/global/spinbuttons.css)
   skin/classic/global/tabprompts.css                       (../../windows/global/tabprompts.css)
   skin/classic/global/wizard.css                           (../../windows/global/wizard.css)
 
   skin/classic/global/arrow/arrow-dn.gif                   (../../windows/global/arrow/arrow-dn.gif)
   skin/classic/global/arrow/arrow-dn-dis.gif               (../../windows/global/arrow/arrow-dn-dis.gif)
-  skin/classic/global/arrow/arrow-lft.gif                  (../../windows/global/arrow/arrow-lft.gif)
-  skin/classic/global/arrow/arrow-lft-dis.gif              (../../windows/global/arrow/arrow-lft-dis.gif)
-  skin/classic/global/arrow/arrow-rit.gif                  (../../windows/global/arrow/arrow-rit.gif)
-  skin/classic/global/arrow/arrow-rit-dis.gif              (../../windows/global/arrow/arrow-rit-dis.gif)
   skin/classic/global/arrow/arrow-up.gif                   (../../windows/global/arrow/arrow-up.gif)
   skin/classic/global/arrow/arrow-up-dis.gif               (../../windows/global/arrow/arrow-up-dis.gif)
   skin/classic/global/arrow/panelarrow-horizontal.svg      (../../windows/global/arrow/panelarrow-horizontal.svg)
   skin/classic/global/arrow/panelarrow-vertical.svg        (../../windows/global/arrow/panelarrow-vertical.svg)
 
 * skin/classic/global/dirListing/dirListing.css            (../../windows/global/dirListing/dirListing.css)
   skin/classic/global/icons/error-16.png                   (../../windows/global/icons/error-16.png)
   skin/classic/global/icons/question-16.png                (../../windows/global/icons/question-16.png)
@@ -67,11 +62,9 @@
   skin/classic/mozapps/update/downloadButtons.png            (../../windows/mozapps/update/downloadButtons.png)
 * skin/classic/mozapps/xpinstall/xpinstallConfirm.css        (../../windows/mozapps/extensions/xpinstallConfirm.css)
 
 #if MOZ_BUILD_APP == browser
 [browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
 #elif MOZ_SEPARATE_MANIFEST_FOR_THEME_OVERRIDES
 [extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
 #endif
-% override chrome://global/skin/arrow/arrow-lft-hov.gif           chrome://global/skin/arrow/arrow-lft.gif
-% override chrome://global/skin/arrow/arrow-rit-hov.gif           chrome://global/skin/arrow/arrow-rit.gif
 % override chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png       chrome://mozapps/skin/extensions/extensionGeneric.svg
deleted file mode 100644
--- a/toolkit/themes/windows/global/datetimepicker.css
+++ /dev/null
@@ -1,147 +0,0 @@
-/* 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/. */
-
-/* ===== datetimepicker.css =============================================
-  == Styles used by the XUL datepicker and timepicker elements.
-  ======================================================================= */
-  
-@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-@namespace html url("http://www.w3.org/1999/xhtml");
-
-datepicker, timepicker {
-  margin: 2px 4px;
-  padding: 0;
-  border: none;
-  background: none;
-  cursor: default;
-}
-
-.datetimepicker-input-box {
-  -moz-appearance: textfield;
-  cursor: text;
-  margin-inline-end: 2px;
-  border: 2px solid;
-  -moz-border-top-colors: ThreeDShadow ThreeDDarkShadow;
-  -moz-border-right-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
-  padding: 2px 0 3px 0;
-  padding-inline-start: 4px;
-  padding-inline-end: 2px;
-  background-color: -moz-Field;
-  color: -moz-FieldText;
-}
-
-.datetimepicker-input-subbox {
-  width: 1.6em;
-}
-
-html|*.datetimepicker-input {
-  text-align: end;
-}
-
-.datetimepicker-separator {
-  margin: 0 !important;
-}
-
-.datetimepicker-year {
-  width: 3.2em;
-}
-
-datepicker[readonly="true"],
-timepicker[readonly="true"] {
-  background-color: -moz-Dialog;
-  color: -moz-DialogText;
-}
-
-datepicker[disabled="true"],
-timepicker[disabled="true"] {
-  cursor: default;
-  background-color: -moz-Dialog;
-  color: GrayText;
-} 
-
-.datepicker-mainbox {
-  margin: 2px 4px;
-  border: 2px solid;
-  -moz-border-top-colors: ThreeDShadow ThreeDDarkShadow;
-  -moz-border-right-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
-  -moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
-  background-color: -moz-Field;
-  color: -moz-FieldText;
-}
-
-.datepicker-popupgrid > .datepicker-mainbox {
-  margin: 0;
-  border: none;
-}
-
-.datepicker-gridlabel, .datepicker-weeklabel {
-  text-align: center;
-}
-
-.datepicker-gridlabel[today="true"] {
-  background-color: darkgrey;
-  color: white;
-}
-
-.datepicker-gridlabel[selected="true"] {
-  background-color: Highlight;
-  color: HighlightText;
-}
-
-.datepicker-button {
-  -moz-appearance: none;
-  min-width: 8px;
-  padding: 0px;
-}
-
-.datepicker-previous {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft.gif");
-}
-
-.datepicker-next {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit.gif");
-}
-
-.datepicker-previous:hover {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-hov.gif");
-}
-
-.datepicker-next:hover {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-hov.gif");
-}
-
-.datepicker-previous[disabled="true"] {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-dis.gif");
-}
-
-.datepicker-next[disabled="true"] {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-dis.gif");
-}
-
-.datepicker-previous:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit.gif");
-}
-
-.datepicker-next:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft.gif");
-}
-
-.datepicker-previous:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-hov.gif");
-}
-
-.datepicker-next:-moz-locale-dir(rtl):hover {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-hov.gif");
-}
-
-.datepicker-previous[disabled="true"]:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://global/skin/arrow/arrow-rit-dis.gif");
-}
-
-.datepicker-next[disabled="true"]:-moz-locale-dir(rtl) {
-  list-style-image: url("chrome://global/skin/arrow/arrow-lft-dis.gif");
-}
--- a/toolkit/themes/windows/global/jar.mn
+++ b/toolkit/themes/windows/global/jar.mn
@@ -27,16 +27,20 @@ toolkit.jar:
   skin/classic/global/printPageSetup.css
   skin/classic/global/printPreview.css
   skin/classic/global/scrollbox.css
   skin/classic/global/splitter.css
   skin/classic/global/toolbar.css
   skin/classic/global/toolbarbutton.css
 * skin/classic/global/tree.css
 * skin/classic/global/alerts/alert.css                     (alerts/alert.css)
+  skin/classic/global/arrow/arrow-lft.gif                  (arrow/arrow-lft.gif)
+  skin/classic/global/arrow/arrow-lft-dis.gif              (arrow/arrow-lft-dis.gif)
+  skin/classic/global/arrow/arrow-rit.gif                  (arrow/arrow-rit.gif)
+  skin/classic/global/arrow/arrow-rit-dis.gif              (arrow/arrow-rit-dis.gif)
   skin/classic/global/dirListing/folder.png                (dirListing/folder.png)
   skin/classic/global/dirListing/up.png                    (dirListing/up.png)
   skin/classic/global/icons/blacklist_favicon.png          (icons/blacklist_favicon.png)
   skin/classic/global/icons/blacklist_large.png            (icons/blacklist_large.png)
   skin/classic/global/icons/Error.png                      (icons/Error.png)
   skin/classic/global/icons/collapse.png                   (icons/collapse.png)
   skin/classic/global/icons/expand.png                     (icons/expand.png)
   skin/classic/global/icons/folder-item.png                (icons/folder-item.png)
@@ -49,18 +53,18 @@ toolkit.jar:
   skin/classic/global/icons/resizer.png                    (icons/resizer.png)
   skin/classic/global/icons/sslWarning.png                 (icons/sslWarning.png)
   skin/classic/global/icons/Warning.png                    (icons/Warning.png)
   skin/classic/global/icons/warning-large.png              (icons/warning-large.png)
   skin/classic/global/icons/windowControls.png             (icons/windowControls.png)
 * skin/classic/global/in-content/common.css                (in-content/common.css)
 * skin/classic/global/in-content/info-pages.css            (in-content/info-pages.css)
   skin/classic/global/toolbar/spring.png                   (toolbar/spring.png)
-  skin/classic/global/tree/twisty.svg                            (tree/twisty.svg)
-  skin/classic/global/tree/twisty-preWin10.svg                   (tree/twisty-preWin10.svg)
+  skin/classic/global/tree/twisty.svg                      (tree/twisty.svg)
+  skin/classic/global/tree/twisty-preWin10.svg             (tree/twisty-preWin10.svg)
 
 #if MOZ_BUILD_APP == browser
 [browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
 #elif MOZ_SEPARATE_MANIFEST_FOR_THEME_OVERRIDES
 [extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
 #endif
 
 % override chrome://global/skin/tree/twisty.svg#clsd              chrome://global/skin/tree/twisty-preWin10.svg#clsd           osversion<=6.3