Commit 148db9c5 authored by David Dorwin's avatar David Dorwin Committed by Commit Bot

[fuchsia] Use ICU for Exploded Time

Add an ICU-based implementation of time_exploded, removing the use of
the POSIX implementation and thus the use of fuchsia.deprecatedtimezone.

Bug: 985946
Test: base/time/ unit tests
Change-Id: I91440ecae48684717b6fdcfe5f7ef66028b079c6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1949776
Commit-Queue: David Dorwin <ddorwin@chromium.org>
Reviewed-by: default avatarYuchen Liu <yucliu@chromium.org>
Reviewed-by: default avatarWez <wez@chromium.org>
Reviewed-by: default avatarYuri Wiitala <miu@chromium.org>
Reviewed-by: default avatarSergey Ulanov <sergeyu@chromium.org>
Reviewed-by: default avatarWill Harris <wfh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#721897}
parent 06d22377
...@@ -1594,7 +1594,7 @@ jumbo_component("base") { ...@@ -1594,7 +1594,7 @@ jumbo_component("base") {
"threading/platform_thread_posix.cc", "threading/platform_thread_posix.cc",
"threading/thread_local_storage_posix.cc", "threading/thread_local_storage_posix.cc",
"time/time_conversion_posix.cc", "time/time_conversion_posix.cc",
"time/time_exploded_posix.cc", "time/time_exploded_icu.cc",
"time/time_fuchsia.cc", "time/time_fuchsia.cc",
"timer/hi_res_timer_manager_posix.cc", "timer/hi_res_timer_manager_posix.cc",
] ]
...@@ -1616,11 +1616,11 @@ jumbo_component("base") { ...@@ -1616,11 +1616,11 @@ jumbo_component("base") {
"//third_party/fuchsia-sdk/sdk:async-loop-cpp", "//third_party/fuchsia-sdk/sdk:async-loop-cpp",
"//third_party/fuchsia-sdk/sdk:async-loop-default", "//third_party/fuchsia-sdk/sdk:async-loop-default",
"//third_party/fuchsia-sdk/sdk:fidl", "//third_party/fuchsia-sdk/sdk:fidl",
"//third_party/fuchsia-sdk/sdk:fuchsia-deprecatedtimezone",
"//third_party/fuchsia-sdk/sdk:fuchsia-intl", "//third_party/fuchsia-sdk/sdk:fuchsia-intl",
"//third_party/fuchsia-sdk/sdk:fuchsia-sys", "//third_party/fuchsia-sdk/sdk:fuchsia-sys",
"//third_party/fuchsia-sdk/sdk:syslog", "//third_party/fuchsia-sdk/sdk:syslog",
"//third_party/fuchsia-sdk/sdk:vfs_cpp", "//third_party/fuchsia-sdk/sdk:vfs_cpp",
"//third_party/icu",
] ]
} }
......
...@@ -315,6 +315,38 @@ bool Time::ExplodedMostlyEquals(const Exploded& lhs, const Exploded& rhs) { ...@@ -315,6 +315,38 @@ bool Time::ExplodedMostlyEquals(const Exploded& lhs, const Exploded& rhs) {
lhs.millisecond == rhs.millisecond; lhs.millisecond == rhs.millisecond;
} }
// static
bool Time::FromMillisecondsSinceUnixEpoch(int64_t unix_milliseconds,
Time* time) {
// Adjust the provided time from milliseconds since the Unix epoch (1970) to
// microseconds since the Windows epoch (1601), avoiding overflows.
base::CheckedNumeric<int64_t> checked_microseconds_win_epoch =
unix_milliseconds;
checked_microseconds_win_epoch *= kMicrosecondsPerMillisecond;
checked_microseconds_win_epoch += kTimeTToMicrosecondsOffset;
if (!checked_microseconds_win_epoch.IsValid()) {
*time = base::Time(0);
return false;
}
*time = Time(checked_microseconds_win_epoch.ValueOrDie());
return true;
}
int64_t Time::ToRoundedDownMillisecondsSinceUnixEpoch() const {
// Adjust from Windows epoch (1601) to Unix epoch (1970).
int64_t microseconds = us_ - kTimeTToMicrosecondsOffset;
// Round the microseconds towards -infinity.
if (microseconds >= 0) {
// In this case, rounding towards -infinity means rounding towards 0.
return microseconds / kMicrosecondsPerMillisecond;
} else {
return (microseconds - kMicrosecondsPerMillisecond + 1) /
kMicrosecondsPerMillisecond;
}
}
std::ostream& operator<<(std::ostream& os, Time time) { std::ostream& operator<<(std::ostream& os, Time time) {
Time::Exploded exploded; Time::Exploded exploded;
time.UTCExplode(&exploded); time.UTCExplode(&exploded);
......
...@@ -488,6 +488,7 @@ inline constexpr TimeClass operator+(TimeDelta delta, TimeClass t) { ...@@ -488,6 +488,7 @@ inline constexpr TimeClass operator+(TimeDelta delta, TimeClass t) {
// Represents a wall clock time in UTC. Values are not guaranteed to be // Represents a wall clock time in UTC. Values are not guaranteed to be
// monotonically non-decreasing and are subject to large amounts of skew. // monotonically non-decreasing and are subject to large amounts of skew.
// Time is stored internally as microseconds since the Windows epoch (1601).
class BASE_EXPORT Time : public time_internal::TimeBase<Time> { class BASE_EXPORT Time : public time_internal::TimeBase<Time> {
public: public:
// Offset of UNIX epoch (1970-01-01 00:00:00 UTC) from Windows FILETIME epoch // Offset of UNIX epoch (1970-01-01 00:00:00 UTC) from Windows FILETIME epoch
...@@ -736,7 +737,8 @@ class BASE_EXPORT Time : public time_internal::TimeBase<Time> { ...@@ -736,7 +737,8 @@ class BASE_EXPORT Time : public time_internal::TimeBase<Time> {
private: private:
friend class time_internal::TimeBase<Time>; friend class time_internal::TimeBase<Time>;
constexpr explicit Time(int64_t us) : TimeBase(us) {} constexpr explicit Time(int64_t microseconds_since_win_epoch)
: TimeBase(microseconds_since_win_epoch) {}
// Explodes the given time to either local time |is_local = true| or UTC // Explodes the given time to either local time |is_local = true| or UTC
// |is_local = false|. // |is_local = false|.
...@@ -768,6 +770,15 @@ class BASE_EXPORT Time : public time_internal::TimeBase<Time> { ...@@ -768,6 +770,15 @@ class BASE_EXPORT Time : public time_internal::TimeBase<Time> {
// Comparison does not consider |day_of_week| when doing the operation. // Comparison does not consider |day_of_week| when doing the operation.
static bool ExplodedMostlyEquals(const Exploded& lhs, static bool ExplodedMostlyEquals(const Exploded& lhs,
const Exploded& rhs) WARN_UNUSED_RESULT; const Exploded& rhs) WARN_UNUSED_RESULT;
// Converts the provided time in milliseconds since the Unix epoch (1970) to a
// Time object, avoiding overflows.
static bool FromMillisecondsSinceUnixEpoch(int64_t unix_milliseconds,
Time* time) WARN_UNUSED_RESULT;
// Returns the milliseconds since the Unix epoch (1970), rounding the
// microseconds towards -infinity.
int64_t ToRoundedDownMillisecondsSinceUnixEpoch() const;
}; };
// static // static
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/time/time.h"
#include <memory>
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "third_party/icu/source/i18n/unicode/calendar.h"
#include "third_party/icu/source/i18n/unicode/timezone.h"
namespace base {
static_assert(
sizeof(Time::Exploded::year) == sizeof(int32_t),
"The sizes of Time::Exploded members and ICU date fields do not match.");
namespace {
// Returns a new icu::Calendar instance for the local time zone if |is_local|
// and for GMT otherwise. Returns null on error.
std::unique_ptr<icu::Calendar> CreateCalendar(bool is_local) {
UErrorCode status = U_ZERO_ERROR;
std::unique_ptr<icu::Calendar> calendar =
base::WrapUnique(is_local ? icu::Calendar::createInstance(status)
: icu::Calendar::createInstance(
*icu::TimeZone::getGMT(), status));
CHECK(U_SUCCESS(status));
return calendar;
}
} // namespace
void Time::Explode(bool is_local, Exploded* exploded) const {
std::unique_ptr<icu::Calendar> calendar = CreateCalendar(is_local);
UErrorCode status = U_ZERO_ERROR;
calendar->setTime(ToRoundedDownMillisecondsSinceUnixEpoch(), status);
DCHECK(U_SUCCESS(status));
exploded->year = calendar->get(UCAL_YEAR, status);
DCHECK(U_SUCCESS(status));
// ICU's UCalendarMonths is 0-based. E.g., 0 for January.
exploded->month = calendar->get(UCAL_MONTH, status) + 1;
DCHECK(U_SUCCESS(status));
// ICU's UCalendarDaysOfWeek is 1-based. E.g., 1 for Sunday.
exploded->day_of_week = calendar->get(UCAL_DAY_OF_WEEK, status) - 1;
DCHECK(U_SUCCESS(status));
exploded->day_of_month = calendar->get(UCAL_DAY_OF_MONTH, status);
DCHECK(U_SUCCESS(status));
exploded->hour = calendar->get(UCAL_HOUR_OF_DAY, status);
DCHECK(U_SUCCESS(status));
exploded->minute = calendar->get(UCAL_MINUTE, status);
DCHECK(U_SUCCESS(status));
exploded->second = calendar->get(UCAL_SECOND, status);
DCHECK(U_SUCCESS(status));
exploded->millisecond = calendar->get(UCAL_MILLISECOND, status);
DCHECK(U_SUCCESS(status));
}
// static
bool Time::FromExploded(bool is_local, const Exploded& exploded, Time* time) {
// ICU's UCalendarMonths is 0-based. E.g., 0 for January.
CheckedNumeric<int> month = exploded.month;
month--;
if (!month.IsValid()) {
*time = Time(0);
return false;
}
std::unique_ptr<icu::Calendar> calendar = CreateCalendar(is_local);
// Cause getTime() to report an error if invalid dates, such as the 31st day
// of February, are specified.
calendar->setLenient(false);
calendar->set(exploded.year, month.ValueOrDie(), exploded.day_of_month,
exploded.hour, exploded.minute, exploded.second);
calendar->set(UCAL_MILLISECOND, exploded.millisecond);
// Ignore exploded.day_of_week
UErrorCode status = U_ZERO_ERROR;
UDate date = calendar->getTime(status);
if (U_FAILURE(status)) {
*time = Time(0);
return false;
}
return FromMillisecondsSinceUnixEpoch(date, time);
}
} // namespace base
...@@ -24,29 +24,18 @@ ...@@ -24,29 +24,18 @@
#include "base/os_compat_nacl.h" #include "base/os_compat_nacl.h"
#endif #endif
#if defined(OS_FUCHSIA)
#include <fuchsia/deprecatedtimezone/cpp/fidl.h>
#include <lib/sys/cpp/component_context.h>
#include "base/fuchsia/default_context.h"
#include "base/fuchsia/fuchsia_logging.h"
#include "base/no_destructor.h"
#include "base/numerics/clamped_math.h"
#endif
#if defined(OS_MACOSX) || defined(OS_IOS) #if defined(OS_MACOSX) || defined(OS_IOS)
static_assert(sizeof(time_t) >= 8, "Y2038 problem!"); static_assert(sizeof(time_t) >= 8, "Y2038 problem!");
#endif #endif
namespace { namespace {
#if !defined(OS_FUCHSIA)
// This prevents a crash on traversing the environment global and looking up // This prevents a crash on traversing the environment global and looking up
// the 'TZ' variable in libc. See: crbug.com/390567. // the 'TZ' variable in libc. See: crbug.com/390567.
base::Lock* GetSysTimeToTimeStructLock() { base::Lock* GetSysTimeToTimeStructLock() {
static auto* lock = new base::Lock(); static auto* lock = new base::Lock();
return lock; return lock;
} }
#endif // !defined(OS_FUCHSIA)
// Define a system-specific SysTime that wraps either to a time_t or // Define a system-specific SysTime that wraps either to a time_t or
// a time64_t depending on the host system, and associated convertion. // a time64_t depending on the host system, and associated convertion.
...@@ -69,78 +58,7 @@ void SysTimeToTimeStruct(SysTime t, struct tm* timestruct, bool is_local) { ...@@ -69,78 +58,7 @@ void SysTimeToTimeStruct(SysTime t, struct tm* timestruct, bool is_local) {
else else
gmtime64_r(&t, timestruct); gmtime64_r(&t, timestruct);
} }
#elif defined(OS_FUCHSIA)
typedef time_t SysTime;
fuchsia::deprecatedtimezone::TimezoneSyncPtr ConnectTimeZoneServiceSync() {
fuchsia::deprecatedtimezone::TimezoneSyncPtr timezone;
base::fuchsia::ComponentContextForCurrentProcess()->svc()->Connect(
timezone.NewRequest());
return timezone;
}
SysTime GetTimezoneOffset(SysTime utc_time) {
static base::NoDestructor<fuchsia::deprecatedtimezone::TimezoneSyncPtr>
timezone(ConnectTimeZoneServiceSync());
int64_t milliseconds_since_epoch =
base::ClampMul(utc_time, base::Time::kMillisecondsPerSecond);
int32_t local_offset_minutes = 0;
int32_t dst_offset_minutes = 0;
zx_status_t status = (*timezone.get())
->GetTimezoneOffsetMinutes(milliseconds_since_epoch,
&local_offset_minutes,
&dst_offset_minutes);
if (status != ZX_OK) {
ZX_DLOG(ERROR, status) << "Failed to get current timezone offset.";
return 0;
}
return (local_offset_minutes + dst_offset_minutes) *
base::Time::kSecondsPerMinute;
}
SysTime SysTimeFromTimeStruct(struct tm* timestruct, bool is_local) {
SysTime result = timegm(timestruct);
if (is_local) {
// Local->UTC conversion may be ambiguous, particularly when local clock is
// changed back (e.g. in when DST ends). In such cases there are 2 correct
// results and this function will return one of them. Also some local time
// values may be invalid. Specifically when local time is rolled forward
// (when DST starts) the values in the transitional period are invalid and
// don't have corresponding values in the UTC timeline. In those cases using
// timezone offset either before or after transition is acceptable.
//
// fuchsia::deprecatedtimezone API returns offset based on UTC time. It may
// return incorrect result when called with a value that also includes
// timezone offset. Particularly this is a problem when the time is close to
// DST transitions. For example, when transitioning from PST (UTC-8,
// non-DST) to PDT (UTC-7, DST) GetTimezoneOffset(local_time) will return a
// value that's off by 1 hour for 8 hours after the transition. To avoid
// this problem the offset is estimated as GetTimezoneOffset(local_time)
// from which |approx_utc_time| is calculated. Then
// GetTimezoneOffset(approx_utc_time) is used to calculate the actual
// offset. This works correctly assuming timezone transition can happen at
// most once per day. When both before and after offsets are in the [-1H,
// 1H] range then the |approx_utc_time| is correct (see the note above for
// definition of what is considered correct). Otherwise |approx_utc_time|
// may be off by 1 hour. In those cases GetTimezoneOffset(approx_utc_time)
// will return correct offset because we can assume there are no timezone
// changes in the [UTC-1H, UTC+1H] period (the transition is scheduled
// either before UTC-1H or after UTC+1H).
int64_t approx_utc_time = result - GetTimezoneOffset(result);
result -= GetTimezoneOffset(approx_utc_time);
}
return result;
}
void SysTimeToTimeStruct(SysTime t, struct tm* timestruct, bool is_local) {
if (is_local)
t += GetTimezoneOffset(t);
gmtime_r(&t, timestruct);
}
#elif defined(OS_AIX) #elif defined(OS_AIX)
// The function timegm is not available on AIX. // The function timegm is not available on AIX.
time_t aix_timegm(struct tm* tm) { time_t aix_timegm(struct tm* tm) {
time_t ret; time_t ret;
...@@ -181,7 +99,7 @@ void SysTimeToTimeStruct(SysTime t, struct tm* timestruct, bool is_local) { ...@@ -181,7 +99,7 @@ void SysTimeToTimeStruct(SysTime t, struct tm* timestruct, bool is_local) {
gmtime_r(&t, timestruct); gmtime_r(&t, timestruct);
} }
#else // OS_ANDROID && !__LP64__ #else
typedef time_t SysTime; typedef time_t SysTime;
SysTime SysTimeFromTimeStruct(struct tm* timestruct, bool is_local) { SysTime SysTimeFromTimeStruct(struct tm* timestruct, bool is_local) {
...@@ -196,30 +114,26 @@ void SysTimeToTimeStruct(SysTime t, struct tm* timestruct, bool is_local) { ...@@ -196,30 +114,26 @@ void SysTimeToTimeStruct(SysTime t, struct tm* timestruct, bool is_local) {
else else
gmtime_r(&t, timestruct); gmtime_r(&t, timestruct);
} }
#endif // OS_ANDROID #endif // defined(OS_ANDROID) && !defined(__LP64__)
} // namespace } // namespace
namespace base { namespace base {
void Time::Explode(bool is_local, Exploded* exploded) const { void Time::Explode(bool is_local, Exploded* exploded) const {
// Time stores times with microsecond resolution, but Exploded only carries
// millisecond resolution, so begin by being lossy. Adjust from Windows
// epoch (1601) to Unix epoch (1970);
int64_t microseconds = us_ - kTimeTToMicrosecondsOffset;
// The following values are all rounded towards -infinity. // The following values are all rounded towards -infinity.
int64_t milliseconds; // Milliseconds since epoch. int64_t milliseconds = ToRoundedDownMillisecondsSinceUnixEpoch();
SysTime seconds; // Seconds since epoch. SysTime seconds; // Seconds since epoch.
int millisecond; // Exploded millisecond value (0-999). int millisecond; // Exploded millisecond value (0-999).
if (microseconds >= 0) {
// If the microseconds were negative, the rounded down milliseconds will also
// be negative. For example, -1 us becomes -1 ms.
if (milliseconds >= 0) {
// Rounding towards -infinity <=> rounding towards 0, in this case. // Rounding towards -infinity <=> rounding towards 0, in this case.
milliseconds = microseconds / kMicrosecondsPerMillisecond;
seconds = milliseconds / kMillisecondsPerSecond; seconds = milliseconds / kMillisecondsPerSecond;
millisecond = milliseconds % kMillisecondsPerSecond; millisecond = milliseconds % kMillisecondsPerSecond;
} else { } else {
// Round these *down* (towards -infinity). // Round these *down* (towards -infinity).
milliseconds = (microseconds - kMicrosecondsPerMillisecond + 1) /
kMicrosecondsPerMillisecond;
seconds = seconds =
(milliseconds - kMillisecondsPerSecond + 1) / kMillisecondsPerSecond; (milliseconds - kMillisecondsPerSecond + 1) / kMillisecondsPerSecond;
// Make this nonnegative (and between 0 and 999 inclusive). // Make this nonnegative (and between 0 and 999 inclusive).
...@@ -336,30 +250,26 @@ bool Time::FromExploded(bool is_local, const Exploded& exploded, Time* time) { ...@@ -336,30 +250,26 @@ bool Time::FromExploded(bool is_local, const Exploded& exploded, Time* time) {
milliseconds += (kMillisecondsPerSecond - 1); milliseconds += (kMillisecondsPerSecond - 1);
} }
} else { } else {
base::CheckedNumeric<int64_t> checked_millis = seconds; CheckedNumeric<int64_t> checked_millis = seconds;
checked_millis *= kMillisecondsPerSecond; checked_millis *= kMillisecondsPerSecond;
checked_millis += exploded.millisecond; checked_millis += exploded.millisecond;
if (!checked_millis.IsValid()) { if (!checked_millis.IsValid()) {
*time = base::Time(0); *time = Time(0);
return false; return false;
} }
milliseconds = checked_millis.ValueOrDie(); milliseconds = checked_millis.ValueOrDie();
} }
// Adjust from Unix (1970) to Windows (1601) epoch avoiding overflows. Time converted_time;
base::CheckedNumeric<int64_t> checked_microseconds_win_epoch = milliseconds; if (!FromMillisecondsSinceUnixEpoch(milliseconds, &converted_time)) {
checked_microseconds_win_epoch *= kMicrosecondsPerMillisecond;
checked_microseconds_win_epoch += kTimeTToMicrosecondsOffset;
if (!checked_microseconds_win_epoch.IsValid()) {
*time = base::Time(0); *time = base::Time(0);
return false; return false;
} }
base::Time converted_time(checked_microseconds_win_epoch.ValueOrDie());
// If |exploded.day_of_month| is set to 31 on a 28-30 day month, it will // If |exploded.day_of_month| is set to 31 on a 28-30 day month, it will
// return the first day of the next month. Thus round-trip the time and // return the first day of the next month. Thus round-trip the time and
// compare the initial |exploded| with |utc_to_exploded| time. // compare the initial |exploded| with |utc_to_exploded| time.
base::Time::Exploded to_exploded; Time::Exploded to_exploded;
if (!is_local) if (!is_local)
converted_time.UTCExplode(&to_exploded); converted_time.UTCExplode(&to_exploded);
else else
......
...@@ -515,6 +515,18 @@ TEST_F(TimeTest, ExplodeBeforeUnixEpoch) { ...@@ -515,6 +515,18 @@ TEST_F(TimeTest, ExplodeBeforeUnixEpoch) {
EXPECT_EQ(59, exploded.second); EXPECT_EQ(59, exploded.second);
EXPECT_EQ(999, exploded.millisecond); EXPECT_EQ(999, exploded.millisecond);
t = Time::UnixEpoch() - TimeDelta::FromMicroseconds(999);
t.UTCExplode(&exploded);
EXPECT_TRUE(exploded.HasValidValues());
// Should be 1969-12-31 23:59:59 999 milliseconds (and 1 microsecond).
EXPECT_EQ(kUnixEpochYear - 1, exploded.year);
EXPECT_EQ(12, exploded.month);
EXPECT_EQ(31, exploded.day_of_month);
EXPECT_EQ(23, exploded.hour);
EXPECT_EQ(59, exploded.minute);
EXPECT_EQ(59, exploded.second);
EXPECT_EQ(999, exploded.millisecond);
t = Time::UnixEpoch() - TimeDelta::FromMicroseconds(1000); t = Time::UnixEpoch() - TimeDelta::FromMicroseconds(1000);
t.UTCExplode(&exploded); t.UTCExplode(&exploded);
EXPECT_TRUE(exploded.HasValidValues()); EXPECT_TRUE(exploded.HasValidValues());
...@@ -588,6 +600,18 @@ TEST_F(TimeTest, ExplodeBeforeUnixEpoch) { ...@@ -588,6 +600,18 @@ TEST_F(TimeTest, ExplodeBeforeUnixEpoch) {
EXPECT_EQ(0, exploded.second); EXPECT_EQ(0, exploded.second);
EXPECT_EQ(0, exploded.millisecond); EXPECT_EQ(0, exploded.millisecond);
t = Time::UnixEpoch() + TimeDelta::FromMicroseconds(999);
t.UTCExplode(&exploded);
EXPECT_TRUE(exploded.HasValidValues());
// Should be 1970-01-01 00:00:00 0 milliseconds (and 999 microseconds).
EXPECT_EQ(kUnixEpochYear, exploded.year);
EXPECT_EQ(1, exploded.month);
EXPECT_EQ(1, exploded.day_of_month);
EXPECT_EQ(0, exploded.hour);
EXPECT_EQ(0, exploded.minute);
EXPECT_EQ(0, exploded.second);
EXPECT_EQ(0, exploded.millisecond);
t = Time::UnixEpoch() + TimeDelta::FromMicroseconds(1000); t = Time::UnixEpoch() + TimeDelta::FromMicroseconds(1000);
t.UTCExplode(&exploded); t.UTCExplode(&exploded);
EXPECT_TRUE(exploded.HasValidValues()); EXPECT_TRUE(exploded.HasValidValues());
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
"services": [ "services": [
"fuchsia.accessibility.semantics.SemanticsManager", "fuchsia.accessibility.semantics.SemanticsManager",
"fuchsia.device.NameProvider", "fuchsia.device.NameProvider",
"fuchsia.deprecatedtimezone.Timezone",
"fuchsia.fonts.Provider", "fuchsia.fonts.Provider",
"fuchsia.intl.PropertyProvider", "fuchsia.intl.PropertyProvider",
"fuchsia.logger.Log", "fuchsia.logger.Log",
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
"services": [ "services": [
"fuchsia.accessibility.semantics.SemanticsManager", "fuchsia.accessibility.semantics.SemanticsManager",
"fuchsia.device.NameProvider", "fuchsia.device.NameProvider",
"fuchsia.deprecatedtimezone.Timezone",
"fuchsia.fonts.Provider", "fuchsia.fonts.Provider",
"fuchsia.intl.PropertyProvider", "fuchsia.intl.PropertyProvider",
"fuchsia.logger.Log", "fuchsia.logger.Log",
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
"fuchsia.accessibility.semantics.SemanticsManager", "fuchsia.accessibility.semantics.SemanticsManager",
"fuchsia.bluetooth.gatt.Server", "fuchsia.bluetooth.gatt.Server",
"fuchsia.bluetooth.le.Peripheral", "fuchsia.bluetooth.le.Peripheral",
"fuchsia.deprecatedtimezone.Timezone",
"fuchsia.device.NameProvider", "fuchsia.device.NameProvider",
"fuchsia.fonts.Provider", "fuchsia.fonts.Provider",
"fuchsia.intl.PropertyProvider", "fuchsia.intl.PropertyProvider",
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
], ],
"services": [ "services": [
"fuchsia.accessibility.semantics.SemanticsManager", "fuchsia.accessibility.semantics.SemanticsManager",
"fuchsia.deprecatedtimezone.Timezone",
"fuchsia.device.NameProvider", "fuchsia.device.NameProvider",
"fuchsia.fonts.Provider", "fuchsia.fonts.Provider",
"fuchsia.intl.PropertyProvider", "fuchsia.intl.PropertyProvider",
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
], ],
"services": [ "services": [
"fuchsia.accessibility.semantics.SemanticsManager", "fuchsia.accessibility.semantics.SemanticsManager",
"fuchsia.deprecatedtimezone.Timezone",
"fuchsia.device.NameProvider", "fuchsia.device.NameProvider",
"fuchsia.fonts.Provider", "fuchsia.fonts.Provider",
"fuchsia.intl.PropertyProvider", "fuchsia.intl.PropertyProvider",
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
"deprecated-ambient-replace-as-executable" "deprecated-ambient-replace-as-executable"
], ],
"services": [ "services": [
"fuchsia.deprecatedtimezone.Timezone",
"fuchsia.device.NameProvider", "fuchsia.device.NameProvider",
"fuchsia.intl.PropertyProvider", "fuchsia.intl.PropertyProvider",
"fuchsia.logger.LogSink", "fuchsia.logger.LogSink",
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
"services": [ "services": [
"chromium.cast.ApplicationConfigManager", "chromium.cast.ApplicationConfigManager",
"fuchsia.accessibility.semantics.SemanticsManager", "fuchsia.accessibility.semantics.SemanticsManager",
"fuchsia.deprecatedtimezone.Timezone",
"fuchsia.device.NameProvider", "fuchsia.device.NameProvider",
"fuchsia.fonts.Provider", "fuchsia.fonts.Provider",
"fuchsia.intl.PropertyProvider", "fuchsia.intl.PropertyProvider",
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
], ],
"services": [ "services": [
"fuchsia.accessibility.semantics.SemanticsManager", "fuchsia.accessibility.semantics.SemanticsManager",
"fuchsia.deprecatedtimezone.Timezone",
"fuchsia.device.NameProvider", "fuchsia.device.NameProvider",
"fuchsia.fonts.Provider", "fuchsia.fonts.Provider",
"fuchsia.intl.PropertyProvider", "fuchsia.intl.PropertyProvider",
......
...@@ -110,7 +110,6 @@ component("sandbox") { ...@@ -110,7 +110,6 @@ component("sandbox") {
] ]
deps += [ deps += [
"//third_party/fuchsia-sdk/sdk:fuchsia-deprecatedtimezone",
"//third_party/fuchsia-sdk/sdk:fuchsia-fonts", "//third_party/fuchsia-sdk/sdk:fuchsia-fonts",
"//third_party/fuchsia-sdk/sdk:fuchsia-intl", "//third_party/fuchsia-sdk/sdk:fuchsia-intl",
"//third_party/fuchsia-sdk/sdk:fuchsia-logger", "//third_party/fuchsia-sdk/sdk:fuchsia-logger",
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include <stdio.h> #include <stdio.h>
#include <zircon/processargs.h> #include <zircon/processargs.h>
#include <fuchsia/deprecatedtimezone/cpp/fidl.h>
#include <fuchsia/fonts/cpp/fidl.h> #include <fuchsia/fonts/cpp/fidl.h>
#include <fuchsia/intl/cpp/fidl.h> #include <fuchsia/intl/cpp/fidl.h>
#include <fuchsia/logger/cpp/fidl.h> #include <fuchsia/logger/cpp/fidl.h>
...@@ -119,8 +118,7 @@ const SandboxConfig& GetConfigForSandboxType(SandboxType type) { ...@@ -119,8 +118,7 @@ const SandboxConfig& GetConfigForSandboxType(SandboxType type) {
// Services that are passed to all processes. // Services that are passed to all processes.
constexpr base::span<const char* const> kDefaultServices = base::make_span( constexpr base::span<const char* const> kDefaultServices = base::make_span(
(const char* const[]){fuchsia::deprecatedtimezone::Timezone::Name_, (const char* const[]){fuchsia::intl::PropertyProvider::Name_,
fuchsia::intl::PropertyProvider::Name_,
fuchsia::logger::LogSink::Name_}); fuchsia::logger::LogSink::Name_});
} // namespace } // namespace
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment