diff --git a/application/palemoon/components/migration/nsIEHistoryEnumerator.cpp b/application/palemoon/components/migration/nsIEHistoryEnumerator.cpp index 77ec2e8520..0b377d27e9 100644 --- a/application/palemoon/components/migration/nsIEHistoryEnumerator.cpp +++ b/application/palemoon/components/migration/nsIEHistoryEnumerator.cpp @@ -7,36 +7,13 @@ #include #include -#include "nsStringAPI.h" -#include "nsNetUtil.h" -#include "nsIVariant.h" -#include "nsCOMArray.h" #include "nsArrayEnumerator.h" - -namespace { - - PRTime FileTimeToPRTime(FILETIME* filetime) - { - SYSTEMTIME st; - ::FileTimeToSystemTime(filetime, &st); - PRExplodedTime prt; - prt.tm_year = st.wYear; - // SYSTEMTIME's day-of-month parameter is 1-based, - // PRExplodedTime's is 0-based. - prt.tm_month = st.wMonth - 1; - prt.tm_mday = st.wDay; - prt.tm_hour = st.wHour; - prt.tm_min = st.wMinute; - prt.tm_sec = st.wSecond; - prt.tm_usec = st.wMilliseconds * 1000; - prt.tm_wday = 0; - prt.tm_yday = 0; - prt.tm_params.tp_gmt_offset = 0; - prt.tm_params.tp_dst_offset = 0; - return PR_ImplodeTime(&prt); - } - -} // Anonymous namespace. +#include "nsCOMArray.h" +#include "nsIVariant.h" +#include "nsNetUtil.h" +#include "nsStringAPI.h" +#include "nsWindowsMigrationUtils.h" +#include "prtime.h" //////////////////////////////////////////////////////////////////////////////// //// nsIEHistoryEnumerator @@ -103,16 +80,19 @@ nsIEHistoryEnumerator::HasMoreElements(bool* _retval) } } - nsDependentString title(statURL.pwcsTitle); + nsDependentString title(statURL.pwcsTitle ? statURL.pwcsTitle : L""); - PRTime lastVisited = FileTimeToPRTime(&(statURL.ftLastVisited)); + bool lastVisitTimeIsValid; + PRTime lastVisited = WinMigrationFileTimeToPRTime(&(statURL.ftLastVisited), &lastVisitTimeIsValid); mCachedNextEntry = do_CreateInstance("@mozilla.org/hash-property-bag;1"); MOZ_ASSERT(mCachedNextEntry, "Should have instanced a new property bag"); if (mCachedNextEntry) { mCachedNextEntry->SetPropertyAsInterface(NS_LITERAL_STRING("uri"), uri); mCachedNextEntry->SetPropertyAsAString(NS_LITERAL_STRING("title"), title); - mCachedNextEntry->SetPropertyAsInt64(NS_LITERAL_STRING("time"), lastVisited); + if (lastVisitTimeIsValid) { + mCachedNextEntry->SetPropertyAsInt64(NS_LITERAL_STRING("time"), lastVisited); + } *_retval = true; } diff --git a/application/palemoon/components/migration/nsIEHistoryEnumerator.h b/application/palemoon/components/migration/nsIEHistoryEnumerator.h index 7d4f8b7629..1572a8dd5b 100644 --- a/application/palemoon/components/migration/nsIEHistoryEnumerator.h +++ b/application/palemoon/components/migration/nsIEHistoryEnumerator.h @@ -8,9 +8,9 @@ #include #include "mozilla/Attributes.h" +#include "nsCOMPtr.h" #include "nsISimpleEnumerator.h" #include "nsIWritablePropertyBag2.h" -#include "nsAutoPtr.h" class nsIEHistoryEnumerator final : public nsISimpleEnumerator { @@ -28,8 +28,8 @@ private: */ void EnsureInitialized(); - nsRefPtr mIEHistory; - nsRefPtr mURLEnumerator; + RefPtr mIEHistory; + RefPtr mURLEnumerator; nsCOMPtr mCachedNextEntry; }; diff --git a/application/palemoon/components/migration/nsWindowsMigrationUtils.h b/application/palemoon/components/migration/nsWindowsMigrationUtils.h new file mode 100644 index 0000000000..0288d93d39 --- /dev/null +++ b/application/palemoon/components/migration/nsWindowsMigrationUtils.h @@ -0,0 +1,36 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef windowsmigrationutils__h__ +#define windowsmigrationutils__h__ + +#include "prtime.h" + +static +PRTime WinMigrationFileTimeToPRTime(FILETIME* filetime, bool* isValid) +{ + SYSTEMTIME st; + *isValid = ::FileTimeToSystemTime(filetime, &st); + if (!*isValid) { + return 0; + } + PRExplodedTime prt; + prt.tm_year = st.wYear; + // SYSTEMTIME's day-of-month parameter is 1-based, + // PRExplodedTime's is 0-based. + prt.tm_month = st.wMonth - 1; + prt.tm_mday = st.wDay; + prt.tm_hour = st.wHour; + prt.tm_min = st.wMinute; + prt.tm_sec = st.wSecond; + prt.tm_usec = st.wMilliseconds * 1000; + prt.tm_wday = 0; + prt.tm_yday = 0; + prt.tm_params.tp_gmt_offset = 0; + prt.tm_params.tp_dst_offset = 0; + return PR_ImplodeTime(&prt); +} + +#endif +