// Copyright 2014 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. #ifndef CONTENT_BROWSER_TIME_ZONE_MONITOR_H_ #define CONTENT_BROWSER_TIME_ZONE_MONITOR_H_ #include "base/macros.h" #include "base/memory/scoped_ptr.h" namespace content { // TimeZoneMonitor watches the system time zone, and notifies renderers // when it changes. Some renderer code caches the system time zone, so // this notification is necessary to inform such code that cached // timezone data may have become invalid. Due to sandboxing, it is not // possible for renderer processes to monitor for system time zone // changes themselves, so this must happen in the browser process. // // Sandboxing also may prevent renderer processes from reading the time // zone when it does change, so platforms may have to deal with this in // platform-specific ways: // - Mac uses a sandbox hole defined in content/renderer/renderer.sb. // - Linux-based platforms use ProxyLocaltimeCallToBrowser in // content/zygote/zygote_main_linux.cc and HandleLocaltime in // content/browser/renderer_host/sandbox_ipc_linux.cc to override // localtime in renderer processes with custom code that calls // localtime in the browser process via Chrome IPC. class TimeZoneMonitor { public: // Returns a new TimeZoneMonitor object (likely a subclass) specific to the // platform. static scoped_ptr Create(); virtual ~TimeZoneMonitor(); protected: TimeZoneMonitor(); // Loop over all renderers and notify them that the system time zone may // have changed. void NotifyRenderers(); private: DISALLOW_COPY_AND_ASSIGN(TimeZoneMonitor); }; } // namespace content #endif // CONTENT_BROWSER_TIME_ZONE_MONITOR_H_