diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-05-05 15:22:25 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-05-05 15:22:44 +0200 |
commit | 4f62685dfa09d64a8fcd2de9ed0adb7fe5747b78 (patch) | |
tree | 9dc9c3ba8ab461f7ee3d444222246be5ed55ae3f | |
parent | 19de26b7efd6b993f2af26cf435f04c716d3f5bc (diff) | |
parent | bb09965444b5bb20b096a291445170876225268d (diff) | |
download | qtwebengine-chromium-4f62685dfa09d64a8fcd2de9ed0adb7fe5747b78.tar.gz |
Merge branch 'upstream-master' into 58-based
Change-Id: I8c280ca9068fdda9cf6276725bfb8608eccb497a
305 files changed, 4600 insertions, 2426 deletions
diff --git a/chromium/DEPS b/chromium/DEPS index ed8160ca2de..9427921e32d 100644 --- a/chromium/DEPS +++ b/chromium/DEPS @@ -10,7 +10,7 @@ vars = { 'buildtools_revision': 'b3771b1935ea74c388b6fb1750e83f5d83b39dec', 'catapult_revision': - '7ef761733d291aabe77a456fe91083a966aa3caa', + '49eb11f63eb4d552d634833a01d2710208ba0523', 'chromium_git': 'https://chromium.googlesource.com', 'devtools_node_modules_revision': @@ -88,7 +88,7 @@ deps = { 'src/third_party/boringssl/src': (Var("boringssl_git")) + '/boringssl.git@be2ee342d3781ddb954f91f8a7e660c6f59e87e5', 'src/third_party/catapult': - (Var("chromium_git")) + '/external/github.com/catapult-project/catapult.git@7ef761733d291aabe77a456fe91083a966aa3caa', + (Var("chromium_git")) + '/external/github.com/catapult-project/catapult.git@49eb11f63eb4d552d634833a01d2710208ba0523', 'src/third_party/ced/src': (Var("chromium_git")) + '/external/github.com/google/compact_enc_det.git@368a9cc09ad868a3d28f0b5ad4a733f263c46409', 'src/third_party/cld_2/src': @@ -110,7 +110,7 @@ deps = { 'src/third_party/hunspell_dictionaries': (Var("chromium_git")) + '/chromium/deps/hunspell_dictionaries.git@dc6e7c25bf47cbfb466e0701fd2728b4a12e79d5', 'src/third_party/icu': - (Var("chromium_git")) + '/chromium/deps/icu.git@450be73c9ee8ae29d43d4fdc82febb2a5f62bfb5', + (Var("chromium_git")) + '/chromium/deps/icu.git@b34251f8b762f8e2112a89c587855ca4297fed96', 'src/third_party/jsoncpp/source': (Var("chromium_git")) + '/external/github.com/open-source-parsers/jsoncpp.git@f572e8e42e22cfcf5ab0aea26574f408943edfa4', 'src/third_party/leveldatabase/src': @@ -138,7 +138,7 @@ deps = { 'src/third_party/openmax_dl': (Var("chromium_git")) + '/external/webrtc/deps/third_party/openmax.git@7acede9c039ea5d14cf326f44aad1245b9e674a7', 'src/third_party/pdfium': - (Var("pdfium_git")) + '/pdfium.git@35e70fb57f9e4093e759d0d35b6d9b8e7800a1a3', + (Var("pdfium_git")) + '/pdfium.git@84213b529908d2b9095ad4c33ecc9fdf5d881df5', 'src/third_party/py_trace_event/src': (Var("chromium_git")) + '/external/py_trace_event.git@dd463ea9e2c430de2b9e53dea57a77b4c3ac9b30', 'src/third_party/pyftpdlib/src': @@ -156,7 +156,7 @@ deps = { 'src/third_party/shaderc/src': (Var("chromium_git")) + '/external/github.com/google/shaderc.git@cd8793c34907073025af2622c28bcee64e9879a4', 'src/third_party/skia': - (Var("skia_git")) + '/skia.git@4a9b4143baed7ab31d426be12c31cb4082014bd5', + (Var("skia_git")) + '/skia.git@4c81ba6ba3a3270db809bf7d4c3bc782694a56a4', 'src/third_party/smhasher/src': (Var("chromium_git")) + '/external/smhasher.git@e87738e57558e0ec472b2fc3a643b838e5b6e88f', 'src/third_party/snappy/src': @@ -174,7 +174,7 @@ deps = { 'src/third_party/webpagereplay': (Var("chromium_git")) + '/external/github.com/chromium/web-page-replay.git@3cd3a3f6f06a1b87b14b9162c7eb16d23d141241', 'src/third_party/webrtc': - (Var("chromium_git")) + '/external/webrtc/trunk/webrtc.git@4c2c314a187d720cfe97e90a1ba22aa1b7073722', + (Var("chromium_git")) + '/external/webrtc/trunk/webrtc.git@05455abfd973173de9f6d8ee9f68d84e6adfaf04', 'src/third_party/yasm/source/patched-yasm': (Var("chromium_git")) + '/chromium/deps/yasm/patched-yasm.git@7da28c6c7c6a1387217352ce02b31754deb54d2a', 'src/tools/gyp': @@ -184,7 +184,7 @@ deps = { 'src/tools/swarming_client': (Var("chromium_git")) + '/external/swarming.client.git@11e31afa5d330756ff87aa12064bb5d032896cb5', 'src/v8': - (Var("chromium_git")) + '/v8/v8.git@3b1d692f748c372fc6655cc673111a70aaaa2a1b' + (Var("chromium_git")) + '/v8/v8.git@2f06375912a79b55603cc75306738101921ce80a' } deps_os = { @@ -1166,12 +1166,12 @@ recursedeps = [ 'src/buildtools', 'src/third_party/android_tools', [ - 'DEPS.chromium', - 'src/third_party/angle' + 'src/third_party/angle', + 'DEPS.chromium' ], [ - 'DEPS', - 'src/third_party/swiftshader' + 'src/third_party/swiftshader', + 'DEPS' ] ] diff --git a/chromium/base/process/launch_win.cc b/chromium/base/process/launch_win.cc index 1349b3e4af3..97b59a5bfe4 100644 --- a/chromium/base/process/launch_win.cc +++ b/chromium/base/process/launch_win.cc @@ -142,7 +142,14 @@ void RouteStdioToConsole(bool create_console_if_not_found) { // _fileno(stdout) will return -2 (_NO_CONSOLE_FILENO) if stdout was // invalid. if (_fileno(stdout) >= 0 || _fileno(stderr) >= 0) { - return; + // _fileno was broken for SUBSYSTEM:WINDOWS from VS2010 to VS2012/2013. + // http://crbug.com/358267. Confirm that the underlying HANDLE is valid + // before aborting. + + intptr_t stdout_handle = _get_osfhandle(_fileno(stdout)); + intptr_t stderr_handle = _get_osfhandle(_fileno(stderr)); + if (stdout_handle >= 0 || stderr_handle >= 0) + return; } if (!AttachConsole(ATTACH_PARENT_PROCESS)) { diff --git a/chromium/build/util/LASTCHANGE b/chromium/build/util/LASTCHANGE index 66d33bd05d2..e87f75f4976 100644 --- a/chromium/build/util/LASTCHANGE +++ b/chromium/build/util/LASTCHANGE @@ -1 +1 @@ -LASTCHANGE=b6d0d62f847dfee64ad286fb135a974a1d3f9491 +LASTCHANGE=c58c69e965fb9b338f7c9417371744b8f6147e83 diff --git a/chromium/build/util/LASTCHANGE.blink b/chromium/build/util/LASTCHANGE.blink index 66d33bd05d2..e87f75f4976 100644 --- a/chromium/build/util/LASTCHANGE.blink +++ b/chromium/build/util/LASTCHANGE.blink @@ -1 +1 @@ -LASTCHANGE=b6d0d62f847dfee64ad286fb135a974a1d3f9491 +LASTCHANGE=c58c69e965fb9b338f7c9417371744b8f6147e83 diff --git a/chromium/cc/output/direct_renderer.cc b/chromium/cc/output/direct_renderer.cc index 77ff41f4027..e4fcf68ca0a 100644 --- a/chromium/cc/output/direct_renderer.cc +++ b/chromium/cc/output/direct_renderer.cc @@ -89,6 +89,10 @@ void DirectRenderer::Initialize() { allow_empty_swap_ = true; if (context_provider->ContextCapabilities().set_draw_rectangle) use_set_draw_rectangle_ = true; + if (context_provider->ContextCapabilities() + .disable_non_empty_post_sub_buffers) { + use_partial_swap_ = false; + } } initialized_ = true; @@ -323,19 +327,8 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order, if (!skip_drawing_root_render_pass && !use_partial_swap_) current_frame()->root_damage_rect = root_render_pass->output_rect; - if (skip_drawing_root_render_pass) { - // If any of the overlays is the output surface, then ensure that the - // backbuffer be allocated (allocation of the backbuffer is a side-effect - // of BindFramebufferToOutputSurface). - for (auto& overlay : current_frame()->overlay_list) { - if (overlay.use_output_surface_for_resource) { - BindFramebufferToOutputSurface(); - break; - } - } - } else { + if (!skip_drawing_root_render_pass) DrawRenderPassAndExecuteCopyRequests(root_render_pass); - } FinishDrawingFrame(); render_passes_in_draw_order->clear(); diff --git a/chromium/cc/output/gl_renderer.cc b/chromium/cc/output/gl_renderer.cc index 2a2ffff1638..cdbde1a9c74 100644 --- a/chromium/cc/output/gl_renderer.cc +++ b/chromium/cc/output/gl_renderer.cc @@ -1001,6 +1001,11 @@ const TileDrawQuad* GLRenderer::CanPassBeDrawnDirectly(const RenderPass* pass) { if (quad->material != DrawQuad::TILED_CONTENT) return nullptr; + // TODO(chrishtr): support could be added for opacity, but care needs + // to be taken to make sure it is correct w.r.t. non-commutative filters etc. + if (quad->shared_quad_state->opacity != 1.0f) + return nullptr; + const TileDrawQuad* tile_quad = TileDrawQuad::MaterialCast(quad); // Hack: this could be supported by passing in a subrectangle to draw // render pass, although in practice if there is only one quad there diff --git a/chromium/cc/output/overlay_unittest.cc b/chromium/cc/output/overlay_unittest.cc index d36d1db3ab9..aa4102d0ceb 100644 --- a/chromium/cc/output/overlay_unittest.cc +++ b/chromium/cc/output/overlay_unittest.cc @@ -1882,7 +1882,7 @@ TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenPartialSwapEnabled) { EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(0); EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); DrawFrame(&pass_list, viewport_size); - EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); + EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); SwapBuffers(); Mock::VerifyAndClearExpectations(renderer_.get()); Mock::VerifyAndClearExpectations(&scheduler_); @@ -1914,7 +1914,7 @@ TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenEmptySwapAllowed) { EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(0); EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); DrawFrame(&pass_list, viewport_size); - EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); + EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); SwapBuffers(); Mock::VerifyAndClearExpectations(renderer_.get()); Mock::VerifyAndClearExpectations(&scheduler_); diff --git a/chromium/chrome/BUILD.gn b/chromium/chrome/BUILD.gn index ce198275894..9c0e2c5cde7 100644 --- a/chromium/chrome/BUILD.gn +++ b/chromium/chrome/BUILD.gn @@ -213,6 +213,11 @@ if (!is_android && !is_mac) { "/DELAYLOAD:ole32.dll", "/DELAYLOAD:oleaut32.dll", ] + + if (current_cpu == "x64") { + # Increase the initial stack size. The default is 1MB, this is 2MB. + ldflags += [ "/STACK:2097152" ] + } } else if (use_aura) { # Non-Windows aura entrypoint. sources += [ "app/chrome_exe_main_aura.cc" ] @@ -531,6 +536,10 @@ if (is_win) { "//chrome/common:version_header", ] + if (is_chrome_branded) { + deps += [ ":chrome_helpers" ] + } + # Remove the default strip configuration (which strips all symbols) so that # a saves file can be specified. if (enable_stripping) { @@ -625,6 +634,18 @@ if (is_win) { ] } + if (is_chrome_branded) { + bundle_data("chrome_helpers") { + sources = [ + "installer/mac/internal/keychain_reauthorizers/$chrome_mac_bundle_id", + ] + + outputs = [ + "{{bundle_root_dir}}/Helpers/{{source_file_part}}", + ] + } + } + bundle_data("chrome_versioned_bundle_data") { sources = [ "$root_out_dir/$chrome_framework_name.framework", diff --git a/chromium/chrome/VERSION b/chromium/chrome/VERSION index 115ac75fed9..22f9518004f 100644 --- a/chromium/chrome/VERSION +++ b/chromium/chrome/VERSION @@ -1,4 +1,4 @@ MAJOR=58 MINOR=0 BUILD=3029 -PATCH=54 +PATCH=98 diff --git a/chromium/chrome/app/resources/chromium_strings_ar.xtb b/chromium/chrome/app/resources/chromium_strings_ar.xtb index fe08640e2e6..8921d80a0f4 100644 --- a/chromium/chrome/app/resources/chromium_strings_ar.xtb +++ b/chromium/chrome/app/resources/chromium_strings_ar.xtb @@ -162,7 +162,7 @@ <translation id="6248213926982192922">جعل Chromium المتصفح الافتراضي</translation> <translation id="6295779123002464101">قد يكون ملف <ph name="FILE_NAME" /> ضارًا، لذلك فقد حظره Chromium.</translation> <translation id="6309712487085796862">يستخدم Chromium الكاميرا.</translation> -<translation id="6333502561965082103">عملية أخرى على Chromium قيد التقدم. الرجاء إعادة المحاولة لاحقًا.</translation> +<translation id="6333502561965082103">عملية أخرى على Chromium قيد التقدم. يُرجى إعادة المحاولة لاحقًا.</translation> <translation id="6334986366598267305">الآن أصبح استخدام Chromium مع حسابك في Google وفي أجهزة الكمبيوتر المشتركة أكثر سهولة.</translation> <translation id="6373523479360886564">هل تريد فعلًا إزالة Chromium؟</translation> <translation id="6394232988457703198">يجب إعادة تشغيل Chromium الآن.</translation> diff --git a/chromium/chrome/app/resources/chromium_strings_id.xtb b/chromium/chrome/app/resources/chromium_strings_id.xtb index a3f4a187b21..6c065bc9c36 100644 --- a/chromium/chrome/app/resources/chromium_strings_id.xtb +++ b/chromium/chrome/app/resources/chromium_strings_id.xtb @@ -31,7 +31,7 @@ <translation id="1967743265616885482">Modul dengan nama yang sama biasanya konflik dengan Chromium.</translation> <translation id="2008474315282236005">Tindakan ini akan menghapus 1 item dari perangkat. Untuk mengambil data nanti, login ke Chromium sebagai <ph name="USER_EMAIL" />.</translation> <translation id="2061399003623151192">{NUM_ITEMS,plural, =1{Tindakan ini akan menghapus setidaknya $1 item dari perangkat ini secara permanen. Untuk mengambil data Anda nanti, masuk ke Chromium sebagai $2.}other{Tindakan ini akan menghapus setidaknya $1 item dari perangkat ini secara permanen. Untuk mengambil data Anda nanti, masuk ke Chromium sebagai $2.}}</translation> -<translation id="2077129598763517140">Gunakan percepatan perangkat keras saat tersedia</translation> +<translation id="2077129598763517140">Gunakan akselerasi hardware jika tersedia</translation> <translation id="2119636228670142020">Tentang &Chromium OS</translation> <translation id="2158734852934720349">Lisensi sumber terbuka Chromium OS</translation> <translation id="2241627712206172106">Jika Anda berbagi komputer, teman dan keluarga bisa menjelajah secara terpisah dan menyiapkan Chromium sesuai keinginannya.</translation> diff --git a/chromium/chrome/app/resources/chromium_strings_pl.xtb b/chromium/chrome/app/resources/chromium_strings_pl.xtb index b0606263bda..13c581b2dd8 100644 --- a/chromium/chrome/app/resources/chromium_strings_pl.xtb +++ b/chromium/chrome/app/resources/chromium_strings_pl.xtb @@ -95,7 +95,7 @@ <translation id="4207043877577553402"><ph name="BEGIN_BOLD" />Uwaga:<ph name="END_BOLD" /> Chromium nie może uniemożliwić rozszerzeniom zapisywania historii przeglądania. Aby wyłączyć to rozszerzenie w trybie incognito, usuń zaznaczenie tej opcji.</translation> <translation id="421369550622382712">Odkryj znakomite aplikacje, gry, rozszerzenia i motywy do Chromium.</translation> <translation id="4222580632002216401">Jesteś zalogowany w Chromium. Administrator wyłączył synchronizację.</translation> -<translation id="4224199872375172890">Chromium jest aktualny.</translation> +<translation id="4224199872375172890">Masz aktualną wersję Chromium.</translation> <translation id="4230135487732243613">Połączyć Twoje dane Chromium z tym kontem?</translation> <translation id="4246125976471362530">{SECONDS,plural, =1{Chromium uruchomi się ponownie za sekundę.}few{Chromium uruchomi się ponownie za # sekundy.}many{Chromium uruchomi się ponownie za # sekund.}other{Chromium uruchomi się ponownie za # sekundy.}}</translation> <translation id="4271805377592243930">Pomoc do Chromium</translation> @@ -110,7 +110,7 @@ <translation id="459535195905078186">Aplikacje Chromium</translation> <translation id="4621240073146040695">Już prawie gotowe. Uruchom ponownie Chromium, by zakończyć aktualizację.</translation> <translation id="4677944499843243528">Wygląda na to, że profil jest używany przez inny proces Chromium (<ph name="PROCESS_ID" />) na innym komputerze (<ph name="HOST_NAME" />). Chromium zablokowało profil, by zapobiec jego uszkodzeniu. Jeśli masz pewność, że żadne inne procesy nie używają tego profilu, możesz go odblokować i ponownie uruchomić Chromium.</translation> -<translation id="469338717132742108">Skorzystaj z pomocy dotyczącej Chromium OS</translation> +<translation id="469338717132742108">Skorzystaj z pomocy dotyczącej systemu operacyjnego Chromium</translation> <translation id="4708774505295300557">Ktoś zalogował się wcześniej w Chromium na tym komputerze jako <ph name="ACCOUNT_EMAIL_LAST" />. Utwórz nowego użytkownika Chromium, by Twoje informacje były przechowywane oddzielnie.</translation> <translation id="4714956846925717402">Szybciej uruchamiaj Chromium</translation> <translation id="4743926867934016338">Zaakceptuj i szukaj</translation> @@ -138,7 +138,7 @@ <translation id="5684733627009686897">Chromium jest domyślną przeglądarką. Hurra!</translation> <translation id="5698481217667032250">Wyświetlaj Chromium w tym języku</translation> <translation id="5726838626470692954">Twój menedżer musi Cię usunąć i ponownie dodać w Chromium.</translation> -<translation id="5768914737813585044">Wyświetlaj Chromium OS w tym języku</translation> +<translation id="5768914737813585044">Wyświetlaj system operacyjny Chromium w tym języku</translation> <translation id="5772805321386874569">(wymaga <ph name="BEGIN_BUTTON" />ponownego uruchomienia<ph name="END_BUTTON" /> Chromium)</translation> <translation id="5796460469508169315">Chromium jest prawie gotowy.</translation> <translation id="5820394555380036790">System operacyjny Chromium</translation> @@ -247,7 +247,7 @@ Więcej instrukcji znajdziesz w e-mailu wysłanym na adres <ph name="ACCOUNT_EM <translation id="8697124171261953979">Kontroluje także to, jaka strona wyświetla się po uruchomieniu Chromium lub wyszukiwaniu w omniboksie.</translation> <translation id="8704119203788522458">Oto Twoja przeglądarka Chromium</translation> <translation id="872034308864968620">Zezwól Chromium na działanie w tle</translation> -<translation id="8803635938069941624">Warunki korzystania z Chromium OS</translation> +<translation id="8803635938069941624">Warunki korzystania z systemu operacyjnego Chromium</translation> <translation id="8821041990367117597">Chromium nie może zsynchronizować danych, ponieważ dane logowania na Twoje konto są nieaktualne.</translation> <translation id="8851136666856101339">główny</translation> <translation id="8862326446509486874">Nie masz odpowiednich uprawnień do przeprowadzenia instalacji na poziomie systemowym. Uruchom ponownie program instalacyjny jako administrator.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_am.xtb b/chromium/chrome/app/resources/generated_resources_am.xtb index 089333119c2..2c0f3c85bb6 100644 --- a/chromium/chrome/app/resources/generated_resources_am.xtb +++ b/chromium/chrome/app/resources/generated_resources_am.xtb @@ -1761,7 +1761,7 @@ <translation id="3251759466064201842">‹የሰርቲፊኬቱ አካል አይደለም›</translation> <translation id="3252266817569339921">ፈረንሳይኛ</translation> <translation id="3254434849914415189">ለ<ph name="FILE_TYPE" /> ፋይሎች ነባሪውን መተግበሪያ ይምረጡ፦</translation> -<translation id="3255228561559750854">ይፈልጉ፣ ወይም ደግሞ «Ok, Google» ይበሉ</translation> +<translation id="3255228561559750854">ይፈልጉ፣ ወይም ደግሞ «Ok Google» ይበሉ</translation> <translation id="3257011895468050906">የማስመሰያ ማሰር ድጋፍን ያንቁ።</translation> <translation id="3260892921936048802">&አውርድ...</translation> <translation id="326356299252142602">Windows Runtime MIDI ኤፒአይን ይጠቀሙ</translation> @@ -2208,7 +2208,7 @@ <translation id="3812525830114410218">መጥፎ የእውቅና ማረጋገጫ</translation> <translation id="3812568885510197014">የድር ቅጾችን በራስ-ሙላ ፊርማዎች እንደ የኤችቲኤምኤል ዓይነታዎች አድርጎ ያብራራቸዋል።</translation> <translation id="3813296892522778813">የሚፈልጉትን ነገር ማግኘት ካልቻሉ ወደ <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome እገዛ<ph name="END_LINK_CHROMIUM" /> ይሂዱ</translation> -<translation id="3813984289128269159">እሺ Google</translation> +<translation id="3813984289128269159">Ok Google</translation> <translation id="3815016854028376614">የዡዪን ግቤት ስልት</translation> <translation id="3815571115159309122"><ph name="FILE_COUNT" /> አዲስ ፎቶዎች ተገኝቷል <ph name="LINE_BREAK1" /> diff --git a/chromium/chrome/app/resources/generated_resources_ar.xtb b/chromium/chrome/app/resources/generated_resources_ar.xtb index 295807a62b5..afb7b19c162 100644 --- a/chromium/chrome/app/resources/generated_resources_ar.xtb +++ b/chromium/chrome/app/resources/generated_resources_ar.xtb @@ -624,7 +624,7 @@ <translation id="1779766957982586368">إغلاق النافذة</translation> <translation id="1781502536226964113">فتح صفحة علامة التبويب الجديدة</translation> <translation id="1782196717298160133">العثور على هاتفك</translation> -<translation id="1782924894173027610">خادم المزامنة مشغول، الرجاء إعادة المحاولة لاحقًا.</translation> +<translation id="1782924894173027610">خادم المزامنة مشغول، يُرجى إعادة المحاولة لاحقًا.</translation> <translation id="1784849162047402014">مساحة القرص الموجودة على الجهاز منخفضة.</translation> <translation id="1788636309517085411">استخدام الموقع الافتراضي</translation> <translation id="1789575671122666129">النوافذ المنبثقة</translation> @@ -1244,7 +1244,7 @@ <translation id="2620436844016719705">النظام</translation> <translation id="26224892172169984">عدم السماح لأي موقع ويب بمعالجة البروتوكولات</translation> <translation id="2624142942574147739">هذه الصفحة تدخل إلى الكاميرا والميكروفون التابعين لك.</translation> -<translation id="2626799779920242286">الرجاء إعادة المحاولة لاحقًا.</translation> +<translation id="2626799779920242286">يُرجى إعادة المحاولة لاحقًا.</translation> <translation id="2630681426381349926">الاتصال بشبكة Wi-Fi للبدء</translation> <translation id="2631006050119455616">تم الحفظ</translation> <translation id="2631498379019108537">إظهار خيارات الإدخال في الرف</translation> @@ -3696,7 +3696,7 @@ <ph name="BEGIN_LINK_HELP" />مزيد من المعلومات<ph name="END_LINK_HELP" /></translation> <translation id="5851063901794976166">لا يوجد شئ هنا...</translation> <translation id="5851868085455377790">جهة الإصدار</translation> -<translation id="5852112051279473187">عفوًا، حدث خطأ جسيم أثناء تسجيل هذه الخدمة. الرجاء إعادة المحاولة أو الاتصال بممثل الدعم.</translation> +<translation id="5852112051279473187">عفوًا، حدث خطأ جسيم أثناء تسجيل هذه الخدمة. يُرجى إعادة المحاولة أو الاتصال بممثل الدعم.</translation> <translation id="5852137567692933493">إعادة التشغيل وإجراء Powerwash</translation> <translation id="5854409662653665676">إذا كنت تواجه مشكلات متكررة، يمكنك تجربة ما يلي لحل المشكلة في هذه الوحدة:</translation> <translation id="5854912040170951372">الشريحة</translation> @@ -3956,7 +3956,7 @@ <translation id="6226777517901268232">ملف مفتاح خاص (اختياري)</translation> <translation id="6227235786875481728">يتعذر تشغيل هذا الملف.</translation> <translation id="6228691855869374890">يتضمن هذا الموقع إمكانية تحكم شامل في أجهزة MIDI.</translation> -<translation id="6229890768313448549">لا يمكن تحميل بنود خدمة Google Play. الرجاء إعادة المحاولة.</translation> +<translation id="6229890768313448549">لا يمكن تحميل بنود خدمة Google Play. يُرجى إعادة المحاولة.</translation> <translation id="6231881193380278751">أضف معلمة طلب بحث في عنوان URL لإجراء تحديث تلقائي لصفحة: chrome://device-log/?refresh=<sec></translation> <translation id="6232017090690406397">البطارية</translation> <translation id="6232116551750539448">انقطع الاتصال بـ <ph name="NAME" /></translation> @@ -4987,7 +4987,7 @@ <translation id="7629827748548208700">علامة التبويب: <ph name="TAB_NAME" /></translation> <translation id="7631887513477658702">فت&ح هذا النوع من الملفات دومًا</translation> <translation id="7632948528260659758">فشل تحديث تطبيقات kiosk التالية:</translation> -<translation id="7634566076839829401">حدث خطأ ما. الرجاء إعادة المحاولة.</translation> +<translation id="7634566076839829401">حدث خطأ ما. يُرجى إعادة المحاولة.</translation> <translation id="7639178625568735185">تم إنشاء الحساب!</translation> <translation id="764017888128728">يعمل <ph name="PASSWORD_MANAGER_BRAND" /> على تسجيل دخولك تلقائيًا إلى المواقع المؤهلة باستخدام كلمات المرور التي حفظتها.</translation> <translation id="7644029910725868934">تمكين مجلد الإشارات المرجعية المُدارة للمستخدمين تحت الإشراف</translation> @@ -5152,7 +5152,7 @@ <translation id="7870790288828963061">لا توجد إصدارات أحدث لتطبيق Kiosk. لا يوجد شيء لتحديثه. يُرجى إزالة جهاز USB.</translation> <translation id="7874357055309047713">تشغيل على جميع المواقع دائمًا</translation> <translation id="7876243839304621966">إزالة الكل</translation> -<translation id="7877451762676714207">خطأ غير معروف في الخادم. الرجاء إعادة المحاولة أو الاتصال بمشرف الخادم.</translation> +<translation id="7877451762676714207">خطأ غير معروف في الخادم. يُرجى إعادة المحاولة أو الاتصال بمشرف الخادم.</translation> <translation id="7881483672146086348">عرض حساب</translation> <translation id="7881969471599061635">تعطيل الترجمات المصاحبة</translation> <translation id="7882358943899516840">نوع مقدم الخدمة</translation> diff --git a/chromium/chrome/app/resources/generated_resources_bg.xtb b/chromium/chrome/app/resources/generated_resources_bg.xtb index 3f3be97e9ce..96f08b37d27 100644 --- a/chromium/chrome/app/resources/generated_resources_bg.xtb +++ b/chromium/chrome/app/resources/generated_resources_bg.xtb @@ -1533,7 +1533,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur <translation id="2964193600955408481">Деактивиране на Wi-Fi</translation> <translation id="2966449113954629791">Възможно е да сте изразходвали отпуснатите ви мобилни данни. Посетете портала за активиране „<ph name="NAME" />“, за да купите още данни.</translation> <translation id="2966459079597787514">Шведска клавиатура</translation> -<translation id="2966598748518102999">Подобряване на гласовото търсене чрез изпращане до Google на запис на произнасянето на „OK Google“ и няколко секунди от предхождащия звук.</translation> +<translation id="2966598748518102999">Подобряване на гласовото търсене чрез изпращане до Google на запис на произнасянето на „Ok Google“ и няколко секунди от предхождащия звук.</translation> <translation id="2967544384642772068">Затваряне</translation> <translation id="2971033837577180453"><span>Идент. №:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">намаляване на яркостта</translation> @@ -1757,7 +1757,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur <translation id="3251759466064201842"><Не е част от сертификата></translation> <translation id="3252266817569339921">френски</translation> <translation id="3254434849914415189">Избиране на приложението по подразбиране за файлове от тип <ph name="FILE_TYPE" />:</translation> -<translation id="3255228561559750854">Потърсете нещо или кажете „OK Google“</translation> +<translation id="3255228561559750854">Потърсете нещо или кажете „Ok Google“</translation> <translation id="3257011895468050906">Активиране на поддръжката за Token Binding.</translation> <translation id="3260892921936048802">&Изтегляне...</translation> <translation id="326356299252142602">Използване на приложния програмен интерфейс (API) за MIDI по време на изпълнение за Windows</translation> @@ -2203,7 +2203,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur <translation id="3812525830114410218">Невалиден сертификат</translation> <translation id="3812568885510197014">Добавя към уеб формулярите пояснения за подписите за автоматично попълване под формата на HTML атрибути.</translation> <translation id="3813296892522778813">Прегледайте <ph name="BEGIN_LINK_CHROMIUM" />помощното съдържание за Google Chrome<ph name="END_LINK_CHROMIUM" />, ако не можете да намерите търсеното</translation> -<translation id="3813984289128269159">OK Google</translation> +<translation id="3813984289128269159">Ok Google</translation> <translation id="3815016854028376614">Метод на въвеждане за джуин</translation> <translation id="3815571115159309122">Намерени са <ph name="FILE_COUNT" /> нови снимки <ph name="LINE_BREAK1" /> @@ -5617,7 +5617,7 @@ PDF файл или в Google Диск.</translation> <translation id="8487700953926739672">Налице офлайн</translation> <translation id="8490896350101740396">Следните павилионни приложения са актуализирани: <ph name="UPDATED_APPS" />. Моля, рестартирайте устройството, за да завършите процеса.</translation> <translation id="8493236660459102203">Микрофон:</translation> -<translation id="8495193314787127784">Активиране на „OK Google“</translation> +<translation id="8495193314787127784">Активиране на „Ok Google“</translation> <translation id="8496717697661868878">Стартиране на тази приставка</translation> <translation id="8497392509610708671">Можете да промените това по всяко време от <ph name="BEGIN_LINK" />настройките на Chrome<ph name="END_LINK" />.</translation> <translation id="8498716162437226120">Добавяне на устройство с Bluetooth</translation> @@ -5666,7 +5666,7 @@ PDF файл или в Google Диск.</translation> <translation id="8565650234829130278">Бе направен опит за понижаване на приложението.</translation> <translation id="8569682776816196752">Няма намерени местоназначения</translation> <translation id="8569764466147087991">Изберете файл за отваряне</translation> -<translation id="8571032220281885258">Когато кажете „OK Google“, Chrome ще потърси следващото нещо, което произнесете.</translation> +<translation id="8571032220281885258">Когато кажете „Ok Google“, Chrome ще потърси следващото нещо, което произнесете.</translation> <translation id="8571108619753148184">Сървър 4</translation> <translation id="8574234089711453001">Разрешете показването на бутон за изтегляне при отваряне на страница с URL адрес на мултимедийно съдържание.</translation> <translation id="857779305329188634">Активиране на експериментална поддръжка на протокола QUIC.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_ca.xtb b/chromium/chrome/app/resources/generated_resources_ca.xtb index e06630108d9..aeef7dd4b7d 100644 --- a/chromium/chrome/app/resources/generated_resources_ca.xtb +++ b/chromium/chrome/app/resources/generated_resources_ca.xtb @@ -2213,7 +2213,7 @@ Del domini <ph name="DOWNLOAD_DOMAIN" /></translation> Ja es pot crear la còpia de seguretat a <ph name="BEGIN_LINK" />Google Drive<ph name="END_LINK" /></translation> <translation id="3816789583333631750">Per utilitzar aquesta funció, s'ha d'activar el connector Native Client.</translation> <translation id="3819007103695653773">Permet que tots els llocs enviïn missatges de tramesa automàtica en segon pla</translation> -<translation id="3819752733757735746">Accés amb commutador (controleu l'ordinador amb només un o dos commutadors)</translation> +<translation id="3819752733757735746">Accés amb interruptors (controleu l'ordinador amb només un o dos interruptors)</translation> <translation id="3819800052061700452">&Pantalla completa</translation> <translation id="3820172043799983114">El PIN no és vàlid.</translation> <translation id="3820749202859700794">Corba el·líptica secp521r1 d'SECG (també coneguda com a NIST P-521)</translation> @@ -4142,7 +4142,7 @@ Assegureu-vos que no es pugui accedir a informació confidencial.</translation> <translation id="645705751491738698">Continua bloquejant JavaScript</translation> <translation id="6458308652667395253">Gestiona el bloqueig de JavaScript...</translation> <translation id="6459488832681039634">Utilitza la selecció per a la cerca</translation> -<translation id="6460082740058890133">Activa una IU de comentaris personalitzats en enviar comentaris amb Google Feedback. Funciona amb la versió 10.2 dels Serveis de Google Play i amb versions posteriors</translation> +<translation id="6460082740058890133">Activa una IU de comentaris personalitzats en enviar comentaris amb Google Feedback. Funciona amb la versió 10.2 de Serveis de Google Play i amb versions posteriors</translation> <translation id="6460423884798879930">Activa l'opció per enviar informació d'autenticació addicional al paquet SYN inicial per a un client ja connectat, de manera que permet que s'iniciï l'enviament de dades més ràpidament.</translation> <translation id="6460474910028274178">Millora de la lògica d'activació i de l'aspecte a la interfície d'usuari per al quadre del Traductor</translation> <translation id="6460601847208524483">Cerca el següent</translation> diff --git a/chromium/chrome/app/resources/generated_resources_da.xtb b/chromium/chrome/app/resources/generated_resources_da.xtb index f360b77a350..35ac7f63b84 100644 --- a/chromium/chrome/app/resources/generated_resources_da.xtb +++ b/chromium/chrome/app/resources/generated_resources_da.xtb @@ -1474,7 +1474,7 @@ Jeg synes ikke, dette website skal blokeres.</translation> <translation id="2890678560483811744">Sidereferencen er ugyldig</translation> <translation id="2893168226686371498">Standardbrowser</translation> <translation id="289426338439836048">Andet mobilnetværk...</translation> -<translation id="2894745200702272315">Aktiverer en eksperimentel version af funktioner for registrering af kommandoer ved hjælp af "OK Google", som afhænger af hardwaren.</translation> +<translation id="2894745200702272315">Aktiverer en eksperimentel version af funktioner for registrering af kommandoer ved hjælp af "Ok Google", som afhænger af hardwaren.</translation> <translation id="289644616180464099">SIM-kortet er låst.</translation> <translation id="289695669188700754">Nøgle-id: <ph name="KEY_ID" /></translation> <translation id="2897878306272793870">Er du sikker på, at du vil åbne <ph name="TAB_COUNT" /> faner?</translation> diff --git a/chromium/chrome/app/resources/generated_resources_en-GB.xtb b/chromium/chrome/app/resources/generated_resources_en-GB.xtb index d8c2b605de6..cb959d14bb4 100644 --- a/chromium/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chromium/chrome/app/resources/generated_resources_en-GB.xtb @@ -611,7 +611,7 @@ <translation id="1763108912552529023">Keep exploring</translation> <translation id="1764226536771329714">beta</translation> <translation id="176587472219019965">&New Window</translation> -<translation id="1766352429832934452">Enabled (required to use "OK Google")</translation> +<translation id="1766352429832934452">Enabled (required to use 'Ok Google')</translation> <translation id="1769104665586091481">Open Link in New &Window</translation> <translation id="1772267994638363865">To make this happen, you'll need to enable Voice & Audio Activity and train your <ph name="DEVICE_TYPE" /> in the following steps.</translation> <translation id="1773212559869067373">Authentication certificate rejected locally</translation> @@ -736,7 +736,7 @@ <translation id="1934636348456381428">Enable the experimental overlay scrollbars implementation. You must also enable threaded compositing to have the scrollbars animate.</translation> <translation id="1936157145127842922">Show in Folder</translation> <translation id="1936717151811561466">Finnish</translation> -<translation id="1937256809970138538">Say "OK Google" when your screen is on and unlocked</translation> +<translation id="1937256809970138538">Say 'Ok Google' when your screen is on and unlocked</translation> <translation id="1942765061641586207">Image resolution</translation> <translation id="1944921356641260203">Update found</translation> <translation id="1947424002851288782">German keyboard</translation> @@ -1477,7 +1477,7 @@ I don't think this site should be blocked!</translation> <translation id="2890678560483811744">Out of bounds page reference</translation> <translation id="2893168226686371498">Default browser</translation> <translation id="289426338439836048">Other mobile network...</translation> -<translation id="2894745200702272315">Enables an experimental version of 'OK Google' hotword detection features that have a hardware dependency.</translation> +<translation id="2894745200702272315">Enables an experimental version of 'Ok Google' hotword detection features that have a hardware dependency.</translation> <translation id="289644616180464099">SIM Card is locked</translation> <translation id="289695669188700754">Key ID: <ph name="KEY_ID" /></translation> <translation id="2897878306272793870">Are you sure that you want to open <ph name="TAB_COUNT" /> tabs?</translation> @@ -1537,7 +1537,7 @@ I don't think this site should be blocked!</translation> <translation id="2964193600955408481">Disable Wi-Fi</translation> <translation id="2966449113954629791">You may have used up your mobile data allowance. Visit the <ph name="NAME" /> activation portal to buy more data.</translation> <translation id="2966459079597787514">Swedish keyboard</translation> -<translation id="2966598748518102999">Improve voice search by sending the sound of "Ok Google", and a few seconds before, to Google.</translation> +<translation id="2966598748518102999">Improve voice search by sending the sound of 'Ok Google', and a few seconds before, to Google.</translation> <translation id="2967544384642772068">Kill</translation> <translation id="2971033837577180453"><span>ID:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">bright down</translation> @@ -1705,7 +1705,7 @@ Please check your email at <ph name="ACCOUNT_EMAIL" /> for these and further ins <translation id="3162559335345991374">The Wi-Fi that you are using may require you to visit its login page.</translation> <translation id="316307797510303346">Control and view the websites which this person visits from <ph name="CUSTODIAN_EMAIL" />. Your account sign-in details are out of date.</translation> -<translation id="3166571619128686629">Click, or say "OK Google" to start voice search</translation> +<translation id="3166571619128686629">Click, or say 'Ok Google' to start voice search</translation> <translation id="3170072451822350649">You may also skip signing in and <ph name="LINK_START" />browse as Guest<ph name="LINK_END" />.</translation> <translation id="3170544058711792988">Keep magnifier focus centred on screen</translation> <translation id="317583078218509884">New site permissions settings will take effect after reloading the page.</translation> @@ -1754,14 +1754,14 @@ Please check your email at <ph name="ACCOUNT_EMAIL" /> for these and further ins <translation id="3241720467332021590">Irish Gaelic</translation> <translation id="3242118113727675434">Show HUD for touch points</translation> <translation id="3242765319725186192">Preshared key:</translation> -<translation id="3244621381664913240">Enable "OK Google" to start a voice search.</translation> +<translation id="3244621381664913240">Enable 'Ok Google' to start a voice search.</translation> <translation id="3245321423178950146">Unknown Artist</translation> <translation id="324533084080637716">With article structured mark-up</translation> <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – Network error</translation> <translation id="3251759466064201842"><Not Part Of Certificate></translation> <translation id="3252266817569339921">French</translation> <translation id="3254434849914415189">Choose the default app for <ph name="FILE_TYPE" /> files:</translation> -<translation id="3255228561559750854">Search, or say "OK Google"</translation> +<translation id="3255228561559750854">Search, or say 'Ok Google'</translation> <translation id="3257011895468050906">Enable Token Binding support.</translation> <translation id="3260892921936048802">&Download...</translation> <translation id="326356299252142602">Use Windows Runtime MIDI API</translation> @@ -2697,7 +2697,7 @@ Press any key to continue exploring.</translation> <translation id="4533259260976001693">Shrink/Expand</translation> <translation id="4533985347672295764">CPU Time</translation> <translation id="4534166495582787863">Enables touchpad three-finger-click as middle button.</translation> -<translation id="4534799089889278411">Say "OK Google" in a new tab, google.com and the App Launcher</translation> +<translation id="4534799089889278411">Say 'Ok Google' in a new tab, google.com and the App Launcher</translation> <translation id="4535127706710932914">Default Profile</translation> <translation id="4538417792467843292">Delete word</translation> <translation id="4538684596480161368">Always block unsandboxed plug-ins on <ph name="HOST" /></translation> @@ -3217,7 +3217,7 @@ Press any key to continue exploring.</translation> <translation id="5229189185761556138">Manage input methods</translation> <translation id="5229622432348746578">Disable Audio For Desktop Sharing</translation> <translation id="5230516054153933099">Window</translation> -<translation id="5232178406098309195">When you use audio activation commands, such as "OK Google" or touching a microphone icon, your private Voice & Audio Activity stores some voice and other audio to your account. A recording of the following speech/audio, plus a few seconds before, will be stored.</translation> +<translation id="5232178406098309195">When you use audio activation commands, such as 'Ok Google' or touching a microphone icon, your private Voice & Audio Activity stores some voice and other audio to your account. A recording of the following speech/audio, plus a few seconds before, will be stored.</translation> <translation id="523299859570409035">Notifications exceptions</translation> <translation id="5233019165164992427">NaCl debug port</translation> <translation id="5233231016133573565">Process ID</translation> @@ -3236,7 +3236,7 @@ Press any key to continue exploring.</translation> <translation id="5249624017678798539">The browser crashed before the download completed.</translation> <translation id="5252456968953390977">Roaming</translation> <translation id="5252653240322147470">PIN must be less than <ph name="MAXIMUM" /> digits</translation> -<translation id="5253753933804516447">Enable "OK Google" to voice search when your screen is on and unlocked</translation> +<translation id="5253753933804516447">Enable 'Ok Google' to voice search when your screen is on and unlocked</translation> <translation id="52550593576409946">Kiosk application could not be launched.</translation> <translation id="5255315797444241226">The passphrase that you've entered is incorrect.</translation> <translation id="5260508466980570042">Sorry, your email or password could not be verified. Please try again.</translation> @@ -3811,7 +3811,7 @@ Press any key to continue exploring.</translation> <translation id="6011449291337289699">Clear site data</translation> <translation id="6015796118275082299">Year</translation> <translation id="6016551720757758985">Confirm Powerwash with return to previous version</translation> -<translation id="6016809788585079594">Say "OK Google" one last time</translation> +<translation id="6016809788585079594">Say 'Ok Google' one last time</translation> <translation id="6016972670657536680">Select language and keyboard button. Currently selected language is <ph name="LANGUAGE" />.</translation> <translation id="6017225534417889107">Change...</translation> <translation id="6017981840202692187">Add to Applications</translation> @@ -3879,7 +3879,7 @@ Press any key to continue exploring.</translation> <translation id="6105158702728922449">Use your camera and microphone</translation> <translation id="6105877918873366097">Last accessed</translation> <translation id="6107012941649240045">Issued To</translation> -<translation id="6107079717483424262">Recognize your voice when you say "OK Google"</translation> +<translation id="6107079717483424262">Recognise your voice when you say 'Ok Google'</translation> <translation id="6109228527970300988">Emoji, handwriting and voice input on opt-in IME menu</translation> <translation id="6111770213269631447">Transliteration (namaskar → নমস্কার)</translation> <translation id="6112952769866305444">Edit person, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation> @@ -3922,7 +3922,7 @@ Press any key to continue exploring.</translation> <translation id="6165508094623778733">Learn more</translation> <translation id="6166185671393271715">Import Passwords To Chrome</translation> <translation id="6169666352732958425">Unable to cast desktop.</translation> -<translation id="6171550060231646388">Simulated hardware 'OK Google' features</translation> +<translation id="6171550060231646388">Simulated hardware 'Ok Google' features</translation> <translation id="6171948306033499786">Pause printing</translation> <translation id="6175314957787328458">Microsoft Domain GUID</translation> <translation id="6178664161104547336">Select a certificate</translation> @@ -4550,7 +4550,7 @@ Only use this feature with accounts that you trust.</translation> <translation id="7012372675181957985">Your Google account may have other forms of browsing history at <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation> <translation id="7013485839273047434">Get more extensions</translation> <translation id="7014174261166285193">Installation failed.</translation> -<translation id="7017004637493394352">Say "OK Google" again</translation> +<translation id="7017004637493394352">Say 'Ok Google' again</translation> <translation id="7017219178341817193">Add a new page</translation> <translation id="7017354871202642555">Cannot set mode after window is set.</translation> <translation id="7017480957358237747">allow or prohibit certain websites,</translation> @@ -4707,7 +4707,7 @@ Only use this feature with accounts that you trust.</translation> <translation id="7238585580608191973">SHA-256 Fingerprint</translation> <translation id="7240120331469437312">Certificate Subject Alternative Name</translation> <translation id="7241389281993241388">Please sign in to <ph name="TOKEN_NAME" /> to import the client certificate.</translation> -<translation id="7243055093079293866">Say "OK Google" in a new tab and google.com</translation> +<translation id="7243055093079293866">Say 'Ok Google' in a new tab and google.com</translation> <translation id="7243632151880336635">Clear and Sign Out</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (Best)</translation> <translation id="7246947237293279874">FTP Proxy</translation> @@ -4788,7 +4788,7 @@ Only use this feature with accounts that you trust.</translation> <translation id="7361824946268431273">The faster, simpler and more secure computer</translation> <translation id="7364796246159120393">Choose file</translation> <translation id="736515969993332243">Scanning for networks.</translation> -<translation id="7366762109661450129">Say "OK Google" when the screen is on and unlocked.</translation> +<translation id="7366762109661450129">Say 'Ok Google' when the screen is on and unlocked.</translation> <translation id="7366909168761621528">Browsing data</translation> <translation id="7369521049655330548">The following plug-ins were blocked on this page:</translation> <translation id="7371490661692457119">Default tile width</translation> @@ -4912,10 +4912,10 @@ Only use this feature with accounts that you trust.</translation> <translation id="7517569744831774757">Restore settings to their original defaults.</translation> <translation id="7517786267097410259">Create a password -</translation> <translation id="7518150891539970662">WebRTC logs (<ph name="WEBRTC_LOG_COUNT" />)</translation> -<translation id="7518657099163789435">Voice & Audio Activity is required to use "OK Google"</translation> +<translation id="7518657099163789435">Voice & Audio Activity is required to use 'Ok Google'</translation> <translation id="7520821146909122639">This Page Is Being Translated...</translation> <translation id="7521387064766892559">JavaScript</translation> -<translation id="7522255036471229694">Say “OK Google”</translation> +<translation id="7522255036471229694">Say 'Ok Google'</translation> <translation id="7525067979554623046">Create</translation> <translation id="7529471622666797993"><ph name="BEGIN_LINK" />Advanced font settings<ph name="END_LINK" /> (requires extension)</translation> <translation id="7530016656428373557">Discharge Rate in Watts</translation> @@ -5162,7 +5162,7 @@ Only use this feature with accounts that you trust.</translation> <translation id="7881969471599061635">Disable subtitles</translation> <translation id="7882358943899516840">Provider type</translation> <translation id="7885253890047913815">Recent destinations</translation> -<translation id="7887192723714330082">Respond to "OK Google" when the screen is on and unlocked</translation> +<translation id="7887192723714330082">Respond to 'Ok Google' when the screen is on and unlocked</translation> <translation id="7887334752153342268">Duplicate</translation> <translation id="7887864092952184874">Bluetooth mouse paired</translation> <translation id="7892100671754994880">Next user</translation> @@ -5312,7 +5312,7 @@ Keep your key file in a safe place. You will need it to create new versions of y <translation id="806812017500012252">Reorder by title</translation> <translation id="8069615408251337349">Google Cloud Print</translation> <translation id="8071432093239591881">Print as image</translation> -<translation id="8071942001314758122">Just say "OK Google" three times</translation> +<translation id="8071942001314758122">Just say 'Ok Google' three times</translation> <translation id="8072988827236813198">Pin Tabs</translation> <translation id="8074127646604999664">Allow recently closed sites to finish sending and receiving data</translation> <translation id="8075191520954018715">Memory state</translation> @@ -5622,7 +5622,7 @@ Calculating time until full</translation> <translation id="8487700953926739672">Available offline</translation> <translation id="8490896350101740396">The following kiosk apps "<ph name="UPDATED_APPS" />" have been updated. Please reboot the device to complete the update process.</translation> <translation id="8493236660459102203">Microphone:</translation> -<translation id="8495193314787127784">Enable "OK Google"</translation> +<translation id="8495193314787127784">Enable 'Ok Google'</translation> <translation id="8496717697661868878">Run This Plug-in</translation> <translation id="8497392509610708671">You can change this at any time in <ph name="BEGIN_LINK" />Chrome Settings<ph name="END_LINK" />.</translation> <translation id="8498716162437226120">Add a Bluetooth device</translation> @@ -5671,7 +5671,7 @@ Calculating time until full</translation> <translation id="8565650234829130278">Attempted to downgrade app.</translation> <translation id="8569682776816196752">No destinations found</translation> <translation id="8569764466147087991">Select a file to open</translation> -<translation id="8571032220281885258">When you say "Ok Google", Chrome will search for what you say next.</translation> +<translation id="8571032220281885258">When you say 'Ok Google', Chrome will search for what you say next.</translation> <translation id="8571108619753148184">Server 4</translation> <translation id="8574234089711453001">Allow a download button to show up when opening a page with media URL.</translation> <translation id="857779305329188634">Enable experimental QUIC protocol support.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_es.xtb b/chromium/chrome/app/resources/generated_resources_es.xtb index 7e72040dad7..c3f8d56d118 100644 --- a/chromium/chrome/app/resources/generated_resources_es.xtb +++ b/chromium/chrome/app/resources/generated_resources_es.xtb @@ -126,7 +126,7 @@ <translation id="1175364870820465910">Im&primir...</translation> <translation id="117624967391683467">Copiando <ph name="FILE_NAME" />...</translation> <translation id="1177863135347784049">Personalizado</translation> -<translation id="1178581264944972037">Detener</translation> +<translation id="1178581264944972037">Pausar</translation> <translation id="1179803038870941185"><ph name="URL" /> quiere obtener un control absoluto de tus dispositivos MIDI.</translation> <translation id="1181037720776840403">Eliminar</translation> <translation id="1183237619868651138">No se puede instalar <ph name="EXTERNAL_CRX_FILE" /> en la memoria caché local.</translation> @@ -1198,7 +1198,7 @@ No creo que este sitio deba bloquearse</translation> <translation id="2565670301826831948">Velocidad del panel táctil:</translation> <translation id="2566124945717127842">Haz un Powerwash y restablece los datos de fábrica de tu dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" /> para que quede como nuevo.</translation> <translation id="2568774940984945469">Contenedor de barra de información</translation> -<translation id="2570000010887652771">Se han guardado los datos.</translation> +<translation id="2570000010887652771">Consumo de datos reducido.</translation> <translation id="2570648609346224037">Se ha producido un error durante la descarga de la imagen de recuperación.</translation> <translation id="257088987046510401">Temas</translation> <translation id="2572032849266859634">Se ha concedido acceso de solo lectura a <ph name="VOLUME_NAME" />.</translation> @@ -1360,7 +1360,7 @@ y su configuración no se sincronizan en otros dispositivos con la función de s <translation id="2776441542064982094">Parece que no hay dispositivos disponibles para registrarse en la red. Si tu dispositivo está activado y conectado a Internet, prueba a registrarlo siguiendo las instrucciones que se incluyen en su manual.</translation> <translation id="2778459533137481732">Lista negra de permisos</translation> <translation id="2781645665747935084">Belga</translation> -<translation id="2782459523842525953">Habilita los informes sobre las acciones de los permisos en los servidores de navegación segura para los usuarios que hayan habilitado esta opción.</translation> +<translation id="2782459523842525953">Habilita los informes sobre las acciones de los permisos en los servidores de Navegación Segura para los usuarios que hayan habilitado esta opción.</translation> <translation id="2782688068604007519">Iframes de proceso insuficiente</translation> <translation id="2783298271312924866">Descargado</translation> <translation id="2783321960289401138">Crear acceso directo...</translation> @@ -1580,7 +1580,7 @@ sistema operativo desde una unidad USB <translation id="3015992588037997514">¿Aparece este código en la pantalla de Chromebox?</translation> <translation id="3016641847947582299">Componente actualizado</translation> <translation id="3016780570757425217">Conocer tu ubicación</translation> -<translation id="3018346972744622514">Añadir otra red de telefonía móvil</translation> +<translation id="3018346972744622514">Añadir otra red móvil</translation> <translation id="302014277942214887">Introduce el identificador de la aplicación o la URL de Chrome Web Store.</translation> <translation id="3020990233660977256">Número de serie: <ph name="SERIAL_NUMBER" /></translation> <translation id="3021678814754966447">&Ver fuente del marco</translation> @@ -1911,7 +1911,7 @@ Si no cambias la configuración predeterminada, <ph name="USER_DISPLAY_NAME" /> <translation id="3436038974659740746">Ortografía personalizada</translation> <translation id="3438633801274389918">Ninja</translation> <translation id="3439153939049640737">Permitir siempre que <ph name="HOST" /> acceda al micrófono</translation> -<translation id="3439282137581679399">Habilita la lista negra de permisos que bloquea los permisos de sitios incluidos en lista negra para usuarios del servicio de navegación segura.</translation> +<translation id="3439282137581679399">Habilita la lista negra de permisos que bloquea los permisos de sitios incluidos en lista negra para usuarios del servicio de Navegación Segura.</translation> <translation id="3439970425423980614">Abriendo archivo PDF en la vista previa</translation> <translation id="3440761377721825626">Preguntar cuando un sitio web quiera utilizar un complemento para acceder a tu ordenador</translation> <translation id="3441653493275994384">Pantalla</translation> @@ -2880,7 +2880,7 @@ Pulsa cualquier tecla para seguir con la exploración.</translation> <translation id="4791148004876134991">Cambia el comportamiento de Cmd+ cuando se activa una aplicación de Chrome. Cuando se habilita, las aplicaciones de Chrome no rotan cuando se pulsa Cmd+ desde una ventana del navegador y las ventanas del navegador no rotan cuando una aplicación de Chrome está activa.</translation> <translation id="4792711294155034829">&Notificar un error...</translation> <translation id="479280082949089240">Cookies almacenadas por esta página</translation> -<translation id="4793866834012505469">Volver a entrenar el modelo de voz</translation> +<translation id="4793866834012505469">Volver a configurar el modelo de voz</translation> <translation id="479536056609751218">Página web (solo HTML)</translation> <translation id="479989351350248267">buscar</translation> <translation id="480036413855787547">Accede a tus contraseñas en la página <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> con cualquier dispositivo. En los ordenadores Mac, se pueden guardar las contraseñas en el llavero y otros usuarios de Chrome que compartan esta cuenta de OS X pueden acceder a ellas o sincronizarlas.</translation> @@ -4878,7 +4878,7 @@ Solo debes usar esta función con las cuentas de confianza.</translation> <translation id="7484964289312150019">Abrir todos los marcadores en una &ventana nueva</translation> <translation id="7485236722522518129">F4</translation> <translation id="7487067081878637334">Tecnología</translation> -<translation id="7487099628810939106">Retraso antes del clic:</translation> +<translation id="7487099628810939106">Pausa antes del clic:</translation> <translation id="7487969577036436319">No hay componentes instalados</translation> <translation id="7489605380874780575">Comprobar elegibilidad</translation> <translation id="749028671485790643">Persona <ph name="VALUE" /></translation> @@ -6107,7 +6107,7 @@ Puede que las notificaciones, las ventanas y los cuadros de diálogo que aparezc <translation id="9148126808321036104">Volver a iniciar sesión</translation> <translation id="9149866541089851383">Editar...</translation> <translation id="9150045010208374699">Utilizar la cámara</translation> -<translation id="9152722471788855605">Analizador de archivos .zip para la navegación segura</translation> +<translation id="9152722471788855605">Analizador de archivos .zip para la Navegación Segura</translation> <translation id="9153341767479566106">Otras extensiones que no se han podido cargar:</translation> <translation id="9153744823707037316">Método de entrada de conjunto</translation> <translation id="9153934054460603056">Guardar la identidad y la contraseña</translation> diff --git a/chromium/chrome/app/resources/generated_resources_et.xtb b/chromium/chrome/app/resources/generated_resources_et.xtb index fa433b29848..0b910b34eae 100644 --- a/chromium/chrome/app/resources/generated_resources_et.xtb +++ b/chromium/chrome/app/resources/generated_resources_et.xtb @@ -1537,7 +1537,7 @@ Ma arvan, et see sait ei tohiks olla blokeeritud.</translation> <translation id="2964193600955408481">Keela WiFi</translation> <translation id="2966449113954629791">Võimalik, et olete oma mobiilse andmeside ära kasutanud. Andmesidet saate juurde osta aktiveerimisportaalis <ph name="NAME" />.</translation> <translation id="2966459079597787514">Rootsi klaviatuur</translation> -<translation id="2966598748518102999">Paranda häälotsingut, saates Google'ile otsetee sõna „OK Google” ja sellele eelneva mõne sekundi heli.</translation> +<translation id="2966598748518102999">Paranda häälotsingut, saates Google'ile otsetee sõna „Ok Google” ja sellele eelneva mõne sekundi heli.</translation> <translation id="2967544384642772068">Peata</translation> <translation id="2971033837577180453"><span>ID:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">vähenda heledust</translation> @@ -1754,14 +1754,14 @@ Nende ja edasiste juhiste nägemiseks vaadake meile aadressil <ph name="ACCOUNT_ <translation id="3241720467332021590">iiri keel</translation> <translation id="3242118113727675434">Näita puutepunktide pseudokuvarit</translation> <translation id="3242765319725186192">Eeljagatud võti:</translation> -<translation id="3244621381664913240">Luba otsetee sõna „OK Google” häälotsingu alustamiseks.</translation> +<translation id="3244621381664913240">Luba otsetee sõna „Ok Google” häälotsingu alustamiseks.</translation> <translation id="3245321423178950146">Tundmatu esitaja</translation> <translation id="324533084080637716">Artiklite märgistus on struktureeritud</translation> <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – võrguviga</translation> <translation id="3251759466064201842"><Ei sisaldu sertifikaadis></translation> <translation id="3252266817569339921">prantsuse keel</translation> <translation id="3254434849914415189">Valige vaikerakendus <ph name="FILE_TYPE" />-failide jaoks:</translation> -<translation id="3255228561559750854">Otsige või öelge otsetee sõna „OK Google”</translation> +<translation id="3255228561559750854">Otsige või öelge otsetee sõna „Ok Google”</translation> <translation id="3257011895468050906">Märgi sidumise toe lubamine.</translation> <translation id="3260892921936048802">&Laadi alla …</translation> <translation id="326356299252142602">Windows Runtime MIDI API kasutamine</translation> @@ -2208,7 +2208,7 @@ Asukohast <ph name="DOWNLOAD_DOMAIN" /></translation> <translation id="3812525830114410218">Halb sertifikaat</translation> <translation id="3812568885510197014">Märgib automaattäitega allkirjadega veebivormid HTML-atribuutidena.</translation> <translation id="3813296892522778813">Kui te ei leia otsitavat, avage <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome'i abi<ph name="END_LINK_CHROMIUM" /></translation> -<translation id="3813984289128269159">OK Google</translation> +<translation id="3813984289128269159">Ok Google</translation> <translation id="3815016854028376614">Zhuyini sisestusmeetod</translation> <translation id="3815571115159309122">Leiti <ph name="FILE_COUNT" /> uut fotot <ph name="LINE_BREAK1" /> @@ -2696,7 +2696,7 @@ Jätkamiseks peavad kõik kasutajad välja logima.</translation> <translation id="4533259260976001693">Ahendamine/laiendamine</translation> <translation id="4533985347672295764">Protsessoriaeg</translation> <translation id="4534166495582787863">Lubab puuteplaadil kolme sõrmega klõpsamise, mis toimib kui hiire keskmine nupp.</translation> -<translation id="4534799089889278411">Öelge uuel vahelehel, saidil google.ee ja rakenduste käivitajas „Ok Google”</translation> +<translation id="4534799089889278411">Öelge uuel vahelehel, saidil google.com ja rakenduste käivitajas „Ok Google”</translation> <translation id="4535127706710932914">Vaikeprofiil</translation> <translation id="4538417792467843292">Kustutab sõna</translation> <translation id="4538684596480161368">Blokeeri alati saidil <ph name="HOST" /> pistikprogrammid, mis ei ole liivakastirežiimis</translation> diff --git a/chromium/chrome/app/resources/generated_resources_fa.xtb b/chromium/chrome/app/resources/generated_resources_fa.xtb index fbea778368c..3f5d785a776 100644 --- a/chromium/chrome/app/resources/generated_resources_fa.xtb +++ b/chromium/chrome/app/resources/generated_resources_fa.xtb @@ -1534,7 +1534,7 @@ <translation id="2964193600955408481">غیرفعال کردن Wi-Fi</translation> <translation id="2966449113954629791">ممکن است کلیه میزان مجاز دادههای دستگاه همراهتان را مصرف کرده باشید. برای خرید داده بیشتر از پورتال فعالسازی <ph name="NAME" /> بازدید کنید.</translation> <translation id="2966459079597787514">صفحهکلید سوئدی</translation> -<translation id="2966598748518102999">با ارسال صدای «Ok Google» و چند دقیقه قبل به Google، جستجوی صدا را بهبود بخشید.</translation> +<translation id="2966598748518102999">با ارسال صدای «Ok Google» و چند دقیقه قبل از آن به Google، جستجوی گفتاری را بهبود دهید.</translation> <translation id="2967544384642772068">بستن</translation> <translation id="2971033837577180453"><span>شناسه:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">کاهش روشنایی</translation> @@ -3213,7 +3213,7 @@ <translation id="5229189185761556138">مدیریت روشهای ورودی</translation> <translation id="5229622432348746578">غیرفعال کردن صوت برای اشتراکگذاری میزکار</translation> <translation id="5230516054153933099">پنجره</translation> -<translation id="5232178406098309195">وقتی از فرمانهای فعالسازی صوتی مانند «Ok Google» یا لمس نماد میکروفون استفاده میکنید، فعالیت صوتی و گفتاری خصوصی شما برخی از گفتارها و شنیدارهای دیگر را در حسابتان ذخیره میکند. مورد ضبط شدهای از گفتار/صدای بعد از آن به علاوه چند ثانیه قبل از آن، ذخیره میشود.</translation> +<translation id="5232178406098309195">وقتی از فرمانهای فعالسازی صوتی مانند «Ok Google» یا لمس نماد میکروفون استفاده میکنید، فعالیت صوتی و گفتاری خصوصی شما برخی از گفتارها و شنیدارهای دیگر را در حسابتان ذخیره میکند. گفتار/صوت ضبطشده بعد از آن بهعلاوه چند ثانیه قبل از آن ذخیره میشود.</translation> <translation id="523299859570409035">موارد استثنای اعلام</translation> <translation id="5233019165164992427">درگاه اشکالزدایی NaCl</translation> <translation id="5233231016133573565">شناسه فرایند</translation> @@ -5666,7 +5666,7 @@ <translation id="8565650234829130278">برای پایینتر آوردن نسخه برنامه تلاش کرد.</translation> <translation id="8569682776816196752">مقصدی یافت نشد</translation> <translation id="8569764466147087991">انتخاب فایلی برای باز کردن</translation> -<translation id="8571032220281885258">وقتی میگویید «Ok Google»، Chrome کلمه بعدی را که بازگو میکنید، جستجو میکند.</translation> +<translation id="8571032220281885258">وقتی میگویید «Ok Google»، Chrome کلمه بعدیای را که بگویید جستجو میکند.</translation> <translation id="8571108619753148184">سرور ۴</translation> <translation id="8574234089711453001">نمایش دکمه بارگیری را هنگام باز کردن صفحهای با نشانیوب رسانه مجاز میکند.</translation> <translation id="857779305329188634">پشتیبانی پروتکل QUIC آزمایشی را به کار بیندازید.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_fr.xtb b/chromium/chrome/app/resources/generated_resources_fr.xtb index 0187c1c21eb..cb92fed23e3 100644 --- a/chromium/chrome/app/resources/generated_resources_fr.xtb +++ b/chromium/chrome/app/resources/generated_resources_fr.xtb @@ -1536,7 +1536,7 @@ Je ne pense pas que ce site devrait être bloqué.</translation> <translation id="2964193600955408481">Désactiver le réseau Wi-Fi</translation> <translation id="2966449113954629791">Il semble que vous ayez utilisé l'intégralité de votre quota de données mobiles. Accédez au portail d'activation <ph name="NAME" /> pour acheter des données supplémentaires.</translation> <translation id="2966459079597787514">Clavier suédois</translation> -<translation id="2966598748518102999">Améliorer la recherche vocale en envoyant à Google l'enregistrement "OK Google", et les quelques secondes précédentes</translation> +<translation id="2966598748518102999">Améliorer la recherche vocale en envoyant à Google l'enregistrement "Ok Google", et les quelques secondes précédentes</translation> <translation id="2967544384642772068">Fermer</translation> <translation id="2971033837577180453"><span>ID :</span> <ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">baisser la luminosité</translation> @@ -1760,7 +1760,7 @@ Pour vérifier ce point et en savoir plus, veuillez consulter votre compte de me <translation id="3251759466064201842"><Ne fait pas partie du certificat></translation> <translation id="3252266817569339921">Français</translation> <translation id="3254434849914415189">Sélectionnez l'application par défaut pour les fichiers <ph name="FILE_TYPE" /> :</translation> -<translation id="3255228561559750854">Effectuez une recherche ou dites "OK Google"</translation> +<translation id="3255228561559750854">Effectuez une recherche ou dites "Ok Google"</translation> <translation id="3257011895468050906">Activer Token Binding</translation> <translation id="3260892921936048802">&Télécharger…</translation> <translation id="326356299252142602">Utiliser l'API Windows Runtime MIDI</translation> @@ -5621,7 +5621,7 @@ Calcul de la durée restante</translation> <translation id="8487700953926739672">Disponible hors connexion</translation> <translation id="8490896350101740396">Les applications kiosque "<ph name="UPDATED_APPS" />" ont bien été mises à jour. Veuillez redémarrer l'appareil afin de terminer la procédure.</translation> <translation id="8493236660459102203">Micro :</translation> -<translation id="8495193314787127784">Activer "OK Google"</translation> +<translation id="8495193314787127784">Activer "Ok Google"</translation> <translation id="8496717697661868878">Exécuter ce plug-in</translation> <translation id="8497392509610708671">Vous pouvez modifier cette option à tout moment dans les <ph name="BEGIN_LINK" />Paramètres de Chrome<ph name="END_LINK" />.</translation> <translation id="8498716162437226120">Ajouter un appareil Bluetooth</translation> @@ -5670,7 +5670,7 @@ Calcul de la durée restante</translation> <translation id="8565650234829130278">Tentative de passage à une version antérieure de l'application.</translation> <translation id="8569682776816196752">Aucun emplacement de destination trouvé.</translation> <translation id="8569764466147087991">Sélectionnez le fichier à ouvrir</translation> -<translation id="8571032220281885258">Lorsque vous dites "OK Google", les termes que vous énoncez ensuite font l'objet d'une recherche dans Chrome.</translation> +<translation id="8571032220281885258">Lorsque vous dites "Ok Google", les termes que vous énoncez ensuite font l'objet d'une recherche dans Chrome.</translation> <translation id="8571108619753148184">Serveur 4</translation> <translation id="8574234089711453001">Affiche un bouton de téléchargement lors de l'ouverture d'une page associée à une URL de média.</translation> <translation id="857779305329188634">Permet d'activer la compatibilité du protocole expérimental QUIC.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_hi.xtb b/chromium/chrome/app/resources/generated_resources_hi.xtb index 53916fa412f..24208b30a46 100644 --- a/chromium/chrome/app/resources/generated_resources_hi.xtb +++ b/chromium/chrome/app/resources/generated_resources_hi.xtb @@ -5161,7 +5161,7 @@ <translation id="7881969471599061635">उपशीर्षक अक्षम करें</translation> <translation id="7882358943899516840">प्रदाता का प्रकार</translation> <translation id="7885253890047913815">हाल ही के गंतव्य</translation> -<translation id="7887192723714330082">स्क्रीन के चालू होने तथा अनलॉक होने पर "Ok Google" को प्रतिसाद दें</translation> +<translation id="7887192723714330082">स्क्रीन के चालू होने तथा अनलॉक होने पर "Ok Google" को प्रतिक्रिया दें</translation> <translation id="7887334752153342268">डुप्लिकेट</translation> <translation id="7887864092952184874">ब्लूटूथ माउस युग्मित किया गया</translation> <translation id="7892100671754994880">अगला उपयोगकर्ता</translation> diff --git a/chromium/chrome/app/resources/generated_resources_hr.xtb b/chromium/chrome/app/resources/generated_resources_hr.xtb index 64a6b6f3e1c..e58259d4cc7 100644 --- a/chromium/chrome/app/resources/generated_resources_hr.xtb +++ b/chromium/chrome/app/resources/generated_resources_hr.xtb @@ -610,7 +610,7 @@ <translation id="1763108912552529023">Nastavi istraživati</translation> <translation id="1764226536771329714">beta</translation> <translation id="176587472219019965">&Novi prozor</translation> -<translation id="1766352429832934452">Omogućeno (potrebno za upotrebu značajke "OK Google")</translation> +<translation id="1766352429832934452">Omogućeno (potrebno za upotrebu značajke "Ok Google")</translation> <translation id="1769104665586091481">Otvori vezu u novom &prozoru</translation> <translation id="1772267994638363865">Da biste to postigli, morat ćete omogućiti Glasovnu i audioaktivnost i obučiti svoj uređaj <ph name="DEVICE_TYPE" /> na sljedeći način.</translation> <translation id="1773212559869067373">Certifikat za autentifikaciju odbijen je lokalno</translation> @@ -735,7 +735,7 @@ <translation id="1934636348456381428">Omogućuje se primjena eksperimentalnih klizača preklapanja. Također morate omogućiti slaganje nitima kako bi se klizači animirali.</translation> <translation id="1936157145127842922">Prikaži u mapi</translation> <translation id="1936717151811561466">Finski</translation> -<translation id="1937256809970138538">Recite "OK Google" kada zaslon bude uključen i otključan</translation> +<translation id="1937256809970138538">Recite "Ok Google" kada zaslon bude uključen i otključan</translation> <translation id="1942765061641586207">Razlučivost slike</translation> <translation id="1944921356641260203">Pronađeno je ažuriranje</translation> <translation id="1947424002851288782">Njemačka tipkovnica</translation> @@ -1476,7 +1476,7 @@ Mislim da ta web-lokacija ne bi trebala biti blokirana!</translation> <translation id="2890678560483811744">Referenca na stranicu izvan je granica</translation> <translation id="2893168226686371498">Zadani preglednik</translation> <translation id="289426338439836048">Druga mobilna mreža...</translation> -<translation id="2894745200702272315">Omogućuje eksperimentalnu verziju značajki otkrivanja pokretača značajke "OK Google" ovisnih o hardveru.</translation> +<translation id="2894745200702272315">Omogućuje eksperimentalnu verziju značajki otkrivanja pokretača značajke "Ok Google" ovisnih o hardveru.</translation> <translation id="289644616180464099">SIM kartica je zaključana</translation> <translation id="289695669188700754">ID ključa: <ph name="KEY_ID" /></translation> <translation id="2897878306272793870">Jeste li sigurni da želite otvoriti <ph name="TAB_COUNT" /> kartica?</translation> @@ -1704,7 +1704,7 @@ Više informacija potražite u našem <ph name="BEGIN_LINK" />centru za pomoć<p <translation id="3162559335345991374">Za Wi-Fi koji upotrebljavate možda ćete morati posjetiti stranicu za prijavu.</translation> <translation id="316307797510303346">Upravljajte web-lokacijama koje ova osoba posjeti i prikazujte ih putem računa <ph name="CUSTODIAN_EMAIL" />. Vaši su podaci za prijavu zastarjeli.</translation> -<translation id="3166571619128686629">Kliknite ili recite "OK Google" da biste pokrenuli glasovno pretraživanje</translation> +<translation id="3166571619128686629">Kliknite ili recite "Ok Google" da biste pokrenuli glasovno pretraživanje</translation> <translation id="3170072451822350649">Možete također preskočiti prijavu i <ph name="LINK_START" />pregledavati kao gost<ph name="LINK_END" />.</translation> <translation id="3170544058711792988">Zadrži fokus povećala na sredini zaslona</translation> <translation id="317583078218509884">Nove postavke dozvola za web-lokacije postat će aktivne nakon ponovnog učitavanja stranice.</translation> @@ -1753,7 +1753,7 @@ Više informacija potražite u našem <ph name="BEGIN_LINK" />centru za pomoć<p <translation id="3241720467332021590">Irski</translation> <translation id="3242118113727675434">Prikaži naglavni zaslon za dodirne točke</translation> <translation id="3242765319725186192">Unaprijed podijeljen ključ:</translation> -<translation id="3244621381664913240">Omogući "OK Google" za pokretanje glasovnog pretraživanja</translation> +<translation id="3244621381664913240">Omogući "Ok Google" za pokretanje glasovnog pretraživanja</translation> <translation id="3245321423178950146">Nepoznati izvođač</translation> <translation id="324533084080637716">S oznakama strukturiranim kao članak</translation> <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – mrežna pogreška</translation> @@ -2696,7 +2696,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation> <translation id="4533259260976001693">Smanji/proširi</translation> <translation id="4533985347672295764">Vrijeme CPU-a</translation> <translation id="4534166495582787863">Omogućuje klik s tri prsta na dodirnoj podlozi kao srednji gumb.</translation> -<translation id="4534799089889278411">Recite "OK Google" na novoj kartici, web-lokaciji google.com i u Pokretaču aplikacija</translation> +<translation id="4534799089889278411">Recite "Ok Google" na novoj kartici, web-lokaciji google.com i u Pokretaču aplikacija</translation> <translation id="4535127706710932914">Zadani profil</translation> <translation id="4538417792467843292">Izbriši riječ</translation> <translation id="4538684596480161368">Uvijek blokiraj dodatke izvan testnog okruženja na <ph name="HOST" /></translation> @@ -3216,7 +3216,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation> <translation id="5229189185761556138">Upravljaj načinima unosa</translation> <translation id="5229622432348746578">Onemogući audio za dijeljenje radne površine</translation> <translation id="5230516054153933099">Prozor</translation> -<translation id="5232178406098309195">Kada upotrebljavate zvučne aktivacijske naredbe kao što je "OK Google" ili dodirivanje ikone mikrofona, vaša privatna Glasovna i audioaktivnost pohranjuje neke glasovne i ostale zvučne podatke na vaš račun. Pohranit će se snimka govora i zvuka koji će uslijediti i nekoliko sekundi prije toga.</translation> +<translation id="5232178406098309195">Kada upotrebljavate zvučne aktivacijske naredbe kao što je "Ok Google" ili dodirivanje ikone mikrofona, vaša privatna Glasovna i audioaktivnost pohranjuje neke glasovne i ostale zvučne podatke na vaš račun. Pohranit će se snimka govora i zvuka koji će uslijediti i nekoliko sekundi prije toga.</translation> <translation id="523299859570409035">Iznimke za obavijesti</translation> <translation id="5233019165164992427">Priključak za otklanjanje pogrešaka lokalnog klijenta</translation> <translation id="5233231016133573565">ID procesa</translation> @@ -3235,7 +3235,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation> <translation id="5249624017678798539">Preglednik se srušio prije nego što je preuzimanje dovršeno.</translation> <translation id="5252456968953390977">Roaming</translation> <translation id="5252653240322147470">Broj znamenki u PIN-u mora biti manji od <ph name="MAXIMUM" /></translation> -<translation id="5253753933804516447">Omogući "OK Google" za glasovno pretraživanje kada je zaslon uključen i otključan</translation> +<translation id="5253753933804516447">Omogući "Ok Google" za glasovno pretraživanje kada je zaslon uključen i otključan</translation> <translation id="52550593576409946">Aplikacija kioska nije pokrenuta.</translation> <translation id="5255315797444241226">Zaporka koju ste unijeli nije točna.</translation> <translation id="5260508466980570042">Žao nam je, nije bilo moguće potvrditi e-adresu ili zaporku. Pokušajte ponovo.</translation> @@ -3811,7 +3811,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation> <translation id="6011449291337289699">Brisanje podataka web-lokacija</translation> <translation id="6015796118275082299">Godina</translation> <translation id="6016551720757758985">Potvrda Powerwasha uz povratak na prethodnu verziju</translation> -<translation id="6016809788585079594">Recite "OK Google" još samo jedanput</translation> +<translation id="6016809788585079594">Recite "Ok Google" još samo jedanput</translation> <translation id="6016972670657536680">Gumb za odabir jezika i tipkovnice. Trenutačno je odabran <ph name="LANGUAGE" />.</translation> <translation id="6017225534417889107">Promijeni...</translation> <translation id="6017981840202692187">Dodavanje u Aplikacije</translation> @@ -3879,7 +3879,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation> <translation id="6105158702728922449">upotrijebiti vašu kameru i mikrofon</translation> <translation id="6105877918873366097">Zadnji pristup</translation> <translation id="6107012941649240045">Izdano za</translation> -<translation id="6107079717483424262">prepoznati vaš glas kada kažete "OK Google"</translation> +<translation id="6107079717483424262">prepoznati vaš glas kada kažete "Ok Google"</translation> <translation id="6109228527970300988">Emojiji, unos rukopisom i glasovni unos na dodatnom IME izborniku</translation> <translation id="6111770213269631447">transliteracija (namaskar → নমস্কার)</translation> <translation id="6112952769866305444">Uređivanje osobe, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation> @@ -3922,7 +3922,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation> <translation id="6165508094623778733">Saznajte više</translation> <translation id="6166185671393271715">Uvoz zaporki u Chrome</translation> <translation id="6169666352732958425">Emitiranje radne površine nije moguće.</translation> -<translation id="6171550060231646388">Simulirane hardverske značajke za "OK Google"</translation> +<translation id="6171550060231646388">Simulirane hardverske značajke za "Ok Google"</translation> <translation id="6171948306033499786">Pauziraj ispis</translation> <translation id="6175314957787328458">Microsoft Domain GUID</translation> <translation id="6178664161104547336">Odabir certifikata</translation> @@ -4549,7 +4549,7 @@ Tu značajku upotrebljavajte samo s pouzdanim računima.</translation> <translation id="7012372675181957985">Na Google računu možda postoje drugi oblici povijesti pregledavanja na stranici <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation> <translation id="7013485839273047434">Nabavi više proširenja</translation> <translation id="7014174261166285193">Instalacija nije uspjela.</translation> -<translation id="7017004637493394352">Ponovo recite "OK Google"</translation> +<translation id="7017004637493394352">Ponovo recite "Ok Google"</translation> <translation id="7017219178341817193">Dodaj novu stranicu</translation> <translation id="7017354871202642555">Nakon postavljanja prozora nije moguće postaviti način.</translation> <translation id="7017480957358237747">dopustiti ili zabraniti određene web-lokacije</translation> @@ -4706,7 +4706,7 @@ Tu značajku upotrebljavajte samo s pouzdanim računima.</translation> <translation id="7238585580608191973">SHA-256 otisak prsta</translation> <translation id="7240120331469437312">Zamjenski naziv predmeta certifikata</translation> <translation id="7241389281993241388">Prijavite se na uređaj <ph name="TOKEN_NAME" /> kako biste uvezli certifikat klijenta.</translation> -<translation id="7243055093079293866">Recite "OK Google" u novoj kartici i na google.com</translation> +<translation id="7243055093079293866">Recite "Ok Google" u novoj kartici i na google.com</translation> <translation id="7243632151880336635">Izbriši i odjavi se</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (najbolje)</translation> <translation id="7246947237293279874">FTP proxy</translation> @@ -4787,7 +4787,7 @@ Tu značajku upotrebljavajte samo s pouzdanim računima.</translation> <translation id="7361824946268431273">Brže, jednostavnije i sigurnije računalo</translation> <translation id="7364796246159120393">Odaberi datoteku</translation> <translation id="736515969993332243">Skeniranje mreža.</translation> -<translation id="7366762109661450129">Recite "OK Google" kad je zaslon uključen i otključan.</translation> +<translation id="7366762109661450129">Recite "Ok Google" kad je zaslon uključen i otključan.</translation> <translation id="7366909168761621528">Podaci o pregledavanju</translation> <translation id="7369521049655330548">Na toj su stranici blokirani sljedeći dodaci:</translation> <translation id="7371490661692457119">Zadana širina razlomljenog elementa</translation> @@ -4910,10 +4910,10 @@ Tu značajku upotrebljavajte samo s pouzdanim računima.</translation> <translation id="7517569744831774757">Vraćanje postavki na njihove izvorne zadane vrijednosti.</translation> <translation id="7517786267097410259">Izrada zaporke –</translation> <translation id="7518150891539970662">WebRTC zapisnici (<ph name="WEBRTC_LOG_COUNT" />)</translation> -<translation id="7518657099163789435">Za upotrebu značajke "OK Google" potrebna je Glasovna i audioaktivnost</translation> +<translation id="7518657099163789435">Za upotrebu značajke "Ok Google" potrebna je Glasovna i audioaktivnost</translation> <translation id="7520821146909122639">Stranica se prevodi...</translation> <translation id="7521387064766892559">JavaScript</translation> -<translation id="7522255036471229694">Recite "OK Google"</translation> +<translation id="7522255036471229694">Recite "Ok Google"</translation> <translation id="7525067979554623046">Stvori</translation> <translation id="7529471622666797993"><ph name="BEGIN_LINK" />Napredne postavke fonta<ph name="END_LINK" /> (potrebno je proširenje)</translation> <translation id="7530016656428373557">Stopa pražnjenja u vatima</translation> @@ -5160,7 +5160,7 @@ Tu značajku upotrebljavajte samo s pouzdanim računima.</translation> <translation id="7881969471599061635">Onemogući titlove</translation> <translation id="7882358943899516840">Vrsta davatelja usluge</translation> <translation id="7885253890047913815">Nedavna odredišta</translation> -<translation id="7887192723714330082">Odgovoriti na "OK Google" kada je zaslon uključen i otključan</translation> +<translation id="7887192723714330082">Odgovoriti na "Ok Google" kada je zaslon uključen i otključan</translation> <translation id="7887334752153342268">Udvostruči</translation> <translation id="7887864092952184874">Bluetooth miš uparen</translation> <translation id="7892100671754994880">Sljedeći korisnik</translation> @@ -5310,7 +5310,7 @@ Ključnu datoteku čuvajte na sigurnom mjestu. Trebat će vam za stvaranje novih <translation id="806812017500012252">Poredaj po naslovu</translation> <translation id="8069615408251337349">Google Cloud Print</translation> <translation id="8071432093239591881">Ispiši kao sliku</translation> -<translation id="8071942001314758122">Samo recite "OK Google" tri puta</translation> +<translation id="8071942001314758122">Samo recite "Ok Google" tri puta</translation> <translation id="8072988827236813198">Prikvači kartice</translation> <translation id="8074127646604999664">Dopusti nedavno zatvorenim web-lokacijama dovršetak slanja i primanja podataka</translation> <translation id="8075191520954018715">Stanje memorije</translation> diff --git a/chromium/chrome/app/resources/generated_resources_hu.xtb b/chromium/chrome/app/resources/generated_resources_hu.xtb index d7ba01100ca..df6d9269d04 100644 --- a/chromium/chrome/app/resources/generated_resources_hu.xtb +++ b/chromium/chrome/app/resources/generated_resources_hu.xtb @@ -610,7 +610,7 @@ <translation id="1763108912552529023">A felfedezés folytatása</translation> <translation id="1764226536771329714">béta</translation> <translation id="176587472219019965">Új &ablak</translation> -<translation id="1766352429832934452">Engedélyezve (szükséges az „OK Google” használatához)</translation> +<translation id="1766352429832934452">Engedélyezve (szükséges az „Ok Google” használatához)</translation> <translation id="1769104665586091481">Link megnyitása új &ablakban</translation> <translation id="1772267994638363865">Ennek eléréséhez a következő lépésekben be kell kapcsolnia a Hang- és audiotevékenységeket, valamint be kell tanítania <ph name="DEVICE_TYPE" /> eszközét.</translation> <translation id="1773212559869067373">A hitelesítési tanúsítvány helyileg elutasítva</translation> @@ -1537,7 +1537,7 @@ Miután létrehozott egy új felügyelt felhasználót, bármikor és bármilyen <translation id="2964193600955408481">Wi-Fi letiltása</translation> <translation id="2966449113954629791">Valószínűleg elérte a mobiladat-használatra vonatkozó korlátozást. További adatforgalom vásárlásához keresse fel a(z) <ph name="NAME" /> aktiválási portált.</translation> <translation id="2966459079597787514">Svéd billentyűzet</translation> -<translation id="2966598748518102999">A Hangalapú keresés javítása azáltal, hogy elküldi az „OK Google” kifejezést néhány megelőző másodperccel együtt a Google számára.</translation> +<translation id="2966598748518102999">A Hangalapú keresés javítása azáltal, hogy elküldi az „Ok Google” kifejezést néhány megelőző másodperccel együtt a Google számára.</translation> <translation id="2967544384642772068">Bezárás</translation> <translation id="2971033837577180453"><span>Azonosító:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">sötétítés</translation> @@ -1761,7 +1761,7 @@ Ha további információt szeretne, látogasson el a <ph name="BEGIN_LINK" />Sú <translation id="3251759466064201842"><Nem része a tanúsítványnak></translation> <translation id="3252266817569339921">francia</translation> <translation id="3254434849914415189">Válassza ki az alapértelmezett alkalmazást <ph name="FILE_TYPE" />-fájlokhoz:</translation> -<translation id="3255228561559750854">Végezzen keresést, vagy mondja azt, hogy „Oké, Google!”</translation> +<translation id="3255228561559750854">Végezzen keresést, vagy mondja azt, hogy „Ok Google!”</translation> <translation id="3257011895468050906">A Token Binding támogatásának engedélyezése.</translation> <translation id="3260892921936048802">&Letöltés…</translation> <translation id="326356299252142602">A Windows Runtime MIDI API használata</translation> @@ -2208,7 +2208,7 @@ Innen: <ph name="DOWNLOAD_DOMAIN" /></translation> <translation id="3812525830114410218">Helytelen tanúsítvány</translation> <translation id="3812568885510197014">Az internetes űrlapokat automatikus kitöltési aláírásokkal mint HTML-attribútumokkal látja el.</translation> <translation id="3813296892522778813">Ha nem találja, amit keres, próbálkozzon a <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome súgójában<ph name="END_LINK_CHROMIUM" /></translation> -<translation id="3813984289128269159">OK Google</translation> +<translation id="3813984289128269159">Ok Google</translation> <translation id="3815016854028376614">Zujin beviteli mód</translation> <translation id="3815571115159309122"><ph name="FILE_COUNT" /> új fotó észlelve <ph name="LINE_BREAK1" /> @@ -5669,7 +5669,7 @@ letiltásához nyomja le a Ctrl+Alt+Z billentyűkombinációt.</translation> <translation id="8565650234829130278">Megpróbálta alacsonyabb verzióra váltani az alkalmazást.</translation> <translation id="8569682776816196752">Nem található célhely</translation> <translation id="8569764466147087991">Válassza ki a megnyitni kívánt fájlt</translation> -<translation id="8571032220281885258">Amikor kimondja azt, hogy „OK Google”, a Chrome elindítja az Ön által ezt követően kimondott szavak keresését.</translation> +<translation id="8571032220281885258">Amikor kimondja azt, hogy „Ok Google”, a Chrome elindítja az Ön által ezt követően kimondott szavak keresését.</translation> <translation id="8571108619753148184">4. szerver</translation> <translation id="8574234089711453001">Letöltés gomb megjelenésének engedélyezése média URL-lel rendelkező oldal megnyitása esetén.</translation> <translation id="857779305329188634">A kísérleti QUIC protokolltámogatás engedélyezése.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_id.xtb b/chromium/chrome/app/resources/generated_resources_id.xtb index 19baf29cd33..cab9604ea06 100644 --- a/chromium/chrome/app/resources/generated_resources_id.xtb +++ b/chromium/chrome/app/resources/generated_resources_id.xtb @@ -811,7 +811,7 @@ <translation id="2074527029802029717">Lepas sematan tab</translation> <translation id="2075594581020578008">Browser <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="2076269580855484719">Sembunyikan plugin ini</translation> -<translation id="2077129598763517140">Gunakan percepatan perangkat keras saat tersedia</translation> +<translation id="2077129598763517140">Gunakan akselerasi hardware jika tersedia</translation> <translation id="2078019350989722914">Peringatan Sebelum Berhenti (<ph name="KEY_EQUIVALENT" />)</translation> <translation id="2079053412993822885">Jika salah satu sertifikat dihapus, Anda tidak akan dapat lagi menggunakannya untuk mengidentifikasi diri Anda.</translation> <translation id="2079545284768500474">Urungkan</translation> @@ -5074,7 +5074,7 @@ Hanya gunakan fitur ini dengan akun yang Anda percayai.</translation> <translation id="7765158879357617694">Pindahkan</translation> <translation id="7766807826975222231">Ikuti tur</translation> <translation id="7767646430896201896">Opsi:</translation> -<translation id="7768784765476638775">Pilih untuk berbicara</translation> +<translation id="7768784765476638775">Klik untuk diucapkan</translation> <translation id="7769353642898261262">Cara mengamankan ponsel</translation> <translation id="7769672763586021400">ID Model</translation> <translation id="7771452384635174008">Tata letak</translation> diff --git a/chromium/chrome/app/resources/generated_resources_it.xtb b/chromium/chrome/app/resources/generated_resources_it.xtb index c55a0db5fa9..d7ae0a4f818 100644 --- a/chromium/chrome/app/resources/generated_resources_it.xtb +++ b/chromium/chrome/app/resources/generated_resources_it.xtb @@ -121,7 +121,7 @@ <translation id="1166212789817575481">Chiudi schede a destra</translation> <translation id="1168020859489941584"><ph name="TIME_REMAINING" /> all'apertura del file...</translation> <translation id="1171000732235946541">Questo metodo di immissione potrebbe essere in grado di memorizzare tutto il testo digitato, inclusi dati personali quali password e numeri di carte di credito. Proviene dall'estensione "<ph name="EXTENSION_NAME" />". Utilizzare questo metodo di immissione?</translation> -<translation id="1171135284592304528">Evidenzia l'oggetto con l'elemento attivo della tastiera quando cambia</translation> +<translation id="1171135284592304528">Evidenzia l'oggetto con lo stato attivo della tastiera quando cambia</translation> <translation id="1173894706177603556">Rinomina</translation> <translation id="1175364870820465910">&Stampa...</translation> <translation id="117624967391683467">Copia di <ph name="FILE_NAME" />...</translation> @@ -1535,7 +1535,7 @@ Non credo che questo sito debba essere bloccato.</translation> <translation id="2964193600955408481">Disattiva Wi-Fi</translation> <translation id="2966449113954629791">Potresti avere esaurito la tua quota di dati mobili. Visita il portale di attivazione <ph name="NAME" /> per acquistare altri dati.</translation> <translation id="2966459079597787514">Tastiera svedese</translation> -<translation id="2966598748518102999">Migliora la ricerca vocale inviando a Google l'audio di "OK Google" e di alcuni secondi precedenti.</translation> +<translation id="2966598748518102999">Migliora la ricerca vocale inviando a Google l'audio di "Ok Google" e di alcuni secondi precedenti.</translation> <translation id="2967544384642772068">Termina</translation> <translation id="2971033837577180453"><span>ID:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">riduci luminosità</translation> @@ -1759,7 +1759,7 @@ I dati di accesso del tuo account sono obsoleti.</translation> <translation id="3251759466064201842"><Non parte del certificato></translation> <translation id="3252266817569339921">Francese</translation> <translation id="3254434849914415189">Seleziona l'applicazione predefinita per i file <ph name="FILE_TYPE" />:</translation> -<translation id="3255228561559750854">Effettua una ricerca o dì "OK Google"</translation> +<translation id="3255228561559750854">Effettua una ricerca o dì "Ok Google"</translation> <translation id="3257011895468050906">Consente di attivare il supporto di Token Binding.</translation> <translation id="3260892921936048802">&Scarica...</translation> <translation id="326356299252142602">Utilizza API Windows Runtime MIDI</translation> @@ -3872,7 +3872,7 @@ Premi un tasto qualsiasi per continuare a esplorare.</translation> <translation id="6105158702728922449">Utilizzare la videocamera e il microfono</translation> <translation id="6105877918873366097">Ultimo accesso</translation> <translation id="6107012941649240045">Rilasciato a</translation> -<translation id="6107079717483424262">Riconoscere la tua voce quando pronunci "Ok Google"</translation> +<translation id="6107079717483424262">Riconoscere la tua voce quando dici "Ok Google"</translation> <translation id="6109228527970300988">Emoji, scrittura a mano libera e input vocale nel menu IME</translation> <translation id="6111770213269631447">Traslitterazione (namaskar → নমস্কার)</translation> <translation id="6112952769866305444">Modifica persona, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation> @@ -4895,7 +4895,7 @@ Utilizza questa funzione solo con gli account che consideri attendibili.</transl <translation id="7512768521598401899">Consenti alle pagine web di utilizzare la clonazione strutturata di WebAssembly.</translation> <translation id="7514722502805496245">Consente il download in background delle pagine se la pagina non è stata ancora caricata nella scheda corrente.</translation> <translation id="751507702149411736">Bielorusso</translation> -<translation id="7517569744831774757">Ripristina le impostazioni con i valori originali predefiniti.</translation> +<translation id="7517569744831774757">Ripristina le impostazioni predefinite originali.</translation> <translation id="7517786267097410259">Crea una password -</translation> <translation id="7518150891539970662">Log WebRTC (<ph name="WEBRTC_LOG_COUNT" />)</translation> <translation id="7518657099163789435">Per poter utilizzare "Ok Google" è necessario attivare l'Attività vocale e audio</translation> @@ -5604,7 +5604,7 @@ Conserva il file di chiave in un luogo sicuro. Ti servirà per creare nuove vers <translation id="8487700953926739672">Disponibile offline</translation> <translation id="8490896350101740396">Le seguenti app kiosk "<ph name="UPDATED_APPS" />" sono state aggiornate. Riavvia il dispositivo per completare la procedura di aggiornamento.</translation> <translation id="8493236660459102203">Microfono:</translation> -<translation id="8495193314787127784">Attiva "OK Google"</translation> +<translation id="8495193314787127784">Attiva "Ok Google"</translation> <translation id="8496717697661868878">Esegui questo plug-in</translation> <translation id="8497392509610708671">Puoi modificare questa impostazione in qualsiasi momento nelle <ph name="BEGIN_LINK" />Impostazioni Chrome<ph name="END_LINK" />.</translation> <translation id="8498716162437226120">Aggiungi dispositivo Bluetooth</translation> @@ -5653,7 +5653,7 @@ Conserva il file di chiave in un luogo sicuro. Ti servirà per creare nuove vers <translation id="8565650234829130278">Hai tentato di eseguire il downgrade dell'applicazione.</translation> <translation id="8569682776816196752">Nessuna destinazione trovata</translation> <translation id="8569764466147087991">Seleziona un file da aprire</translation> -<translation id="8571032220281885258">Quando pronunci "OK Google", Chrome cercherà le parole che pronunci subito dopo.</translation> +<translation id="8571032220281885258">Quando dici "Ok Google", Chrome cercherà le parole che dici subito dopo.</translation> <translation id="8571108619753148184">Server 4</translation> <translation id="8574234089711453001">Consenti la visualizzazione di un pulsante Scarica all'apertura di una pagina con URL file multimediale.</translation> <translation id="857779305329188634">Consente di attivare il supporto del protocollo sperimentale QUIC.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_iw.xtb b/chromium/chrome/app/resources/generated_resources_iw.xtb index 615cdc8610e..d1ba7c8f8a9 100644 --- a/chromium/chrome/app/resources/generated_resources_iw.xtb +++ b/chromium/chrome/app/resources/generated_resources_iw.xtb @@ -1471,7 +1471,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur <translation id="2890678560483811744">התייחסות לדף מחוץ לטווח</translation> <translation id="2893168226686371498">דפדפן ברירת מחדל</translation> <translation id="289426338439836048">רשת אחרת לנייד...</translation> -<translation id="2894745200702272315">מאפשר גרסה ניסיונית של תכונות זיהוי מילות הפעלה ב-Ok Google בהתאם לחומרה.</translation> +<translation id="2894745200702272315">מאפשר גרסה ניסיונית של תכונות זיהוי מילות הפעלה ב-"Ok Google" בהתאם לחומרה.</translation> <translation id="289644616180464099">כרטיס ה-SIM נעול</translation> <translation id="289695669188700754">מזהה מפתח: <ph name="KEY_ID" /></translation> <translation id="2897878306272793870">האם אתה בטוח שברצונך לפתוח כרטיסיות <ph name="TAB_COUNT" />?</translation> @@ -1531,7 +1531,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur <translation id="2964193600955408481">השבת Wi-Fi</translation> <translation id="2966449113954629791">ייתכן שהשתמשת בכל מכסת הנתונים לנייד שלך. בקר בפורטל ההפעלה של <ph name="NAME" /> לרכישת נתונים נוספים.</translation> <translation id="2966459079597787514">מקלדת שוודית</translation> -<translation id="2966598748518102999">שפר את החיפוש הקולי על ידי שליחת הצליל "Ok Google," והקלטה של מספר שניות לפני כן, אל Google.</translation> +<translation id="2966598748518102999">שפר את החיפוש הקולי על ידי שליחת הצליל "Ok Google" והקלטה של מספר שניות לפני כן, אל Google.</translation> <translation id="2967544384642772068">חסל</translation> <translation id="2971033837577180453"><span>מזהה:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">הפחתת בהירות</translation> @@ -1754,7 +1754,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur <translation id="3251759466064201842"><לא חלק מהאישור></translation> <translation id="3252266817569339921">צרפתית</translation> <translation id="3254434849914415189">בחר את יישום ברירת המחדל עבור קובצי <ph name="FILE_TYPE" />:</translation> -<translation id="3255228561559750854">חפש, או אמור "Ok, Google"</translation> +<translation id="3255228561559750854">חפש, או אמור "Ok Google"</translation> <translation id="3257011895468050906">אפשר תמיכת Token Binding.</translation> <translation id="3260892921936048802">&הורד...</translation> <translation id="326356299252142602">שימוש ב-Windows Runtime MIDI API</translation> @@ -3917,7 +3917,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur <translation id="6165508094623778733">למידע נוסף</translation> <translation id="6166185671393271715">ייבוא סיסמאות אל Chrome</translation> <translation id="6169666352732958425">לא ניתן להעביר מהמחשב השולחני.</translation> -<translation id="6171550060231646388">הדמיית תכונות החומרה של Ok Google</translation> +<translation id="6171550060231646388">הדמיית תכונות החומרה של "Ok Google"</translation> <translation id="6171948306033499786">השהה הדפסה</translation> <translation id="6175314957787328458">Microsoft Domain GUID</translation> <translation id="6178664161104547336">בחר אישור</translation> @@ -5654,7 +5654,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur <translation id="8565650234829130278">בוצע ניסיון לשדרג יישום לאחור.</translation> <translation id="8569682776816196752">לא נמצאו יעדים</translation> <translation id="8569764466147087991">בחר קובץ לפתיחה</translation> -<translation id="8571032220281885258">כשתאמר "Ok Google," דפדפן Chrome יחפש את מה שתאמר לאחר מכן.</translation> +<translation id="8571032220281885258">כשתאמר ",Ok Google" דפדפן Chrome יחפש את מה שתאמר לאחר מכן.</translation> <translation id="8571108619753148184">שרת 4</translation> <translation id="8574234089711453001">התר הצגה של לחצן הורדה בפתיחת דף עם כתובת אתר של מדיה.</translation> <translation id="857779305329188634">הפעל תמיכה בפרוטוקול QUIC ניסיוני.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_ja.xtb b/chromium/chrome/app/resources/generated_resources_ja.xtb index 5be38623be9..a6648d48fda 100644 --- a/chromium/chrome/app/resources/generated_resources_ja.xtb +++ b/chromium/chrome/app/resources/generated_resources_ja.xtb @@ -736,7 +736,7 @@ <translation id="1934636348456381428">試験運用版オーバーレイ スクロールバーの実装を有効にします。スクロールバーをアニメーション化するにはスレッド合成も有効にする必要があります。</translation> <translation id="1936157145127842922">フォルダで表示</translation> <translation id="1936717151811561466">フィンランド語</translation> -<translation id="1937256809970138538">画面がオンでロック解除された状態で「OK Google」と話します</translation> +<translation id="1937256809970138538">画面がオンでロック解除された状態で「OK Google」と言います</translation> <translation id="1942765061641586207">画像解像度</translation> <translation id="1944921356641260203">アップデートが見つかりました</translation> <translation id="1947424002851288782">ドイツ語のキーボード</translation> @@ -1117,7 +1117,7 @@ <translation id="2470702053775288986">サポートされていない拡張機能が無効</translation> <translation id="2473195200299095979">このページを翻訳</translation> <translation id="2475982808118771221">エラーが発生しました</translation> -<translation id="2476578072172137802">サイト設定</translation> +<translation id="2476578072172137802">サイトの設定</translation> <translation id="247772113373397749">カナダ多言語キーボード</translation> <translation id="2478176599153288112">「<ph name="EXTENSION" />」のメディアファイル権限</translation> <translation id="2478830106132467213">手の届く範囲にスマートフォンがある場合のみ、この <ph name="DEVICE_TYPE" /> のロックを解除します。</translation> @@ -1705,7 +1705,7 @@ <translation id="3162559335345991374">ご利用の Wi-Fi ネットワークでは、ログインページへのアクセスが必要な可能性があります。</translation> <translation id="316307797510303346">このユーザーが <ph name="CUSTODIAN_EMAIL" /> からアクセスするウェブサイトを制御、閲覧する。 アカウントのログイン情報が古くなっています。</translation> -<translation id="3166571619128686629">クリックするか「OK Google」と発声して、音声検索を開始します</translation> +<translation id="3166571619128686629">クリックするか「OK Google」と言って、音声検索を開始します</translation> <translation id="3170072451822350649">ログインせずに<ph name="LINK_START" />ゲストとしてブラウジング<ph name="LINK_END" />することもできます。</translation> <translation id="3170544058711792988">拡大鏡のフォーカスを画面中央に固定</translation> <translation id="317583078218509884">サイトの新しい権限設定はページの再読み込み後に有効になります。</translation> @@ -1761,7 +1761,7 @@ <translation id="3251759466064201842"><証明書に含まれていません></translation> <translation id="3252266817569339921">フランス語</translation> <translation id="3254434849914415189"><ph name="FILE_TYPE" /> ファイルのデフォルト アプリを選択:</translation> -<translation id="3255228561559750854">検索するかOK Googleと発声</translation> +<translation id="3255228561559750854">検索するか OK Google と発声</translation> <translation id="3257011895468050906">Token Binding のサポートを有効にする。</translation> <translation id="3260892921936048802">ダウンロード(&D)...</translation> <translation id="326356299252142602">Windows Runtime MIDI API を使用する</translation> @@ -2697,7 +2697,7 @@ <translation id="4533259260976001693">折りたたむ/展開する</translation> <translation id="4533985347672295764">CPU 時間</translation> <translation id="4534166495582787863">タッチパッドの 3 本指タップをミドル ボタン(ホイール クリック)として認識する機能を有効にします。</translation> -<translation id="4534799089889278411">新しいタブ、google.co.jp、アプリ ランチャーで「OK Google」と発声します。</translation> +<translation id="4534799089889278411">新しいタブ、google.co.jp、アプリ ランチャーで「OK Google」と言います。</translation> <translation id="4535127706710932914">デフォルトのプロフィール</translation> <translation id="4538417792467843292">1 語削除する</translation> <translation id="4538684596480161368"><ph name="HOST" /> でサンドボックスの無効化プラグインを常にブロックする</translation> @@ -2881,7 +2881,7 @@ <translation id="4791148004876134991">Chrome アプリがアクティブになったときに Cmd+` の動作を変更します。有効な場合、ブラウザ ウィンドウから Cmd+` を押したときに Chrome アプリは切り替えられず、Chrome アプリがアクティブなときにブラウザ ウィンドウは切り替えられません。</translation> <translation id="4792711294155034829">問題の報告(&R)...</translation> <translation id="479280082949089240">このページで設定した Cookie</translation> -<translation id="4793866834012505469">音声モデルを再トレーニング</translation> +<translation id="4793866834012505469">音声モデルを再認識</translation> <translation id="479536056609751218">ウェブページ、HTML のみ</translation> <translation id="479989351350248267">検索</translation> <translation id="480036413855787547">どの端末からでも <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> でパスワードにアクセスできます。Mac では、パスワードをキーチェーンに保存して、この OS X アカウントを共有する別の Chrome ユーザーがアクセスしたり同期したりできます。</translation> @@ -3236,7 +3236,7 @@ <translation id="5249624017678798539">ダウンロードの完了前にブラウザで問題が発生しました。</translation> <translation id="5252456968953390977">ローミング</translation> <translation id="5252653240322147470">PIN は <ph name="MAXIMUM" /> 桁未満で指定してください</translation> -<translation id="5253753933804516447">画面がオンでロック解除された状態のときに、「OK Google」と話して音声検索ができるようにします</translation> +<translation id="5253753933804516447">画面がオンでロック解除された状態のときに、「OK Google」と言って音声検索ができるようにします</translation> <translation id="52550593576409946">キオスク アプリケーションを起動できませんでした。</translation> <translation id="5255315797444241226">入力したパスフレーズが正しくありません。</translation> <translation id="5260508466980570042">メールまたはパスワードを確認できませんでした。もう一度お試しください。</translation> @@ -3812,7 +3812,7 @@ <translation id="6011449291337289699">サイトデータの削除</translation> <translation id="6015796118275082299">年</translation> <translation id="6016551720757758985">Powerwash を実行して以前のバージョンに戻すことを確認</translation> -<translation id="6016809788585079594">最後にもう一度「OK Google」とお話しください</translation> +<translation id="6016809788585079594">最後にもう一度「OK Google」と言ってください</translation> <translation id="6016972670657536680">言語とキーボードのボタンを選択します。現在選択している言語は <ph name="LANGUAGE" /> です。</translation> <translation id="6017225534417889107">変更...</translation> <translation id="6017981840202692187">アプリケーションに追加</translation> @@ -3880,7 +3880,7 @@ <translation id="6105158702728922449">カメラとマイクを使用する</translation> <translation id="6105877918873366097">最終アクセス日</translation> <translation id="6107012941649240045">発行先</translation> -<translation id="6107079717483424262">「OK Google」と話したときにユーザーの声が認識されるようになりました</translation> +<translation id="6107079717483424262">「OK Google」と言ったときにユーザーの声が認識されるようになりました</translation> <translation id="6109228527970300988">IME メニューで絵文字、手書き、音声による入力を選択できるようにする</translation> <translation id="6111770213269631447">文字変換(namaskar → নমস্কার)</translation> <translation id="6112952769866305444">ユーザー(<ph name="PROFILE_NAME" />、<ph name="USERNAME" />)を編集</translation> @@ -4551,7 +4551,7 @@ <translation id="7012372675181957985">Google アカウントでの他の形式の閲覧履歴が <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> に残ることがあります</translation> <translation id="7013485839273047434">他の拡張機能を見る</translation> <translation id="7014174261166285193">インストールできませんでした。</translation> -<translation id="7017004637493394352">もう一度「OK Google」とお話しください</translation> +<translation id="7017004637493394352">もう一度「OK Google」と言ってください</translation> <translation id="7017219178341817193">新しいページを追加</translation> <translation id="7017354871202642555">ウィンドウが設定されている場合はモードを設定できません。</translation> <translation id="7017480957358237747">特定のウェブサイトへのアクセスを許可または禁止する</translation> @@ -4708,7 +4708,7 @@ <translation id="7238585580608191973">SHA-256 指紋</translation> <translation id="7240120331469437312">証明書のサブジェクトの代替名</translation> <translation id="7241389281993241388">クライアント証明書をインポートするには <ph name="TOKEN_NAME" /> にログインしてください。</translation> -<translation id="7243055093079293866">新しいタブで google.com を開き、「OK Google」と発声します</translation> +<translation id="7243055093079293866">新しいタブで google.com を開き、「OK Google」と言います</translation> <translation id="7243632151880336635">削除してログアウト</translation> <translation id="7245628041916450754"><ph name="WIDTH" />x<ph name="HEIGHT" />(最適)</translation> <translation id="7246947237293279874">FTP プロキシ</translation> @@ -4789,7 +4789,7 @@ <translation id="7361824946268431273">速く、シンプルで、安全なパソコン</translation> <translation id="7364796246159120393">ファイルを選択</translation> <translation id="736515969993332243">ネットワークをスキャンしています。</translation> -<translation id="7366762109661450129">画面がオンでロック解除されている状態で、「OK Google」と発声します。</translation> +<translation id="7366762109661450129">画面がオンでロック解除されている状態で、「OK Google」と言います。</translation> <translation id="7366909168761621528">閲覧履歴データ</translation> <translation id="7369521049655330548">このページの次のプラグインがブロックされました。</translation> <translation id="7371490661692457119">デフォルトのタイル幅</translation> @@ -4918,7 +4918,7 @@ <translation id="7518657099163789435">「OK Google」を使用するには音声アクティビティを有効にする必要があります</translation> <translation id="7520821146909122639">このページを翻訳しています...</translation> <translation id="7521387064766892559">Javascript</translation> -<translation id="7522255036471229694">「OK Google」とお話しください</translation> +<translation id="7522255036471229694">「OK Google」と言ってください</translation> <translation id="7525067979554623046">作成</translation> <translation id="7529471622666797993"><ph name="BEGIN_LINK" />フォントの詳細設定<ph name="END_LINK" />(拡張機能が必要です)</translation> <translation id="7530016656428373557">放電率(ワット)</translation> @@ -5315,7 +5315,7 @@ <translation id="806812017500012252">タイトルで並べ替え</translation> <translation id="8069615408251337349">Google クラウド プリント</translation> <translation id="8071432093239591881">画像として印刷する</translation> -<translation id="8071942001314758122">「OK Google」と 3 回話すだけです</translation> +<translation id="8071942001314758122">「OK Google」と 3 回言うだけです</translation> <translation id="8072988827236813198">複数のタブを固定</translation> <translation id="8074127646604999664">最近閉じたサイトがデータの送受信を完了できるようにする</translation> <translation id="8075191520954018715">メモリの状態</translation> @@ -5672,7 +5672,7 @@ <translation id="8565650234829130278">アプリのダウングレードが試行されました。</translation> <translation id="8569682776816196752">送信先が見つかりません</translation> <translation id="8569764466147087991">ファイルを選択して開く</translation> -<translation id="8571032220281885258">「OK Google」と話しかけると、その後に話す内容が Chrome で検索されます。</translation> +<translation id="8571032220281885258">「OK Google」と言うと、その後に話す内容が Chrome で検索されます。</translation> <translation id="8571108619753148184">サーバー 4</translation> <translation id="8574234089711453001">メディア URL のページを開くときにダウンロード ボタンが表示されるようにします。</translation> <translation id="857779305329188634">QUIC プロトコルのサポート(試験運用中)を有効にします。</translation> diff --git a/chromium/chrome/app/resources/generated_resources_kn.xtb b/chromium/chrome/app/resources/generated_resources_kn.xtb index 32a4182c38f..be1f9fb214b 100644 --- a/chromium/chrome/app/resources/generated_resources_kn.xtb +++ b/chromium/chrome/app/resources/generated_resources_kn.xtb @@ -1537,7 +1537,7 @@ <translation id="2964193600955408481">ವೈ-ಫೈ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="2966449113954629791">ನಿಮ್ಮ ಮೊಬೈಲ್ ಡೇಟಾ ಭತ್ಯೆಯನ್ನು ನೀವು ಬಳಸಿರಬಹುದು. ಹೆಚ್ಚಿನ ಡೇಟಾವನ್ನು ಖರೀದಿಸಲು <ph name="NAME" /> ಸಕ್ರಿಯೀಕರಣ ಪೋರ್ಟಲ್ಗೆ ಭೇಟಿ ನೀಡಿ.</translation> <translation id="2966459079597787514">ಸ್ವೀಡಿಶ್ ಕೀಬೋರ್ಡ್</translation> -<translation id="2966598748518102999">Google ಗೆ "ಸರಿ Google" ಎಂಬ ಶಬ್ದ ಕಳುಹಿಸಿ, ಆ ಮೂಲಕ ಕೆಲವು ನಿಮಿಷಗಳ ನಂತರ ಧ್ವನಿ ಹುಡುಕಾಟವನ್ನು ಸುಧಾರಿಸಿ.</translation> +<translation id="2966598748518102999">Google ಗೆ "Ok Google," ಎಂಬ ಶಬ್ದ ಕಳುಹಿಸಿ. ಆ ಮೂಲಕ ಕೆಲವು ನಿಮಿಷಗಳ ನಂತರ ಧ್ವನಿ ಹುಡುಕಾಟವನ್ನು ಸುಧಾರಿಸಿ.</translation> <translation id="2967544384642772068">ಸ್ಥಗಿತಗೊಳಿಸು</translation> <translation id="2971033837577180453"><span>ID:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">ಪ್ರಖರತೆ ಕಡಿಮೆ ಮಾಡಿ</translation> @@ -2206,7 +2206,7 @@ <translation id="3812525830114410218">ತಪ್ಪು ಪ್ರಮಾಣಪತ್ರ</translation> <translation id="3812568885510197014">ಸ್ವಯಂತುಂಬುವಿಕೆಯ ಸಹಿಗಳನ್ನು HTML ಆಟ್ರಿಬ್ಯೂಟ್ಗಳಂತೆ ವೆಬ್ ಫಾರ್ಮ್ಗಳನ್ನು ಟಿಪ್ಪಣಿಮಾಡುತ್ತದೆ.</translation> <translation id="3813296892522778813">ನೀವು ಹುಡುಕುತ್ತಿರುವುದು ದೊರೆಯದೇ ಇದ್ದರೆ <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome ಸಹಾಯ<ph name="END_LINK_CHROMIUM" />ಕ್ಕೆ ಹೋಗಿ</translation> -<translation id="3813984289128269159">ಸರಿ Google</translation> +<translation id="3813984289128269159">Ok Google</translation> <translation id="3815016854028376614">ಝುಯಿನ್ ಇನ್ಪುಟ್ ವಿಧಾನ</translation> <translation id="3815571115159309122"><ph name="FILE_COUNT" /> ಹೊಸ ಫೋಟೋಗಳು ಕಂಡುಬಂದಿವೆ <ph name="LINE_BREAK1" /> @@ -5675,7 +5675,7 @@ <translation id="8565650234829130278">ಅಪ್ಲಿಕೇಶನ್ ಕೆಳಮಟ್ಟಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸಲಾಗಿದೆ.</translation> <translation id="8569682776816196752">ಯಾವುದೇ ಗಮ್ಯಸ್ಥಾನಗಳು ಕಂಡುಬಂದಿಲ್ಲ</translation> <translation id="8569764466147087991">ತೆರೆಯಲು ಫೈಲ್ವೊಂದನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</translation> -<translation id="8571032220281885258">ನೀವು "ಸರಿ Google" ಎಂದು ಹೇಳಿದಾಗ, ನೀವು ನಂತರ ಹೇಳಬಹುದಾದ್ದನ್ನು Chrome ಹುಡುಕುತ್ತದೆ.</translation> +<translation id="8571032220281885258">ನೀವು "Ok Google" ಎಂದು ಹೇಳಿದರೆ ಸಾಕು, ಮುಂದೆ ನೀವು ಹೇಳುವುದನ್ನು Chrome ತಾನಾಗಿಯೇ ಹುಡುಕಿಕೊಳ್ಳುತ್ತದೆ.</translation> <translation id="8571108619753148184">ಸರ್ವರ್ 4</translation> <translation id="8574234089711453001">ಮಾಧ್ಯಮ url ಜೊತೆಗೆ ಪುಟ ತೆರೆಯುವಾಗ ಡೌನ್ಲೋಡ್ ಬಟನ್ ಕಾಣಿಸಿಕೊಳ್ಳಲು ಅನುಮತಿಸಿ.</translation> <translation id="857779305329188634">ಪ್ರಾಯೋಗಿಕ QUIC ಪ್ರೋಟೋಕಾಲ್ ಬೆಂಬಲವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_ko.xtb b/chromium/chrome/app/resources/generated_resources_ko.xtb index ed18c8a4af9..2fcca1e5456 100644 --- a/chromium/chrome/app/resources/generated_resources_ko.xtb +++ b/chromium/chrome/app/resources/generated_resources_ko.xtb @@ -1199,7 +1199,7 @@ <translation id="2565670301826831948">터치패드 속도:</translation> <translation id="2566124945717127842">Powerwash는 <ph name="IDS_SHORT_PRODUCT_NAME" /> 기기를 재설정하여 새것처럼 만듭니다.</translation> <translation id="2568774940984945469">정보 표시줄 컨테이너</translation> -<translation id="2570000010887652771">데이터가 저장되었습니다.</translation> +<translation id="2570000010887652771">데이터를 절약했습니다.</translation> <translation id="2570648609346224037">복구 이미지를 다운로드하는 중에 문제가 발생했습니다.</translation> <translation id="257088987046510401">테마</translation> <translation id="2572032849266859634"><ph name="VOLUME_NAME" />에 대한 읽기 전용 액세스가 허용되었습니다.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_mr.xtb b/chromium/chrome/app/resources/generated_resources_mr.xtb index b0abc458f19..eca6cd8a6d7 100644 --- a/chromium/chrome/app/resources/generated_resources_mr.xtb +++ b/chromium/chrome/app/resources/generated_resources_mr.xtb @@ -1755,7 +1755,7 @@ <translation id="3251759466064201842"><प्रमाणपत्राचा भाग नाही></translation> <translation id="3252266817569339921">फ्रेंच</translation> <translation id="3254434849914415189"><ph name="FILE_TYPE" /> फायलींसाठी डीफॉल्ट अनुप्रयोग निवडा:</translation> -<translation id="3255228561559750854">शोधा किंवा "ओके, Google" म्हणा</translation> +<translation id="3255228561559750854">शोधा किंवा "Ok Google" म्हणा</translation> <translation id="3257011895468050906">Token Binding समर्थन सक्षम करा.</translation> <translation id="3260892921936048802">&डाउनलोड करा...</translation> <translation id="326356299252142602">Windows Runtime MIDI API वापरा</translation> @@ -5610,7 +5610,7 @@ <translation id="8487700953926739672">ऑफलाइन उपलब्ध</translation> <translation id="8490896350101740396">खालील कियोस्क अॅप्स "<ph name="UPDATED_APPS" />" अद्यतनित करण्यात आले आहेत. कृपया अद्यतन प्रक्रिया पूर्ण करण्यासाठी डिव्हाइस रीबूट करा.</translation> <translation id="8493236660459102203">मायक्रोफोन:</translation> -<translation id="8495193314787127784">"ओके Google" सक्षम करा</translation> +<translation id="8495193314787127784">"Ok Google" सक्षम करा</translation> <translation id="8496717697661868878">हे प्लगइन चालवा</translation> <translation id="8497392509610708671">आपण हे <ph name="BEGIN_LINK" />Chrome सेटिंग्ज<ph name="END_LINK" /> मध्ये कधीही बदलू शकता.</translation> <translation id="8498716162437226120">Bluetooth डिव्हाइस जोडा</translation> diff --git a/chromium/chrome/app/resources/generated_resources_nl.xtb b/chromium/chrome/app/resources/generated_resources_nl.xtb index 59e4333f848..9eea3662d39 100644 --- a/chromium/chrome/app/resources/generated_resources_nl.xtb +++ b/chromium/chrome/app/resources/generated_resources_nl.xtb @@ -4911,7 +4911,7 @@ Gebruik deze functie alleen met accounts die je vertrouwt.</translation> <translation id="7517569744831774757">Instellingen terugzetten naar de oorspronkelijke standaardwaarden.</translation> <translation id="7517786267097410259">Een wachtwoord maken –</translation> <translation id="7518150891539970662">WebRTC-logboeken (<ph name="WEBRTC_LOG_COUNT" />)</translation> -<translation id="7518657099163789435">Spraak- en audioactiviteit moet worden ingeschakeld om "Ok Google te gebruiken"</translation> +<translation id="7518657099163789435">Spraak- en audioactiviteit moet worden ingeschakeld om "Ok Google" te gebruiken</translation> <translation id="7520821146909122639">Deze pagina wordt vertaald…</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">Zeg "Ok Google"</translation> diff --git a/chromium/chrome/app/resources/generated_resources_pl.xtb b/chromium/chrome/app/resources/generated_resources_pl.xtb index 398d1dd2eb1..671a8d1ce08 100644 --- a/chromium/chrome/app/resources/generated_resources_pl.xtb +++ b/chromium/chrome/app/resources/generated_resources_pl.xtb @@ -220,7 +220,7 @@ <translation id="1313405956111467313">Automatyczna konfiguracja serwera proxy</translation> <translation id="131364520783682672">Caps Lock</translation> <translation id="1313705515580255288">Zakładki, historia i ustawienia są synchronizowane z Twoim kontem Google.</translation> -<translation id="1313832887664610176">Połączenie z Chromeboksem zostało utracone</translation> +<translation id="1313832887664610176">Połączenie z Chromeboxem zostało utracone</translation> <translation id="131461803491198646">Sieć macierzysta, nie w roamingu</translation> <translation id="1316136264406804862">Trwa wyszukiwanie...</translation> <translation id="1317502925920562130">Czy to oczekiwana strona startowa?</translation> @@ -1574,7 +1574,7 @@ Ta strona nie powinna być zablokowana.</translation> <translation id="3012917896646559015">Jak najszybciej skontaktuj się z producentem sprzętu, aby wysłać komputer do serwisu.</translation> <translation id="3013291976881901233">Urządzenia MIDI</translation> <translation id="3014095112974898292">Oczekuję na ukończenie innych żądań…</translation> -<translation id="3015992588037997514">Widzisz ten kod na ekranie Chromeboksa?</translation> +<translation id="3015992588037997514">Widzisz ten kod na ekranie Chromeboxa?</translation> <translation id="3016641847947582299">Składnik został zaktualizowany</translation> <translation id="3016780570757425217">Sprawdzać Twoją lokalizację</translation> <translation id="3018346972744622514">Dodaj inną sieć komórkową</translation> @@ -1765,7 +1765,7 @@ Dalsze instrukcje znajdziesz w e-mailu przesłanym na adres <ph name="ACCOUNT_EM <translation id="3260892921936048802">&Pobierz…</translation> <translation id="326356299252142602">Używaj interfejsu Windows Runtime MIDI API</translation> <translation id="3264544094376351444">Czcionka bezszeryfowa</translation> -<translation id="3264547943200567728">Nie udało się skonfigurować sieci Chromeboksa</translation> +<translation id="3264547943200567728">Nie udało się skonfigurować sieci na Chromeboxie</translation> <translation id="3265459715026181080">Zamknij okno</translation> <translation id="3267726687589094446">Dalej zezwalaj na automatyczne pobieranie wielu plików</translation> <translation id="3267998849713137817">Czas modyfikacji</translation> @@ -2235,7 +2235,7 @@ Dalsze instrukcje znajdziesz w e-mailu przesłanym na adres <ph name="ACCOUNT_EM <translation id="383652340667548381">Serbski</translation> <translation id="3838486795898716504">Więcej o <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Pliki cookie oraz inne dane stron i wtyczek</translation> -<translation id="3840053866656739575">Połączenie z Chromeboksem zostało utracone. Przysuń się bliżej lub sprawdź urządzenie – spróbujemy połączyć się ponownie.</translation> +<translation id="3840053866656739575">Połączenie z Chromeboxem zostało utracone. Przysuń się bliżej lub sprawdź urządzenie – spróbujemy połączyć się ponownie.</translation> <translation id="3840055807562919428">Nie pozwala na pobieranie skryptów firm zewnętrznych do blokowania parserów umieszczonych w głównej ramce przez instrukcję document.write.</translation> <translation id="3842552989725514455">Czcionka szeryfowa</translation> <translation id="3846593650622216128">Te ustawienia są wymuszone przez rozszerzenie.</translation> @@ -2480,7 +2480,7 @@ Aby kontynuować, wszyscy użytkownicy muszą się wylogować.</translation> <translation id="4195643157523330669">Otwórz w nowej karcie</translation> <translation id="4195814663415092787">Kontynuuj tam, gdzie skończyłem</translation> <translation id="4197674956721858839">Spakuj wybrane do pliku ZIP</translation> -<translation id="4200689466366162458">Własne słowa</translation> +<translation id="4200689466366162458">Słowa niestandardowe</translation> <translation id="4200983522494130825">Nowa &karta</translation> <translation id="4206144641569145248">Kosmita</translation> <translation id="4206323443866416204">Przesyłanie opinii</translation> @@ -2953,7 +2953,7 @@ Naciśnij dowolny klawisz, by kontynuować przeglądanie.</translation> <translation id="4874539263382920044">Tytuł musi zawierać co najmniej jeden znak</translation> <translation id="4875622588773761625">Czy <ph name="PASSWORD_MANAGER_BRAND" /> ma zaktualizować hasło do tej strony?</translation> <translation id="4876895919560854374">Blokowanie i odblokowywanie ekranu</translation> -<translation id="4877017884043316611">Sparuj z Chromeboksem</translation> +<translation id="4877017884043316611">Sparuj z Chromeboxem</translation> <translation id="4880214202172289027">Suwak głośności</translation> <translation id="4880328057631981605">Nazwa punktu dostępu</translation> <translation id="4880520557730313061">Autokorekta</translation> @@ -4673,7 +4673,7 @@ Używaj jej tylko w przypadku kont, którym ufasz.</translation> <translation id="7191454237977785534">Zapisz plik jako</translation> <translation id="7193047015510747410">Autouzupełnianie danych uwierzytelniających synchronizacji</translation> <translation id="7195103043027893114">Animacja podczas rozruchu</translation> -<translation id="7196835305346730603">Szukam Chromeboksów w pobliżu...</translation> +<translation id="7196835305346730603">Szukam Chromeboxów w pobliżu...</translation> <translation id="7198197644913728186">Bluetooth jest wyłączony na urządzeniu <ph name="DEVICE_TYPE" />. Wpisz hasło, by je odblokować, a następnie włącz Bluetooth.</translation> <translation id="7199158086730159431">Uzyskaj p&omoc</translation> <translation id="7201354769043018523">Prawy nawias</translation> @@ -5219,7 +5219,7 @@ Używaj jej tylko w przypadku kont, którym ufasz.</translation> <translation id="7974566588408714340">Ponów za pomocą rozszerzenia <ph name="EXTENSIONNAME" /></translation> <translation id="7974936243149753750">Nadmiarowość obrazu</translation> <translation id="797610151583999923">Włącz mus, mash itp.</translation> -<translation id="7977551819349545646">Aktualizuję Chromeboksa...</translation> +<translation id="7977551819349545646">Aktualizuję Chromeboxa...</translation> <translation id="7978412674231730200">Klucz prywatny</translation> <translation id="7979036127916589816">Błąd synchronizacji</translation> <translation id="7980084013673500153">Identyfikator zasobu: <ph name="ASSET_ID" /></translation> @@ -5354,7 +5354,7 @@ Przechowuj plik klucza w bezpiecznym miejscu. Będzie on potrzebny do utworzenia <translation id="8141725884565838206">Zarządzaj hasłami</translation> <translation id="8142699993796781067">Sieć prywatna</translation> <translation id="8142732521333266922">OK, synchronizuj wszystko</translation> -<translation id="8144022414479088182">Na pewno chcesz skonfigurować to urządzenie jako Chromeboksa wideokonferencje?</translation> +<translation id="8144022414479088182">Na pewno chcesz skonfigurować to urządzenie jako Chromeboxa wideokonferencje?</translation> <translation id="8145409227593688472">Metoda wprowadzania Wubi</translation> <translation id="8146177459103116374">Jeśli zarejestrowałeś się już na tym urządzeniu, możesz <ph name="LINK2_START" />zalogować się jako istniejący użytkownik<ph name="LINK2_END" />.</translation> <translation id="8146793085009540321">Nie udało się zalogować. Skontaktuj się z administratorem lub spróbuj ponownie.</translation> @@ -5804,7 +5804,7 @@ Przechowuj plik klucza w bezpiecznym miejscu. Będzie on potrzebny do utworzenia <translation id="8755376271068075440">&Większy</translation> <translation id="8757090071857742562">Nie udało się przesłać pulpitu. Sprawdź, czy potwierdzono prośbę o rozpoczęcie udostępniania ekranu.</translation> <translation id="8757640015637159332">Rozpocznij sesję publiczną</translation> -<translation id="8757742102600829832">Wybierz Chromeboksa, z którym chcesz się połączyć</translation> +<translation id="8757742102600829832">Wybierz Chromeboxa, z którym chcesz się połączyć</translation> <translation id="8757803915342932642">Urządzenie w chmurze Google</translation> <translation id="8758895886513993540">Ta flaga określa, czy użytkownicy mogą wybrać kartę przy udostępnianiu pulpitu.</translation> <translation id="8759408218731716181">Nie można skonfigurować wielokrotnego logowania</translation> @@ -6026,7 +6026,7 @@ Kolejne powiadomienia, okna i okna dialogowe mogą być dzielone między pulpita <translation id="9050666287014529139">Hasło</translation> <translation id="9052208328806230490">Zarejestrowano drukarki w usłudze <ph name="CLOUD_PRINT_NAME" /> przy użyciu konta <ph name="EMAIL" /></translation> <translation id="9052234664411715138">Pomoc przy wypełnianiu danych karty kredytowej</translation> -<translation id="9056034633062863292">Aktualizuję Chromeboksa</translation> +<translation id="9056034633062863292">Aktualizuję Chromeboxa</translation> <translation id="9056810968620647706">Nie znaleziono żadnych dopasowań.</translation> <translation id="9057119625587205566">Brak drukarek w pobliżu</translation> <translation id="9059868303873565140">Menu stanu</translation> diff --git a/chromium/chrome/app/resources/generated_resources_pt-PT.xtb b/chromium/chrome/app/resources/generated_resources_pt-PT.xtb index 37c0cea704d..bd698d10721 100644 --- a/chromium/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chromium/chrome/app/resources/generated_resources_pt-PT.xtb @@ -1538,7 +1538,7 @@ Pretende pará-lo?</translation> <translation id="2964193600955408481">Desativar Wi-Fi</translation> <translation id="2966449113954629791">Poderá ter atingido o limite de utilização dos dados móveis. Visite o portal de ativação <ph name="NAME" /> para comprar mais dados.</translation> <translation id="2966459079597787514">Teclado sueco</translation> -<translation id="2966598748518102999">Melhore a pesquisa por voz através do envio do som de "OK Google" precedido por alguns segundos para o Google.</translation> +<translation id="2966598748518102999">Melhore a pesquisa por voz através do envio do som de "Ok Google" precedido por alguns segundos para o Google.</translation> <translation id="2967544384642772068">Desativar</translation> <translation id="2971033837577180453"><span>ID:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">diminuir brilho</translation> @@ -1762,7 +1762,7 @@ Verifique o seu email em <ph name="ACCOUNT_EMAIL" /> para obter estas e outras i <translation id="3251759466064201842"><Não faz parte do certificado></translation> <translation id="3252266817569339921">Francês</translation> <translation id="3254434849914415189">Escolha a aplicação predefinida para ficheiros <ph name="FILE_TYPE" />:</translation> -<translation id="3255228561559750854">Pesquise ou diga "OK Google"</translation> +<translation id="3255228561559750854">Pesquise ou diga "Ok Google"</translation> <translation id="3257011895468050906">Ativar suporte para Token Binding.</translation> <translation id="3260892921936048802">&Transferir...</translation> <translation id="326356299252142602">Utilizar a API Windows Runtime MIDI</translation> @@ -2209,7 +2209,7 @@ De <ph name="DOWNLOAD_DOMAIN" /></translation> <translation id="3812525830114410218">Certificado incorreto</translation> <translation id="3812568885510197014">Anota formulários Web com assinaturas de preenchimento automático como atributos HTML.</translation> <translation id="3813296892522778813">Aceda à <ph name="BEGIN_LINK_CHROMIUM" />ajuda do Google Chrome<ph name="END_LINK_CHROMIUM" /> se não conseguir encontrar aquilo que procura.</translation> -<translation id="3813984289128269159">OK Google</translation> +<translation id="3813984289128269159">Ok Google</translation> <translation id="3815016854028376614">Método de introdução zhuyin</translation> <translation id="3815571115159309122"><ph name="FILE_COUNT" /> novas fotos encontradas <ph name="LINE_BREAK1" /> @@ -5622,7 +5622,7 @@ Mantenha o seu ficheiro de chave num local seguro, pois irá precisar dele para <translation id="8487700953926739672">Disponível off-line</translation> <translation id="8490896350101740396">As seguintes aplicações de quiosque "<ph name="UPDATED_APPS" />" foram atualizadas. Reinicie o dispositivo para concluir o processo de atualização.</translation> <translation id="8493236660459102203">Microfone:</translation> -<translation id="8495193314787127784">Ativar "OK Google"</translation> +<translation id="8495193314787127784">Ativar "Ok Google"</translation> <translation id="8496717697661868878">Executar este plug-in</translation> <translation id="8497392509610708671">Pode alterar esta definição a qualquer momento nas <ph name="BEGIN_LINK" />Definições do Chrome<ph name="END_LINK" />.</translation> <translation id="8498716162437226120">Adicionar dispositivo Bluetooth</translation> @@ -5671,7 +5671,7 @@ Mantenha o seu ficheiro de chave num local seguro, pois irá precisar dele para <translation id="8565650234829130278">Tentativa de alterar a aplicação para a versão anterior</translation> <translation id="8569682776816196752">Não foram encontrados destinos</translation> <translation id="8569764466147087991">Selecione um ficheiro para abrir</translation> -<translation id="8571032220281885258">Quando disser "OK Google", o Chrome pesquisará o que disser a seguir.</translation> +<translation id="8571032220281885258">Quando disser "Ok Google", o Chrome pesquisará o que disser a seguir.</translation> <translation id="8571108619753148184">Servidor 4</translation> <translation id="8574234089711453001">Permitir a apresentação de um botão de transferência ao abrir uma página com um URL de multimédia.</translation> <translation id="857779305329188634">Ativar suporte de protocolo QUIC experimental.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_ro.xtb b/chromium/chrome/app/resources/generated_resources_ro.xtb index b2560716db9..6f62f63dc39 100644 --- a/chromium/chrome/app/resources/generated_resources_ro.xtb +++ b/chromium/chrome/app/resources/generated_resources_ro.xtb @@ -1704,7 +1704,7 @@ Pentru instrucțiuni suplimentare, verifică e-mailurile la adresa <ph name="ACC <translation id="3162559335345991374">Rețeaua Wi-Fi pe care o folosești poate solicita accesarea paginii de conectare.</translation> <translation id="316307797510303346">Controlează și vezi site-urile pe care această persoană le accesează din <ph name="CUSTODIAN_EMAIL" />. Detaliile de conectare la cont sunt învechite.</translation> -<translation id="3166571619128686629">Dă clic pe sau rostește „Ok, Google” pentru a începe căutarea vocală</translation> +<translation id="3166571619128686629">Dă clic sau rostește „Ok Google” pentru a începe căutarea vocală</translation> <translation id="3170072451822350649">De asemenea, puteți să omiteți conectarea și să <ph name="LINK_START" />navigați ca invitat<ph name="LINK_END" />.</translation> <translation id="3170544058711792988">Menține focalizarea lupei în centrul ecranului</translation> <translation id="317583078218509884">Setările noi pentru permisiuni legate de site-uri se vor aplica după ce reîncărcați pagina.</translation> @@ -1760,7 +1760,7 @@ Pentru instrucțiuni suplimentare, verifică e-mailurile la adresa <ph name="ACC <translation id="3251759466064201842"><Nu face parte dintr-un certificat></translation> <translation id="3252266817569339921">Franceză</translation> <translation id="3254434849914415189">Alegeți aplicația prestabilită pentru fișierele <ph name="FILE_TYPE" />:</translation> -<translation id="3255228561559750854">Căutați sau rostiți „Ok Google”</translation> +<translation id="3255228561559750854">Caută sau rostește „Ok Google”</translation> <translation id="3257011895468050906">Activează compatibilitatea cu Token Binding.</translation> <translation id="3260892921936048802">&Descarcă…</translation> <translation id="326356299252142602">Folosește API-ul Windows Runtime MIDI</translation> @@ -2696,7 +2696,7 @@ Apăsați pe orice tastă pentru a continua explorarea.</translation> <translation id="4533259260976001693">Restrângeți/Extindeți</translation> <translation id="4533985347672295764">Timp CPU</translation> <translation id="4534166495582787863">Activează clicul cu al treilea deget pe touchpad pentru butonul din mijloc.</translation> -<translation id="4534799089889278411">Rostește „OK Google” într-o filă nouă, pe google.com și în Lansatorul de aplicații</translation> +<translation id="4534799089889278411">Rostește „Ok Google” într-o filă nouă, pe google.com și în Lansatorul de aplicații</translation> <translation id="4535127706710932914">Profil prestabilit</translation> <translation id="4538417792467843292">Șterge cuvântul</translation> <translation id="4538684596480161368">Blochează întotdeauna pluginurile scoase din mediul de testare pe <ph name="HOST" /></translation> @@ -4786,7 +4786,7 @@ Folosește funcția numai pentru conturile în care ai încredere.</translation> <translation id="7361824946268431273">Cel mai rapid, mai simplu și mai sigur computer</translation> <translation id="7364796246159120393">Alege fișierul</translation> <translation id="736515969993332243">Se scanează rețelele.</translation> -<translation id="7366762109661450129">Rostește „OK Google” când ecranul este pornit și deblocat.</translation> +<translation id="7366762109661450129">Rostește „Ok Google” când ecranul e pornit și deblocat.</translation> <translation id="7366909168761621528">Date de navigare</translation> <translation id="7369521049655330548">Următoarele pluginuri au fost blocate pe această pagină:</translation> <translation id="7371490661692457119">Lățime prestabilită a panourilor</translation> @@ -5618,7 +5618,7 @@ Păstrează fișierul cu cheia într-un loc sigur. Acesta va fi necesar la crear <translation id="8487700953926739672">Disponibil offline</translation> <translation id="8490896350101740396">Următoarele aplicații de tip chioșc „<ph name="UPDATED_APPS" />” au fost actualizate. Repornește dispozitivul pentru a finaliza procesul de actualizare.</translation> <translation id="8493236660459102203">Microfon:</translation> -<translation id="8495193314787127784">Activați „Ok Google”</translation> +<translation id="8495193314787127784">Activează „Ok Google”</translation> <translation id="8496717697661868878">Rulează acest plugin</translation> <translation id="8497392509610708671">Poți schimba oricând setarea din <ph name="BEGIN_LINK" />Setările Chrome<ph name="END_LINK" />.</translation> <translation id="8498716162437226120">Adăugați un dispozitiv Bluetooth</translation> @@ -5667,7 +5667,7 @@ Păstrează fișierul cu cheia într-un loc sigur. Acesta va fi necesar la crear <translation id="8565650234829130278">S-a încercat trecerea aplicației la o versiune inferioară.</translation> <translation id="8569682776816196752">Nu au fost găsite destinații</translation> <translation id="8569764466147087991">Selectează un fișier pentru a-l deschide</translation> -<translation id="8571032220281885258">Când rostiți „Ok Google”, Chrome va căuta ceea ce rostiți în continuare.</translation> +<translation id="8571032220281885258">Când rostești „Ok Google”, Chrome va căuta ceea ce rostești în continuare.</translation> <translation id="8571108619753148184">Server 4</translation> <translation id="8574234089711453001">Permite afișarea unui buton de descărcare când deschizi o pagină cu o adresă URL media.</translation> <translation id="857779305329188634">Activați compatibilitatea cu protocolul experimental QUIC.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_ru.xtb b/chromium/chrome/app/resources/generated_resources_ru.xtb index feef85490ea..0bc08ce5e0f 100644 --- a/chromium/chrome/app/resources/generated_resources_ru.xtb +++ b/chromium/chrome/app/resources/generated_resources_ru.xtb @@ -5622,7 +5622,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur <translation id="8487700953926739672">Доступно в автономном режиме</translation> <translation id="8490896350101740396">Были обновлены следующие киоск-приложения: <ph name="UPDATED_APPS" />. Чтобы завершить установку обновлений, перезагрузите устройство.</translation> <translation id="8493236660459102203">Микрофон:</translation> -<translation id="8495193314787127784">Включить команду "ОК Google"</translation> +<translation id="8495193314787127784">Включить команду "О'кей, Google"</translation> <translation id="8496717697661868878">Запустить подключаемый модуль</translation> <translation id="8497392509610708671">Вы можете в любое время изменить этот параметр в <ph name="BEGIN_LINK" />настройках Chrome<ph name="END_LINK" />.</translation> <translation id="8498716162437226120">Добавить устройство Bluetooth</translation> diff --git a/chromium/chrome/app/resources/generated_resources_sk.xtb b/chromium/chrome/app/resources/generated_resources_sk.xtb index 969d52654bd..49c856ecd93 100644 --- a/chromium/chrome/app/resources/generated_resources_sk.xtb +++ b/chromium/chrome/app/resources/generated_resources_sk.xtb @@ -610,7 +610,7 @@ <translation id="1763108912552529023">Skúmať</translation> <translation id="1764226536771329714">beta</translation> <translation id="176587472219019965">&Nové okno</translation> -<translation id="1766352429832934452">Povolené (vyžaduje sa na používanie funkcie „Ok Google“)</translation> +<translation id="1766352429832934452">Zapnuté (nutné na používanie príkazu „Ok Google“)</translation> <translation id="1769104665586091481">Otvoriť odkaz v novom &okne</translation> <translation id="1772267994638363865">Ak chcete používať túto funkciu, musíte povoliť Hlasovú a zvukovú aktivitu a natrénovať svoje zariadenie <ph name="DEVICE_TYPE" /> v nasledujúcich krokoch.</translation> <translation id="1773212559869067373">Certifikát na overenie totožnosti bol zamietnutý miestne</translation> @@ -735,7 +735,7 @@ <translation id="1934636348456381428">Povoliť implementáciu experimentálnych prekryvných posúvačov. Aby sa dali posúvače animovať, musíte tiež povoliť vláknovú kompozíciu.</translation> <translation id="1936157145127842922">Zobraziť v priečinku</translation> <translation id="1936717151811561466">Fínčina</translation> -<translation id="1937256809970138538">Vyslovte „Ok Google“, keď je obrazovka zapnutá a odomknutá</translation> +<translation id="1937256809970138538">Povedzte „Ok Google“, keď je obrazovka zapnutá a odomknutá</translation> <translation id="1942765061641586207">Rozlíšenie obrázka</translation> <translation id="1944921356641260203">Je k dispozícii aktualizácia</translation> <translation id="1947424002851288782">nemecká klávesnica</translation> @@ -1538,7 +1538,7 @@ Tieto webové stránky by podľa mňa nemali byť blokované.</translation> <translation id="2964193600955408481">Zakázať sieť Wi-Fi</translation> <translation id="2966449113954629791">Možno ste dosiahli povolený limit mobilných dát. Ďalšie údaje si môžete zakúpiť na aktivačnom portáli <ph name="NAME" />.</translation> <translation id="2966459079597787514">švédska klávesnica</translation> -<translation id="2966598748518102999">Zlepšite hlasové vyhľadávanie odoslaním záznamu vyslovenia slov „Ok Google“ a niekoľkých sekúnd predtým spoločnosti Google.</translation> +<translation id="2966598748518102999">Zlepšiť hlasové vyhľadávanie odoslaním záznamu „Ok Google“ a niekoľkých predošlých sekúnd do Googlu</translation> <translation id="2967544384642772068">Ukončiť</translation> <translation id="2971033837577180453"><span>ID:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">znížiť jas</translation> @@ -1706,7 +1706,7 @@ Pri vytvorení kontrolovaného používateľa sa nevytvorí účet Google a jeh <translation id="3162559335345991374">Sieť Wi-Fi, ktorú používate, môže vyžadovať, aby ste navštívili jej prihlasovaciu stránku</translation> <translation id="316307797510303346">Ovládať a zobrazovať stránky, ktoré táto osoba navštevuje v rámci účtu <ph name="CUSTODIAN_EMAIL" />. Vaše prihlasovacie údaje do účtu sú zastarané.</translation> -<translation id="3166571619128686629">Hlasové vyhľadávanie spustíte kliknutím alebo vyslovením kľúčového výrazu „Ok Google“</translation> +<translation id="3166571619128686629">Hlasové vyhľadávanie spustíte kliknutím alebo vyslovením príkazu „Ok Google“</translation> <translation id="3170072451822350649">Môžete tiež preskočiť prihlásenie a <ph name="LINK_START" />prehliadať ako hosť<ph name="LINK_END" />.</translation> <translation id="3170544058711792988">Ponechať zameranie lupy v strede obrazovky</translation> <translation id="317583078218509884">Nové nastavenia povolení webových stránok sa prejavia po opätovnom načítaní stránky.</translation> @@ -1755,14 +1755,14 @@ Pri vytvorení kontrolovaného používateľa sa nevytvorí účet Google a jeh <translation id="3241720467332021590">Írčina</translation> <translation id="3242118113727675434">Zobraziť zobrazenie HUD pre dotykové body</translation> <translation id="3242765319725186192">Predzdieľaný kľúč:</translation> -<translation id="3244621381664913240">Umožňovať aktiváciu hlasového vyhľadávania vyslovením frázy „Ok Google“</translation> +<translation id="3244621381664913240">Povoliť aktiváciu hlasového vyhľadávania príkazom „Ok Google“</translation> <translation id="3245321423178950146">Neznámy interpret</translation> <translation id="324533084080637716">So značkovaním vyjadrujúcim prítomnosť štruktúrovaných článkov</translation> <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – Chyba siete</translation> <translation id="3251759466064201842"><Nie je súčasťou certifikátu></translation> <translation id="3252266817569339921">Francúzština</translation> <translation id="3254434849914415189">Zvoľte pre súbory <ph name="FILE_TYPE" /> predvolenú aplikáciu:</translation> -<translation id="3255228561559750854">Vyhľadávajte alebo vyslovte „Ok Google“</translation> +<translation id="3255228561559750854">Vyhľadávajte alebo povedzte „Ok Google“</translation> <translation id="3257011895468050906">Povolenie podpory viazania tokenov.</translation> <translation id="3260892921936048802">&Stiahnuť…</translation> <translation id="326356299252142602">Použitie rozhrania Windows Runtime MIDI API</translation> @@ -2698,7 +2698,7 @@ Ak chcete pokračovať v práci, stlačte ľubovoľný kláves.</translation> <translation id="4533259260976001693">Zmenšiť/zväčšiť</translation> <translation id="4533985347672295764">Čas využitia procesora</translation> <translation id="4534166495582787863">Povolí klepnutie na touchpad troma prstami namiesto prostredného tlačidla.</translation> -<translation id="4534799089889278411">Vyslovte výraz „Ok Google“ na novej karte, stránke google.com a v Spúšťači aplikácií</translation> +<translation id="4534799089889278411">Povedzte „Ok Google“ na novej karte, na webe google.com alebo v Spúšťači aplikácií</translation> <translation id="4535127706710932914">Predvolený profil</translation> <translation id="4538417792467843292">Odstrániť slovo</translation> <translation id="4538684596480161368">Na stránkach <ph name="HOST" /> vždy blokovať doplnky, ktoré nie sú v karanténe</translation> @@ -3237,7 +3237,7 @@ Ak chcete pokračovať v práci, stlačte ľubovoľný kláves.</translation> <translation id="5249624017678798539">Prehliadač zlyhal pred dokončením sťahovania.</translation> <translation id="5252456968953390977">Roaming</translation> <translation id="5252653240322147470">Maximálny počet číslic kódu PIN: <ph name="MAXIMUM" /></translation> -<translation id="5253753933804516447">Aktivovať hlasové vyhľadávanie pomocou kľúčového slova „Ok Google“, keď je zapnutá a odomknutá obrazovka.</translation> +<translation id="5253753933804516447">Aktivovať hlasové vyhľadávanie príkazom „Ok Google“, keď je zapnutá a odomknutá obrazovka.</translation> <translation id="52550593576409946">Aplikáciu Kiosk sa nepodarilo spustiť</translation> <translation id="5255315797444241226">Zadaná prístupová fráza je nesprávna.</translation> <translation id="5260508466980570042">Vašu e-mailovú adresu alebo vaše heslo sa nepodarilo overiť. Skúste to znova.</translation> @@ -3813,7 +3813,7 @@ s ostatnými, a to všetko na jednom mieste.<ph name="MARKUP_9" /></translatio <translation id="6011449291337289699">Vymazanie dát webu</translation> <translation id="6015796118275082299">Rok</translation> <translation id="6016551720757758985">Potvrdenie obnovenia Powerwash s návratom k predchádzajúcej verzii</translation> -<translation id="6016809788585079594">Ešte raz a naposledy vyslovte „Ok Google“</translation> +<translation id="6016809788585079594">Ešte raz a naposledy povedzte „Ok Google“</translation> <translation id="6016972670657536680">Tlačidlo pre výber jazyka a klávesnice. Aktuálne je vybratý jazyk <ph name="LANGUAGE" />.</translation> <translation id="6017225534417889107">Zmeniť...</translation> <translation id="6017981840202692187">Pridať do priečinka Aplikácie</translation> @@ -3881,7 +3881,7 @@ s ostatnými, a to všetko na jednom mieste.<ph name="MARKUP_9" /></translatio <translation id="6105158702728922449">Používať fotoaparát a mikrofón</translation> <translation id="6105877918873366097">Dátum posledného prístupu</translation> <translation id="6107012941649240045">Vydané pre</translation> -<translation id="6107079717483424262">Rozpoznať hlas, keď vyslovíte „Ok Google“</translation> +<translation id="6107079717483424262">Rozpoznať váš hlas, keď poviete „Ok Google“</translation> <translation id="6109228527970300988">Emodži, ručné písanie a hlasový vstup v aktivačnej ponuke editora metód vstupu</translation> <translation id="6111770213269631447">Prepis (namaskar → নমস্কার)</translation> <translation id="6112952769866305444">Upraviť osobu <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation> @@ -3924,7 +3924,7 @@ s ostatnými, a to všetko na jednom mieste.<ph name="MARKUP_9" /></translatio <translation id="6165508094623778733">Viac informácií</translation> <translation id="6166185671393271715">Import hesiel do Chromu</translation> <translation id="6169666352732958425">Plochu sa nepodarilo prenášať.</translation> -<translation id="6171550060231646388">Simulované hardvérové funkcie Ok Google</translation> +<translation id="6171550060231646388">Simulované hardvérové funkcie „Ok Google“</translation> <translation id="6171948306033499786">Pozastaviť tlač</translation> <translation id="6175314957787328458">Identifikátor GUID domény spoločnosti Microsoft</translation> <translation id="6178664161104547336">Vybrať certifikát</translation> @@ -4551,7 +4551,7 @@ Túto funkciu používajte iba s dôveryhodnými účtami.</translation> <translation id="7012372675181957985">Váš účet Google môže mať ďalšie formy histórie prehliadania na adrese <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation> <translation id="7013485839273047434">Získať ďalšie rozšírenia</translation> <translation id="7014174261166285193">Inštalácia zlyhala.</translation> -<translation id="7017004637493394352">Vyslovte „Ok Google“ ešte raz</translation> +<translation id="7017004637493394352">Povedzte „Ok Google“ ešte raz</translation> <translation id="7017219178341817193">Pridať novú stránku</translation> <translation id="7017354871202642555">Po nastavení okna nie je možné nastaviť režim.</translation> <translation id="7017480957358237747">povoliť alebo zakázať konkrétne webové stránky,</translation> @@ -4708,7 +4708,7 @@ Túto funkciu používajte iba s dôveryhodnými účtami.</translation> <translation id="7238585580608191973">Odtlačok SHA-256</translation> <translation id="7240120331469437312">Alternatívny názov subjektu certifikátu</translation> <translation id="7241389281993241388">Ak chcete importovať certifikát klienta, prihláste sa do <ph name="TOKEN_NAME" />.</translation> -<translation id="7243055093079293866">Vyslovte na novej karte alebo webe google.com výraz „Ok Google“</translation> +<translation id="7243055093079293866">Povedzte na novej karte alebo webe google.com príkaz „Ok Google“</translation> <translation id="7243632151880336635">Vymazať a odhlásiť sa</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation> <translation id="7246947237293279874">Proxy server FTP</translation> @@ -4789,7 +4789,7 @@ Túto funkciu používajte iba s dôveryhodnými účtami.</translation> <translation id="7361824946268431273">Rýchlejší, jednoduchší a bezpečnejší počítač</translation> <translation id="7364796246159120393">Vybrať súbor</translation> <translation id="736515969993332243">Hľadanie sietí.</translation> -<translation id="7366762109661450129">Vyslovte výraz „Ok Google“, keď je obrazovka zapnutá a odomknutá.</translation> +<translation id="7366762109661450129">Povedzte „Ok Google“, keď je obrazovka zapnutá a odomknutá.</translation> <translation id="7366909168761621528">Údaje prehliadania</translation> <translation id="7369521049655330548">Na tejto stránke boli zablokované nasledujúce doplnky:</translation> <translation id="7371490661692457119">Predvolená hodnota šírky dlaždice</translation> @@ -4916,7 +4916,7 @@ Túto funkciu používajte iba s dôveryhodnými účtami.</translation> <translation id="7518657099163789435">Na používanie kľúčového slova „Ok Google“ je potrebná Hlasová a zvuková aktivita.</translation> <translation id="7520821146909122639">Prebieha preklad tejto stránky…</translation> <translation id="7521387064766892559">JavaScript</translation> -<translation id="7522255036471229694">Vyslovte „Ok Google“</translation> +<translation id="7522255036471229694">Povedzte „Ok Google“</translation> <translation id="7525067979554623046">Vytvoriť</translation> <translation id="7529471622666797993"><ph name="BEGIN_LINK" />Rozšírené nastavenia písma<ph name="END_LINK" /> (vyžaduje sa rozšírenie)</translation> <translation id="7530016656428373557">Vybíjanie batérie (W)</translation> @@ -5313,7 +5313,7 @@ Súbor kľúča uložte na bezpečné miesto. Budete ho potrebovať na vytvoreni <translation id="806812017500012252">Zoradiť podľa názvu</translation> <translation id="8069615408251337349">Google Cloud Print</translation> <translation id="8071432093239591881">Vytlačiť ako obrázok</translation> -<translation id="8071942001314758122">Stačí trikrát vysloviť výraz „Ok Google“</translation> +<translation id="8071942001314758122">Stačí trikrát povedať „Ok Google“</translation> <translation id="8072988827236813198">Pripnúť karty</translation> <translation id="8074127646604999664">Povoliť nedávno zatvoreným webom dokončiť posielanie a prijímanie údajov</translation> <translation id="8075191520954018715">Stav pamäte</translation> diff --git a/chromium/chrome/app/resources/generated_resources_sl.xtb b/chromium/chrome/app/resources/generated_resources_sl.xtb index 0d3e4b84ba9..d67fd01a1b4 100644 --- a/chromium/chrome/app/resources/generated_resources_sl.xtb +++ b/chromium/chrome/app/resources/generated_resources_sl.xtb @@ -1755,7 +1755,7 @@ Za ta in dodatna navodila preverite e-pošto za račun <ph name="ACCOUNT_EMAIL" <translation id="3241720467332021590">irščina</translation> <translation id="3242118113727675434">Prikaži opozorilni zaslon za točke dotika</translation> <translation id="3242765319725186192">Ključ v predhodni skupni rabi:</translation> -<translation id="3244621381664913240">Omogočanje »OK Google« za začetek glasovnega iskanja</translation> +<translation id="3244621381664913240">Omogočanje »Ok Google« za začetek glasovnega iskanja</translation> <translation id="3245321423178950146">Neznan izvajalec</translation> <translation id="324533084080637716">S strukturiranim označevalnim jezikom za članke</translation> <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – napaka omrežja</translation> diff --git a/chromium/chrome/app/resources/generated_resources_sw.xtb b/chromium/chrome/app/resources/generated_resources_sw.xtb index 85dfdd411ef..06b47059b90 100644 --- a/chromium/chrome/app/resources/generated_resources_sw.xtb +++ b/chromium/chrome/app/resources/generated_resources_sw.xtb @@ -1534,7 +1534,7 @@ Sidhani ikiwa tovuti hii inapaswa kuzuiwa!</translation> <translation id="2964193600955408481">Lemaza Wi-Fi</translation> <translation id="2966449113954629791">Huenda ulitumia kiwango chako chote cha data. Tembelea <ph name="NAME" /> kituo cha uwezeshaji ili ununue data zaidi.</translation> <translation id="2966459079597787514">Kibodi ya Kiswidi</translation> -<translation id="2966598748518102999">Boresha kutafuta kwa kutamka kwa kutuma sauti ya "Ok Google," pamoja na sekunde chache kabla ya tamko hilo, kwa Google.</translation> +<translation id="2966598748518102999">Tuma sauti ya "Ok Google," na ulichosema sekunde chache kabla, kwa Google, ili kuboresha utafutaji kwa kutamka.</translation> <translation id="2967544384642772068">Angamiza</translation> <translation id="2971033837577180453"><span>Kitambulisho:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">elekeza mwangaza chini</translation> @@ -3870,7 +3870,7 @@ Bonyeza kitufe chochote ili kuendelea kuchunguza.</translation> <translation id="6105158702728922449">Kutumia kamera na maikrofoni yako</translation> <translation id="6105877918873366097">Ilifikiwa mwisho</translation> <translation id="6107012941649240045">Kimetolewa Kwa</translation> -<translation id="6107079717483424262">Tambua sauti yako unaposema "Ok Google"</translation> +<translation id="6107079717483424262">Kutambua sauti yako unaposema "Ok Google"</translation> <translation id="6109228527970300988">Emoji, mwandiko na kuweka data kwa kutamka kwenye menyu ya IME ya kuchagua kuingia</translation> <translation id="6111770213269631447">Unukuzi wa mfumo wa kuandika (namaskar → নমস্কার)</translation> <translation id="6112952769866305444">Badilisha wasifu, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation> @@ -3913,7 +3913,7 @@ Bonyeza kitufe chochote ili kuendelea kuchunguza.</translation> <translation id="6165508094623778733">Pata maelezo zaidi</translation> <translation id="6166185671393271715">Leta Manenosiri Kwenye Chrome</translation> <translation id="6169666352732958425">Imeshindwa kutuma eneo-kazi.</translation> -<translation id="6171550060231646388">Vipengele vya maunzi vilivyobuniwa vya 'OK Google'</translation> +<translation id="6171550060231646388">Vipengele vya maunzi vilivyobuniwa vya 'Ok Google'</translation> <translation id="6171948306033499786">Sitisha kuchapisha</translation> <translation id="6175314957787328458">GUID ya Vikoa kutoka Microsoft</translation> <translation id="6178664161104547336">Chagua cheti</translation> @@ -5663,7 +5663,7 @@ Inakokotoa muda wa kujaa</translation> <translation id="8565650234829130278">Ulijaribu kushusha programu kiwango</translation> <translation id="8569682776816196752">Hakuna hatima zilizopatikana</translation> <translation id="8569764466147087991">Chagua faili ya kufungua</translation> -<translation id="8571032220281885258">Unaposema "Ok Google," Chrome itatafuta unachosema baada ya hapo.</translation> +<translation id="8571032220281885258">Unaposema "Ok Google," Chrome itatafuta unachosema baada ya maneno hayo.</translation> <translation id="8571108619753148184">Seva 4</translation> <translation id="8574234089711453001">Ruhusu kitufe cha kupakua kionekane unapofungua ukurasa wenye url ya maudhui.</translation> <translation id="857779305329188634">Washa matumizi ya itifaki ya majaribio ya QUIC.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_te.xtb b/chromium/chrome/app/resources/generated_resources_te.xtb index 1de6f748ca6..e8b529caa95 100644 --- a/chromium/chrome/app/resources/generated_resources_te.xtb +++ b/chromium/chrome/app/resources/generated_resources_te.xtb @@ -5616,7 +5616,7 @@ <translation id="8487700953926739672">ఆఫ్లైన్లో అందుబాటు</translation> <translation id="8490896350101740396">క్రింది కియోస్క్ అనువర్తనాలు "<ph name="UPDATED_APPS" />" నవీకరించబడ్డాయి. దయచేసి నవీకరణ ప్రాసెస్ను పూర్తి చేయడానికి పరికరాన్ని రీబూట్ చేయండి.</translation> <translation id="8493236660459102203">మైక్రోఫోన్:</translation> -<translation id="8495193314787127784">"సరే Google"ని ప్రారంభించండి</translation> +<translation id="8495193314787127784">"Ok Google"ని ప్రారంభించండి</translation> <translation id="8496717697661868878">ఈ ప్లగ్ఇన్ని అమలు చెయ్యి</translation> <translation id="8497392509610708671">మీరు దీన్ని ఎప్పుడైనా <ph name="BEGIN_LINK" />Chrome సెట్టింగ్లు<ph name="END_LINK" />లో మార్చవచ్చు.</translation> <translation id="8498716162437226120">బ్లూటూత్ పరికరాన్ని జోడించు</translation> diff --git a/chromium/chrome/app/resources/generated_resources_th.xtb b/chromium/chrome/app/resources/generated_resources_th.xtb index dc57a4adc9e..a3b7e10d99f 100644 --- a/chromium/chrome/app/resources/generated_resources_th.xtb +++ b/chromium/chrome/app/resources/generated_resources_th.xtb @@ -1197,7 +1197,7 @@ <translation id="2565670301826831948">ความเร็วทัชแพด:</translation> <translation id="2566124945717127842">Powerwash เพื่อรีเซ็ตอุปกรณ์ <ph name="IDS_SHORT_PRODUCT_NAME" /> ให้เหมือนใหม่</translation> <translation id="2568774940984945469">ที่เก็บแถบข้อมูล</translation> -<translation id="2570000010887652771">ข้อมูลที่บันทึกไว้</translation> +<translation id="2570000010887652771">ประหยัดเน็ต</translation> <translation id="2570648609346224037">เกิดปัญหาขณะดาวน์โหลดอิมเมจการกู้คืน</translation> <translation id="257088987046510401">ธีม</translation> <translation id="2572032849266859634">ได้รับสิทธิ์ในการอ่าน <ph name="VOLUME_NAME" /> เท่านั้นแล้ว</translation> diff --git a/chromium/chrome/app/resources/generated_resources_tr.xtb b/chromium/chrome/app/resources/generated_resources_tr.xtb index d5e8fe3da41..cc15eaf92c5 100644 --- a/chromium/chrome/app/resources/generated_resources_tr.xtb +++ b/chromium/chrome/app/resources/generated_resources_tr.xtb @@ -1537,7 +1537,7 @@ Sunucunun mesajı: <ph name="SERVER_MSG" /></translation> <translation id="2964193600955408481">Kablosuz bağlantıyı devre dışı bırak</translation> <translation id="2966449113954629791">Mobil veri kullanım hakkınızı doldurmuş olabilirsiniz. Daha fazla veri satın almak için <ph name="NAME" /> etkinleştirme portalını ziyaret edin.</translation> <translation id="2966459079597787514">İsveççe klavye</translation> -<translation id="2966598748518102999">Öncesinde birkaç saniye boşlukla "OK Google" sesini Google'a göndererek sesli arama özelliğini iyileştirin.</translation> +<translation id="2966598748518102999">Öncesinde birkaç saniye boşlukla "Ok Google" sesini Google'a göndererek sesli arama özelliğini iyileştirin.</translation> <translation id="2967544384642772068">Sonlandır</translation> <translation id="2971033837577180453"><span>Kimlik:</span><ph name="EXTENSION_ID" /></translation> <translation id="2971213274238188218">parlaklığı azalt</translation> @@ -1761,7 +1761,7 @@ Bunlar ve diğer talimatlar için lütfen <ph name="ACCOUNT_EMAIL" /> e-postanı <translation id="3251759466064201842"><Sertifikanın Parçası Değil></translation> <translation id="3252266817569339921">Fransızca</translation> <translation id="3254434849914415189"><ph name="FILE_TYPE" /> dosyaları için varsayılan uygulamayı seç:</translation> -<translation id="3255228561559750854">Arama yapın veya "OK Google" deyin</translation> +<translation id="3255228561559750854">Arama yapın veya "Ok Google" deyin</translation> <translation id="3257011895468050906">Token Binding desteğini etkinleştirin.</translation> <translation id="3260892921936048802">&İndir...</translation> <translation id="326356299252142602">Windows Runtime MIDI API'yi kullan</translation> @@ -2208,7 +2208,7 @@ Bunlar ve diğer talimatlar için lütfen <ph name="ACCOUNT_EMAIL" /> e-postanı <translation id="3812525830114410218">Bozuk sertifika</translation> <translation id="3812568885510197014">Otomatik Doldurma imzaları olan web formlarına HTML özelliği olarak ek açıklama koyar</translation> <translation id="3813296892522778813">Aradığınız bilgiyi bulamazsanız <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome yardımına<ph name="END_LINK_CHROMIUM" /> gidin</translation> -<translation id="3813984289128269159">OK Google</translation> +<translation id="3813984289128269159">Ok Google</translation> <translation id="3815016854028376614">Zhuyin giriş yöntemi</translation> <translation id="3815571115159309122"><ph name="FILE_COUNT" /> yeni fotoğraf bulundu <ph name="LINE_BREAK1" /> @@ -5623,7 +5623,7 @@ Dolana kadar geçecek süre hesaplanıyor</translation> <translation id="8487700953926739672">Çevrimdışı kullanılabilir</translation> <translation id="8490896350101740396">Takip eden kiosk uygulamaları "<ph name="UPDATED_APPS" />" güncellendi. Lütfen güncelleme işlemini tamamlamak için cihazınızı yeniden başlatın.</translation> <translation id="8493236660459102203">Mikrofon:</translation> -<translation id="8495193314787127784">"OK Google" özelliğini etkinleştir</translation> +<translation id="8495193314787127784">"Ok Google" özelliğini etkinleştir</translation> <translation id="8496717697661868878">Bu Eklentiyi Çalıştır</translation> <translation id="8497392509610708671">Bu ayarı istediğiniz zaman <ph name="BEGIN_LINK" />Chrome Ayarları<ph name="END_LINK" />'ndan değiştirebilirsiniz.</translation> <translation id="8498716162437226120">Bluetooth cihazı ekle</translation> @@ -5672,7 +5672,7 @@ Dolana kadar geçecek süre hesaplanıyor</translation> <translation id="8565650234829130278">Uygulamanın eski sürümüne geçilmeye çalışıldı.</translation> <translation id="8569682776816196752">Hiçbir hedef bulunamadı</translation> <translation id="8569764466147087991">Açılacak dosyayı seçin</translation> -<translation id="8571032220281885258">"OK Google" dediğinizde, Chrome söyleyeceğiniz bir sonraki ifadeyi arar.</translation> +<translation id="8571032220281885258">"Ok Google" dediğinizde, Chrome söyleyeceğiniz bir sonraki ifadeyi arar.</translation> <translation id="8571108619753148184">Sunucu 4</translation> <translation id="8574234089711453001">Bir sayfayı medya URL'si ile açarken indir düğmesinin gösterilmesine izin verin.</translation> <translation id="857779305329188634">Deneysel QUIC protokol desteğini etkinleştir.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_uk.xtb b/chromium/chrome/app/resources/generated_resources_uk.xtb index 37d0da84844..f4d1413c5c5 100644 --- a/chromium/chrome/app/resources/generated_resources_uk.xtb +++ b/chromium/chrome/app/resources/generated_resources_uk.xtb @@ -1760,7 +1760,7 @@ <translation id="3251759466064201842"><Не є частиною сертифіката></translation> <translation id="3252266817569339921">Французька</translation> <translation id="3254434849914415189">Вибрати програму за умовчанням для файлів <ph name="FILE_TYPE" />:</translation> -<translation id="3255228561559750854">Виконайте пошук або скажіть "OK Google"</translation> +<translation id="3255228561559750854">Введіть запит або скажіть "Ok Google"</translation> <translation id="3257011895468050906">Увімкнути підтримку Token Binding.</translation> <translation id="3260892921936048802">Завантажити…</translation> <translation id="326356299252142602">Використовувати API Windows Runtime MIDI</translation> @@ -4550,7 +4550,7 @@ <translation id="7012372675181957985">Історія веб-перегляду також може зберігатися у вашому обліковому записі Google на сторінці <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation> <translation id="7013485839273047434">Інші розширення</translation> <translation id="7014174261166285193">Помилка встановлення.</translation> -<translation id="7017004637493394352">Ще раз скажіть "OK Google"</translation> +<translation id="7017004637493394352">Ще раз скажіть "Ok Google"</translation> <translation id="7017219178341817193">Додати нову сторінку</translation> <translation id="7017354871202642555">Неможливо вибрати режим після налаштування вікна.</translation> <translation id="7017480957358237747">дозволяти чи забороняти певні веб-сайти;</translation> @@ -5620,7 +5620,7 @@ <translation id="8487700953926739672">Доступ у режимі офлайн</translation> <translation id="8490896350101740396">Оновлено такі додатки-термінали: <ph name="UPDATED_APPS" />. Перезавантажте пристрій, щоб завершити оновлення.</translation> <translation id="8493236660459102203">Мікрофон:</translation> -<translation id="8495193314787127784">Увімкнути "OK Google"</translation> +<translation id="8495193314787127784">Увімкнути команду "Ok Google"</translation> <translation id="8496717697661868878">Запустити цей плагін</translation> <translation id="8497392509610708671">Це можна будь-коли змінити в <ph name="BEGIN_LINK" />налаштуваннях Chrome<ph name="END_LINK" />.</translation> <translation id="8498716162437226120">Додати пристрій Bluetooth</translation> @@ -5669,7 +5669,7 @@ <translation id="8565650234829130278">Спроба встановити програму нижчої версії.</translation> <translation id="8569682776816196752">Не знайдено жодного місця призначення</translation> <translation id="8569764466147087991">Виберіть файл, який потрібно відкрити</translation> -<translation id="8571032220281885258">Коли ви скажете "OK Google", Chrome шукатиме те, що ви скажете далі.</translation> +<translation id="8571032220281885258">Коли ви кажете "Ok Google", Chrome виконує пошук за фразою, яку ви кажете після цього.</translation> <translation id="8571108619753148184">Сервер 4</translation> <translation id="8574234089711453001">Показувати кнопку "Завантажити", коли відкривається сторінка з URL-адресою медіафайлу.</translation> <translation id="857779305329188634">Увімкнути підтримку експериментального протоколу QUIC.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_vi.xtb b/chromium/chrome/app/resources/generated_resources_vi.xtb index 19fb5e1085b..e047c8834c8 100644 --- a/chromium/chrome/app/resources/generated_resources_vi.xtb +++ b/chromium/chrome/app/resources/generated_resources_vi.xtb @@ -1762,7 +1762,7 @@ Vui lòng kiểm tra email của bạn tại <ph name="ACCOUNT_EMAIL" /> để b <translation id="3251759466064201842"><Không Thuộc Chứng chỉ></translation> <translation id="3252266817569339921">Tiếng Pháp</translation> <translation id="3254434849914415189">Chọn ứng dụng mặc định cho các tệp <ph name="FILE_TYPE" />:</translation> -<translation id="3255228561559750854">Tìm kiếm hoặc nói "Ok, Google"</translation> +<translation id="3255228561559750854">Tìm kiếm hoặc nói "Ok Google"</translation> <translation id="3257011895468050906">Kích hoạt hỗ trợ Token Binding.</translation> <translation id="3260892921936048802">&Tải xuống...</translation> <translation id="326356299252142602">Sử dụng API MIDI trong Windows Runtime</translation> diff --git a/chromium/chrome/app/resources/google_chrome_strings_id.xtb b/chromium/chrome/app/resources/google_chrome_strings_id.xtb index 428ac084a8a..de248d2b750 100644 --- a/chromium/chrome/app/resources/google_chrome_strings_id.xtb +++ b/chromium/chrome/app/resources/google_chrome_strings_id.xtb @@ -37,7 +37,7 @@ <translation id="1818142563254268765">Chrome tidak dapat memperbarui dirinya sendiri ke versi terbaru, jadi Anda ketinggalan perbaikan keamanan dan fitur baru yang keren. Anda perlu memperbarui Chrome.</translation> <translation id="1877026089748256423">Chrome terlalu lawas</translation> <translation id="2063848847527508675">Chrome OS harus dimulai ulang untuk menerapkan pembaruan.</translation> -<translation id="2077129598763517140">Gunakan percepatan perangkat keras saat tersedia</translation> +<translation id="2077129598763517140">Gunakan akselerasi hardware jika tersedia</translation> <translation id="2084710999043359739">Tambahkan ke Chrome</translation> <translation id="2120620239521071941">Tindakan ini akan menghapus <ph name="ITEMS_COUNT" /> item dari perangkat ini. Untuk mengambil data nanti, login ke Chrome sebagai <ph name="USER_EMAIL" />.</translation> <translation id="2147651015520127414">Chrome memverifikasi bahwa <ph name="ISSUER" /> menerbitkan sertifikat situs web ini.</translation> diff --git a/chromium/chrome/app/resources/google_chrome_strings_pl.xtb b/chromium/chrome/app/resources/google_chrome_strings_pl.xtb index d81a501a07c..4b740667742 100644 --- a/chromium/chrome/app/resources/google_chrome_strings_pl.xtb +++ b/chromium/chrome/app/resources/google_chrome_strings_pl.xtb @@ -191,7 +191,7 @@ Więcej instrukcji znajdziesz w e-mailu wysłanym na adres <ph name="ACCOUNT_EM <translation id="6598387184982954187">Używasz adresu <ph name="PROFILE_EMAIL" /> do synchronizowania danych w Chrome. Aby zaktualizować ustawienia synchronizacji lub używać Chrome bez konta Google, wejdź na stronę <ph name="SETTINGS_LINK" />.</translation> <translation id="6600954340915313787">Skopiowana do Chrome</translation> <translation id="6626317981028933585">Niestety ustawienia przeglądarki Firefox są niedostępne, gdy aplikacja jest uruchomiona. Aby importować ustawienia do Google Chrome, zapisz bieżącą pracę i zamknij wszystkie okna Firefoxa. Następnie kliknij przycisk Kontynuj.</translation> -<translation id="6634887557811630702">Google Chrome jest aktualny.</translation> +<translation id="6634887557811630702">Masz aktualną wersję Google Chrome</translation> <translation id="6676384891291319759">Skorzystaj z internetu</translation> <translation id="6757767188268205357">Nie proponuj więcej</translation> <translation id="683440813066116847">Reguła dla ruchu przychodzącego w Google Chrome Canary zezwalająca na ruch mDNS.</translation> diff --git a/chromium/chrome/browser/BUILD.gn b/chromium/chrome/browser/BUILD.gn index 503729aa06c..a79831556c1 100644 --- a/chromium/chrome/browser/BUILD.gn +++ b/chromium/chrome/browser/BUILD.gn @@ -795,6 +795,8 @@ split_static_library("browser") { "page_load_metrics/observers/https_engagement_metrics/https_engagement_service_factory.h", "page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.cc", "page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.h", + "page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc", + "page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.h", "page_load_metrics/observers/prerender_page_load_metrics_observer.cc", "page_load_metrics/observers/prerender_page_load_metrics_observer.h", "page_load_metrics/observers/previews_page_load_metrics_observer.cc", diff --git a/chromium/chrome/browser/chromeos/BUILD.gn b/chromium/chrome/browser/chromeos/BUILD.gn index 5fe6e425e5c..02a4b6bac36 100644 --- a/chromium/chrome/browser/chromeos/BUILD.gn +++ b/chromium/chrome/browser/chromeos/BUILD.gn @@ -222,6 +222,8 @@ source_set("chromeos") { "arc/arc_auth_notification.h", "arc/arc_auth_service.cc", "arc/arc_auth_service.h", + "arc/arc_migration_guide_notification.cc", + "arc/arc_migration_guide_notification.h", "arc/arc_optin_uma.cc", "arc/arc_optin_uma.h", "arc/arc_play_store_enabled_preference_handler.cc", diff --git a/chromium/chrome/browser/extensions/api/debugger/debugger_apitest.cc b/chromium/chrome/browser/extensions/api/debugger/debugger_apitest.cc index b24472228d5..615ee3a7276 100644 --- a/chromium/chrome/browser/extensions/api/debugger/debugger_apitest.cc +++ b/chromium/chrome/browser/extensions/api/debugger/debugger_apitest.cc @@ -262,8 +262,13 @@ IN_PROC_BROWSER_TEST_F(DebuggerApiTest, InfoBar) { EXPECT_EQ(1u, service2->infobar_count()); EXPECT_EQ(1u, service3->infobar_count()); - // Closing infobar should cause detach and remove all infobars. + // Calling delegate()->InfoBarDismissed() on a global infobar should + // cause detach and removal of all infobars, except the one used to + // fetch the delegate (i.e., service2->infobar_at(0) itself). + // Afterwards, service2->infobar_at(0) must be explicitly removed. + // See InfoBarView::ButtonPressed for an example. service2->infobar_at(0)->delegate()->InfoBarDismissed(); + service2->infobar_at(0)->RemoveSelf(); EXPECT_EQ(0u, service1->infobar_count()); EXPECT_EQ(0u, service2->infobar_count()); EXPECT_EQ(0u, service3->infobar_count()); diff --git a/chromium/chrome/browser/extensions/api/identity/identity_api.cc b/chromium/chrome/browser/extensions/api/identity/identity_api.cc index 7de43edec2b..90e95c7b1f8 100644 --- a/chromium/chrome/browser/extensions/api/identity/identity_api.cc +++ b/chromium/chrome/browser/extensions/api/identity/identity_api.cc @@ -221,7 +221,11 @@ void IdentityAPI::SetAccountStateForTest(gaia::AccountIds ids, template <> void BrowserContextKeyedAPIFactory<IdentityAPI>::DeclareFactoryDependencies() { DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); + + DependsOn(ChromeSigninClientFactory::GetInstance()); + DependsOn(LoginUIServiceFactory::GetInstance()); DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance()); + DependsOn(SigninManagerFactory::GetInstance()); } } // namespace extensions diff --git a/chromium/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc b/chromium/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc index a9870015a86..be249c91898 100644 --- a/chromium/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc +++ b/chromium/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc @@ -80,6 +80,8 @@ class MonitorFinder : public base::RefCountedThreadSafe<MonitorFinder> { if (!rfh) return; gfx::NativeView native_view = rfh->GetNativeView(); + if (!native_view) + return; #if defined(USE_AURA) aura::WindowTreeHost* host = native_view->GetHost(); if (!host) diff --git a/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json b/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json index 37a64d5eccc..29310477b32 100644 --- a/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json +++ b/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json @@ -1,5 +1,5 @@ { - "x-version": 20, + "x-version": 21, "google-talk": { "mime_types": [ ], @@ -80,9 +80,9 @@ ], "versions": [ { - "version": "24.0.0.221", + "version": "25.0.0.148", "status": "up_to_date", - "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-04.html" + "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-10.html" } ], "lang": "en-US", diff --git a/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json b/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json index 2543b4eac26..a07eb278763 100644 --- a/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json +++ b/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json @@ -1,5 +1,5 @@ { - "x-version": 26, + "x-version": 27, "google-talk": { "mime_types": [ ], @@ -115,9 +115,9 @@ ], "versions": [ { - "version": "24.0.0.221", + "version": "25.0.0.148", "status": "requires_authorization", - "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-04.html" + "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-10.html" } ], "lang": "en-US", diff --git a/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json b/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json index c005be245e4..0f4a9286e83 100644 --- a/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json +++ b/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json @@ -1,5 +1,5 @@ { - "x-version": 35, + "x-version": 36, "google-talk": { "mime_types": [ ], @@ -137,9 +137,9 @@ ], "versions": [ { - "version": "24.0.0.221", + "version": "25.0.0.148", "status": "requires_authorization", - "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-04.html" + "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-10.html" } ], "lang": "en-US", diff --git a/chromium/chrome/browser/resources/welcome/welcome.css b/chromium/chrome/browser/resources/welcome/welcome.css index 54556bc4586..78c743be800 100644 --- a/chromium/chrome/browser/resources/welcome/welcome.css +++ b/chromium/chrome/browser/resources/welcome/welcome.css @@ -60,7 +60,7 @@ body { @keyframes colorize { from { - -webkit-filter: grayscale(100%); + filter: grayscale(100%) brightness(128%) contrast(20%) brightness(161%); opacity: .6; } } @@ -148,10 +148,10 @@ body { } .logo-shadow { - -webkit-filter: blur(16px); animation: fadeInAndSlideDownShadow 300ms 600ms both; background: rgba(0, 0, 0, .2); border-radius: 50%; + filter: blur(16px); height: 96px; position: absolute; top: 16px; diff --git a/chromium/components/arc/common/notifications.mojom b/chromium/components/arc/common/notifications.mojom index 563ee775d83..50621f101b0 100644 --- a/chromium/components/arc/common/notifications.mojom +++ b/chromium/components/arc/common/notifications.mojom @@ -45,6 +45,15 @@ enum ArcNotificationExpandState { EXPANDED = 2, }; +// These values represent what shows in an ARC custom notification. +[Extensible, MinVersion=11] +enum ArcNotificationShownContents { + // The normal notification contents are shown. + CONTENTS_SHOWN = 0, + // The notification settings view is shown. + SETTINGS_SHOWN = 1, +}; + struct ArcNotificationData { // Identifier of notification string key; @@ -98,6 +107,9 @@ struct ArcNotificationData { // Flag if the notification is expandable [MinVersion=10] ArcNotificationExpandState expand_state; + // Flag for what shows in a notification. + [MinVersion=11] + ArcNotificationShownContents shown_contents; }; [MinVersion=2] diff --git a/chromium/components/autofill/content/browser/BUILD.gn b/chromium/components/autofill/content/browser/BUILD.gn index 88576886284..5fa6ea67efd 100644 --- a/chromium/components/autofill/content/browser/BUILD.gn +++ b/chromium/components/autofill/content/browser/BUILD.gn @@ -10,6 +10,8 @@ static_library("browser") { "content_autofill_driver.h", "content_autofill_driver_factory.cc", "content_autofill_driver_factory.h", + "key_press_handler_manager.cc", + "key_press_handler_manager.h", "risk/fingerprint.cc", "risk/fingerprint.h", ] @@ -61,6 +63,7 @@ source_set("unit_tests") { testonly = true sources = [ "content_autofill_driver_unittest.cc", + "key_press_handler_manager_unittest.cc", "payments/payments_client_unittest.cc", ] diff --git a/chromium/components/autofill/content/browser/content_autofill_driver.cc b/chromium/components/autofill/content/browser/content_autofill_driver.cc index 710a1e74c9a..38bf3070fd2 100644 --- a/chromium/components/autofill/content/browser/content_autofill_driver.cc +++ b/chromium/components/autofill/content/browser/content_autofill_driver.cc @@ -20,6 +20,7 @@ #include "content/public/browser/navigation_handle.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_widget_host.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/site_instance.h" #include "content/public/browser/storage_partition.h" @@ -41,6 +42,7 @@ ContentAutofillDriver::ContentAutofillDriver( app_locale, enable_download_manager)), autofill_external_delegate_(autofill_manager_.get(), this), + key_press_handler_manager_(this), binding_(this) { autofill_manager_->SetExternalDelegate(&autofill_external_delegate_); } @@ -265,4 +267,29 @@ const mojom::AutofillAgentPtr& ContentAutofillDriver::GetAutofillAgent() { return autofill_agent_; } +void ContentAutofillDriver::RegisterKeyPressHandler( + const content::RenderWidgetHost::KeyPressEventCallback& handler) { + key_press_handler_manager_.RegisterKeyPressHandler(handler); +} + +void ContentAutofillDriver::RemoveKeyPressHandler() { + key_press_handler_manager_.RemoveKeyPressHandler(); +} + +void ContentAutofillDriver::AddHandler( + const content::RenderWidgetHost::KeyPressEventCallback& handler) { + content::RenderWidgetHostView* view = render_frame_host_->GetView(); + if (!view) + return; + view->GetRenderWidgetHost()->AddKeyPressEventCallback(handler); +} + +void ContentAutofillDriver::RemoveHandler( + const content::RenderWidgetHost::KeyPressEventCallback& handler) { + content::RenderWidgetHostView* view = render_frame_host_->GetView(); + if (!view) + return; + view->GetRenderWidgetHost()->RemoveKeyPressEventCallback(handler); +} + } // namespace autofill diff --git a/chromium/components/autofill/content/browser/content_autofill_driver.h b/chromium/components/autofill/content/browser/content_autofill_driver.h index 0f6fb084027..f038f76f89c 100644 --- a/chromium/components/autofill/content/browser/content_autofill_driver.h +++ b/chromium/components/autofill/content/browser/content_autofill_driver.h @@ -9,6 +9,7 @@ #include <string> #include "base/supports_user_data.h" +#include "components/autofill/content/browser/key_press_handler_manager.h" #include "components/autofill/content/common/autofill_agent.mojom.h" #include "components/autofill/content/common/autofill_driver.mojom.h" #include "components/autofill/core/browser/autofill_driver.h" @@ -29,7 +30,8 @@ class AutofillClient; // communication from the renderer and from the external world. There is one // instance per RenderFrameHost. class ContentAutofillDriver : public AutofillDriver, - public mojom::AutofillDriver { + public mojom::AutofillDriver, + public KeyPressHandlerManager::Delegate { public: ContentAutofillDriver( content::RenderFrameHost* render_frame_host, @@ -103,12 +105,23 @@ class ContentAutofillDriver : public AutofillDriver, const mojom::AutofillAgentPtr& GetAutofillAgent(); + // Methods forwarded to key_press_handler_manager_. + void RegisterKeyPressHandler( + const content::RenderWidgetHost::KeyPressEventCallback& handler); + void RemoveKeyPressHandler(); + protected: // Sets the manager to |manager| and sets |manager|'s external delegate // to |autofill_external_delegate_|. Takes ownership of |manager|. void SetAutofillManager(std::unique_ptr<AutofillManager> manager); private: + // KeyPressHandlerManager::Delegate: + void AddHandler( + const content::RenderWidgetHost::KeyPressEventCallback& handler) override; + void RemoveHandler( + const content::RenderWidgetHost::KeyPressEventCallback& handler) override; + // Weak ref to the RenderFrameHost the driver is associated with. Should // always be non-NULL and valid for lifetime of |this|. content::RenderFrameHost* const render_frame_host_; @@ -124,6 +137,8 @@ class ContentAutofillDriver : public AutofillDriver, // case where the Autofill native UI is enabled. AutofillExternalDelegate autofill_external_delegate_; + KeyPressHandlerManager key_press_handler_manager_; + mojo::Binding<mojom::AutofillDriver> binding_; mojom::AutofillAgentPtr autofill_agent_; diff --git a/chromium/components/autofill/content/browser/key_press_handler_manager.cc b/chromium/components/autofill/content/browser/key_press_handler_manager.cc new file mode 100644 index 00000000000..96b463bc5d4 --- /dev/null +++ b/chromium/components/autofill/content/browser/key_press_handler_manager.cc @@ -0,0 +1,37 @@ +// Copyright 2017 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 "components/autofill/content/browser/key_press_handler_manager.h" + +namespace autofill { + +KeyPressHandlerManager::KeyPressHandlerManager(Delegate* delegate) + : delegate_(delegate) {} + +KeyPressHandlerManager::~KeyPressHandlerManager() = default; + +void KeyPressHandlerManager::RegisterKeyPressHandler( + const content::RenderWidgetHost::KeyPressEventCallback& handler) { + // It would have been nice to be able to tell if two callbacks are just the + // same function with the same bound arguments. That's not what Equals() does + // (they have to have the same BindState), but it's the closest approximation + // available. + if (handler.is_null() || handler.Equals(handler_)) + return; + + if (!handler_.is_null()) + delegate_->RemoveHandler(handler_); + handler_ = handler; + delegate_->AddHandler(handler_); +} + +void KeyPressHandlerManager::RemoveKeyPressHandler() { + if (handler_.is_null()) + return; + + delegate_->RemoveHandler(handler_); + handler_.Reset(); +} + +} // namespace autofill diff --git a/chromium/components/autofill/content/browser/key_press_handler_manager.h b/chromium/components/autofill/content/browser/key_press_handler_manager.h new file mode 100644 index 00000000000..916ca9df3bb --- /dev/null +++ b/chromium/components/autofill/content/browser/key_press_handler_manager.h @@ -0,0 +1,47 @@ +// Copyright 2017 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 COMPONENTS_AUTOFILL_CONTENT_BROWSER_KEY_PRESS_HANDLER_MANAGER_H_ +#define COMPONENTS_AUTOFILL_CONTENT_BROWSER_KEY_PRESS_HANDLER_MANAGER_H_ + +#include "base/macros.h" +#include "content/public/browser/render_widget_host.h" + +namespace autofill { + +// KeyPressHandlerManager allows registering a key press handler and ensuring +// its unregistering in case of destruction of the manager or request for +// registration of another handler. It still needs a Delegate implementation to +// use the low-level handler registration API. + +class KeyPressHandlerManager { + public: + class Delegate { + public: + virtual void AddHandler( + const content::RenderWidgetHost::KeyPressEventCallback& handler) = 0; + virtual void RemoveHandler( + const content::RenderWidgetHost::KeyPressEventCallback& handler) = 0; + }; + + explicit KeyPressHandlerManager(Delegate* delegate); + + virtual ~KeyPressHandlerManager(); + + void RegisterKeyPressHandler( + const content::RenderWidgetHost::KeyPressEventCallback& handler); + + void RemoveKeyPressHandler(); // Unregisters previous handler. + + private: + Delegate* const delegate_; + + content::RenderWidgetHost::KeyPressEventCallback handler_; + + DISALLOW_COPY_AND_ASSIGN(KeyPressHandlerManager); +}; + +} // namespace autofill + +#endif // COMPONENTS_AUTOFILL_CONTENT_BROWSER_KEY_PRESS_HANDLER_MANAGER_H_ diff --git a/chromium/components/autofill/content/browser/key_press_handler_manager_unittest.cc b/chromium/components/autofill/content/browser/key_press_handler_manager_unittest.cc new file mode 100644 index 00000000000..e839b3d2b2e --- /dev/null +++ b/chromium/components/autofill/content/browser/key_press_handler_manager_unittest.cc @@ -0,0 +1,113 @@ +// Copyright 2017 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 "components/autofill/content/browser/key_press_handler_manager.h" + +#include <string> + +#include "base/bind.h" +#include "content/public/browser/native_web_keyboard_event.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace autofill { + +namespace { + +const content::NativeWebKeyboardEvent + kDummyEvent(blink::WebInputEvent::Undefined, 0, 0); + +// Dummy keyboard event handler: ignores the event, but appends the given |name| +// to a logging |target|. +bool DummyHandler(const char* name, + std::string* target, + const content::NativeWebKeyboardEvent& /*event*/) { + target->append(name); + return false; +} + +// A delegate which logs the handlers instead of adding and removing them. +class LoggingDelegate : public KeyPressHandlerManager::Delegate { + public: + explicit LoggingDelegate(std::string* target) : target_(target) {} + + // KeyPressHandlerManager::Delegate: + void AddHandler(const content::RenderWidgetHost::KeyPressEventCallback& + handler) override { + target_->append("A"); + handler.Run(kDummyEvent); + } + void RemoveHandler(const content::RenderWidgetHost::KeyPressEventCallback& + handler) override { + target_->append("R"); + handler.Run(kDummyEvent); + } + + private: + std::string* const target_; +}; + +} // namespace + +class KeyPressHandlerManagerTest : public testing::Test { + public: + KeyPressHandlerManagerTest() : delegate_(&callback_trace_) {} + + protected: + content::RenderWidgetHost::KeyPressEventCallback CallbackForName( + const char* name) { + return base::Bind(DummyHandler, name, &callback_trace_); + } + + // String encoding the events related to adding and removing callbacks. For + // example, "A1R1A2R2" means that callback "1" was added, then removed, and + // then callback "2" was added and removed. + std::string callback_trace_; + + LoggingDelegate delegate_; +}; + +// Removing should remove the previously added callback. +TEST_F(KeyPressHandlerManagerTest, AddRemove) { + KeyPressHandlerManager manager(&delegate_); + manager.RegisterKeyPressHandler(CallbackForName("1")); + manager.RemoveKeyPressHandler(); + EXPECT_EQ("A1R1", callback_trace_); +} + +// Registering a new callback should remove the old one. +TEST_F(KeyPressHandlerManagerTest, AddReplace) { + KeyPressHandlerManager manager(&delegate_); + manager.RegisterKeyPressHandler(CallbackForName("1")); + manager.RegisterKeyPressHandler(CallbackForName("2")); + manager.RemoveKeyPressHandler(); + EXPECT_EQ("A1R1A2R2", callback_trace_); +} + +// Without registering a callback first, none should be removed. +TEST_F(KeyPressHandlerManagerTest, NoRemove) { + KeyPressHandlerManager manager(&delegate_); + manager.RemoveKeyPressHandler(); + EXPECT_EQ(std::string(), callback_trace_); +} + +// Adding one callback twice should be a no-op. +TEST_F(KeyPressHandlerManagerTest, AddTwice) { + KeyPressHandlerManager manager(&delegate_); + auto callback = CallbackForName("1"); + manager.RegisterKeyPressHandler(callback); + manager.RegisterKeyPressHandler(callback); + manager.RemoveKeyPressHandler(); + EXPECT_EQ("A1R1", callback_trace_); +} + +// Removing one callback twice should be a no-op. +TEST_F(KeyPressHandlerManagerTest, RemoveTwice) { + KeyPressHandlerManager manager(&delegate_); + manager.RegisterKeyPressHandler(CallbackForName("1")); + manager.RemoveKeyPressHandler(); + manager.RemoveKeyPressHandler(); + EXPECT_EQ("A1R1", callback_trace_); +} + +} // namespace autofill diff --git a/chromium/components/autofill/core/browser/autofill_external_delegate.cc b/chromium/components/autofill/core/browser/autofill_external_delegate.cc index 5853a8de1d7..3db7f0fd00b 100644 --- a/chromium/components/autofill/core/browser/autofill_external_delegate.cc +++ b/chromium/components/autofill/core/browser/autofill_external_delegate.cc @@ -285,6 +285,10 @@ bool AutofillExternalDelegate::IsCreditCardPopup() { return is_credit_card_popup_; } +AutofillDriver* AutofillExternalDelegate::GetAutofillDriver() { + return driver_; +} + void AutofillExternalDelegate::Reset() { manager_->client()->HideAutofillPopup(); } diff --git a/chromium/components/autofill/core/browser/autofill_external_delegate.h b/chromium/components/autofill/core/browser/autofill_external_delegate.h index 6a9807a0505..a5984209fa9 100644 --- a/chromium/components/autofill/core/browser/autofill_external_delegate.h +++ b/chromium/components/autofill/core/browser/autofill_external_delegate.h @@ -54,6 +54,7 @@ class AutofillExternalDelegate : public AutofillPopupDelegate { // Returns false for all popups prior to |onQuery|, true for credit card // popups after call to |onQuery|. bool IsCreditCardPopup() override; + AutofillDriver* GetAutofillDriver() override; // Records and associates a query_id with web form data. Called // when the renderer posts an Autofill query to the browser. |bounds| diff --git a/chromium/components/autofill/core/browser/autofill_popup_delegate.h b/chromium/components/autofill/core/browser/autofill_popup_delegate.h index 5a864242755..6febbf91cfc 100644 --- a/chromium/components/autofill/core/browser/autofill_popup_delegate.h +++ b/chromium/components/autofill/core/browser/autofill_popup_delegate.h @@ -9,6 +9,8 @@ namespace autofill { +class AutofillDriver; + // An interface for interaction with AutofillPopupController. Will be notified // of events by the controller. class AutofillPopupDelegate { @@ -46,6 +48,9 @@ class AutofillPopupDelegate { // Returns true if popup is for credit card. virtual bool IsCreditCardPopup() = 0; + + // Returns the associated AutofillDriver. + virtual AutofillDriver* GetAutofillDriver() = 0; }; } // namespace autofill diff --git a/chromium/components/display_compositor/buffer_queue.cc b/chromium/components/display_compositor/buffer_queue.cc index afb40e1a491..60b50d7a8bb 100644 --- a/chromium/components/display_compositor/buffer_queue.cc +++ b/chromium/components/display_compositor/buffer_queue.cc @@ -183,13 +183,32 @@ std::unique_ptr<BufferQueue::AllocatedSurface> BufferQueue::RecreateBuffer( } void BufferQueue::PageFlipComplete() { - DCHECK(!in_flight_surfaces_.empty()); + // Early out when no surface is in-flight. This can happen when using + // overlays and page flipping without changing the primary plane. + if (in_flight_surfaces_.empty()) + return; if (displayed_surface_) available_surfaces_.push_back(std::move(displayed_surface_)); displayed_surface_ = std::move(in_flight_surfaces_.front()); in_flight_surfaces_.pop_front(); } +uint32_t BufferQueue::GetCurrentTextureId() const { + // Return current surface texture if bound. + if (current_surface_) + return current_surface_->texture; + + // Return in-flight or displayed surface texture if no surface is + // currently bound. This can happen when using overlays and surface + // damage is empty. + if (!in_flight_surfaces_.empty()) + return in_flight_surfaces_.back()->texture; + if (displayed_surface_) + return displayed_surface_->texture; + + return 0; +} + void BufferQueue::FreeAllSurfaces() { displayed_surface_.reset(); current_surface_.reset(); diff --git a/chromium/components/display_compositor/buffer_queue.h b/chromium/components/display_compositor/buffer_queue.h index 7ac212e1be7..c6bedbb1757 100644 --- a/chromium/components/display_compositor/buffer_queue.h +++ b/chromium/components/display_compositor/buffer_queue.h @@ -60,12 +60,9 @@ class DISPLAY_COMPOSITOR_EXPORT BufferQueue { float scale_factor, const gfx::ColorSpace& color_space, bool use_stencil); - void RecreateBuffers(); + uint32_t GetCurrentTextureId() const; - uint32_t current_texture_id() const { - return current_surface_ ? current_surface_->texture : 0; - } uint32_t fbo() const { return fbo_; } uint32_t internal_format() const { return internal_format_; } diff --git a/chromium/components/exo/pointer.cc b/chromium/components/exo/pointer.cc index 61442ed0608..1697f5c34dc 100644 --- a/chromium/components/exo/pointer.cc +++ b/chromium/components/exo/pointer.cc @@ -380,8 +380,12 @@ void Pointer::OnCursorCaptured(const gfx::Point& hotspot, void Pointer::UpdateCursor() { DCHECK(focus_); + aura::Window* root_window = focus_->window()->GetRootWindow(); + if (!root_window) + return; + aura::client::CursorClient* cursor_client = - aura::client::GetCursorClient(focus_->window()->GetRootWindow()); + aura::client::GetCursorClient(root_window); if (cursor_client) cursor_client->SetCursor(cursor_); } diff --git a/chromium/components/exo/shell_surface.cc b/chromium/components/exo/shell_surface.cc index 97c18fee52e..57460ab9654 100644 --- a/chromium/components/exo/shell_surface.cc +++ b/chromium/components/exo/shell_surface.cc @@ -596,7 +596,7 @@ void ShellSurface::SetGeometry(const gfx::Rect& geometry) { void ShellSurface::SetRectangularShadowEnabled(bool enabled) { TRACE_EVENT1("exo", "ShellSurface::SetRectangularShadowEnabled", "enabled", enabled); - shadow_underlay_in_surface_ = false; + pending_shadow_underlay_in_surface_ = false; shadow_enabled_ = enabled; } @@ -604,7 +604,7 @@ void ShellSurface::SetRectangularShadow_DEPRECATED( const gfx::Rect& content_bounds) { TRACE_EVENT1("exo", "ShellSurface::SetRectangularShadow_DEPRECATED", "content_bounds", content_bounds.ToString()); - shadow_underlay_in_surface_ = false; + pending_shadow_underlay_in_surface_ = false; shadow_content_bounds_ = content_bounds; shadow_enabled_ = !content_bounds.IsEmpty(); } @@ -613,7 +613,7 @@ void ShellSurface::SetRectangularSurfaceShadow( const gfx::Rect& content_bounds) { TRACE_EVENT1("exo", "ShellSurface::SetRectangularSurfaceShadow", "content_bounds", content_bounds.ToString()); - shadow_underlay_in_surface_ = true; + pending_shadow_underlay_in_surface_ = true; shadow_content_bounds_ = content_bounds; shadow_enabled_ = !content_bounds.IsEmpty(); } @@ -847,13 +847,26 @@ base::string16 ShellSurface::GetWindowTitle() const { return title_; } +void ShellSurface::SaveWindowPlacement(const gfx::Rect& bounds, + ui::WindowShowState show_state) { + if (bounds_mode_ != BoundsMode::CLIENT) + WidgetDelegate::SaveWindowPlacement(bounds, show_state); +} + +bool ShellSurface::GetSavedWindowPlacement( + const views::Widget* widget, + gfx::Rect* bounds, + ui::WindowShowState* show_state) const { + if (bounds_mode_ != BoundsMode::CLIENT) + return WidgetDelegate::GetSavedWindowPlacement(widget, bounds, show_state); + return false; +} + void ShellSurface::WindowClosing() { if (resizer_) EndDrag(true /* revert */); SetEnabled(false); widget_ = nullptr; - shadow_overlay_ = nullptr; - shadow_underlay_ = nullptr; } views::Widget* ShellSurface::GetWidget() { @@ -1143,8 +1156,7 @@ void ShellSurface::CreateShellSurfaceWidget(ui::WindowShowState show_state) { // Allow the client to request bounds that do not fill the entire work area // when maximized, or the entire display when fullscreen. - window_state->set_allow_set_bounds_in_maximized( - bounds_mode_ == BoundsMode::CLIENT); + window_state->set_allow_set_bounds_direct(bounds_mode_ == BoundsMode::CLIENT); // Notify client of initial state if different than normal. if (window_state->GetStateType() != ash::wm::WINDOW_STATE_TYPE_NORMAL && @@ -1388,7 +1400,7 @@ void ShellSurface::UpdateWidgetBounds() { ash::wm::WindowState* window_state = ash::wm::GetWindowState(widget_->GetNativeWindow()); if (window_state->IsMaximizedOrFullscreenOrPinned() && - !window_state->allow_set_bounds_in_maximized()) { + !window_state->allow_set_bounds_direct()) { return; } @@ -1449,8 +1461,23 @@ void ShellSurface::UpdateSurfaceBounds() { void ShellSurface::UpdateShadow() { if (!widget_ || !surface_) return; + if (shadow_underlay_in_surface_ != pending_shadow_underlay_in_surface_) { + shadow_underlay_in_surface_ = pending_shadow_underlay_in_surface_; + shadow_overlay_.reset(); + shadow_underlay_.reset(); + } + aura::Window* window = widget_->GetNativeWindow(); - if (!shadow_enabled_) { + + bool underlay_capture_events = + WMHelper::GetInstance()->IsSpokenFeedbackEnabled() && widget_->IsActive(); + bool black_background_enabled = + ((widget_->IsFullscreen() || widget_->IsMaximized()) || + underlay_capture_events) && + ash::wm::GetWindowState(window)->allow_set_bounds_direct() && + window->layer()->GetTargetTransform().IsIdentity(); + + if (!shadow_enabled_ && !black_background_enabled) { wm::SetShadowElevation(window, wm::ShadowElevation::NONE); if (shadow_underlay_) shadow_underlay_->Hide(); @@ -1497,11 +1524,12 @@ void ShellSurface::UpdateShadow() { // Always create and show the underlay, even in maximized/fullscreen. if (!shadow_underlay_) { - shadow_underlay_ = new aura::Window(nullptr); + shadow_underlay_ = base::MakeUnique<aura::Window>(nullptr); + shadow_underlay_->set_owned_by_parent(false); shadow_underlay_event_handler_ = base::MakeUnique<ShadowUnderlayEventHandler>(); shadow_underlay_->SetTargetHandler(shadow_underlay_event_handler_.get()); - DCHECK(shadow_underlay_->owned_by_parent()); + DCHECK(!shadow_underlay_->owned_by_parent()); // Ensure the background area inside the shadow is solid black. // Clients that provide translucent contents should not be using // rectangular shadows as this method requires opaque contents to @@ -1510,18 +1538,14 @@ void ShellSurface::UpdateShadow() { shadow_underlay_->layer()->SetColor(SK_ColorBLACK); DCHECK(shadow_underlay_->layer()->fills_bounds_opaquely()); if (shadow_underlay_in_surface_) { - surface_->window()->AddChild(shadow_underlay_); - surface_->window()->StackChildAtBottom(shadow_underlay_); + surface_->window()->AddChild(shadow_underlay()); + surface_->window()->StackChildAtBottom(shadow_underlay()); } else { - window->AddChild(shadow_underlay_); - window->StackChildAtBottom(shadow_underlay_); + window->AddChild(shadow_underlay()); + window->StackChildAtBottom(shadow_underlay()); } } - bool underlay_capture_events = - WMHelper::GetInstance()->IsSpokenFeedbackEnabled() && - widget_->IsActive(); - float shadow_underlay_opacity = shadow_background_opacity_; // Put the black background layer behind the window if @@ -1531,10 +1555,7 @@ void ShellSurface::UpdateShadow() { // thus the background can be visible). // 3) the window has no transform (the transformed background may // not cover the entire background, e.g. overview mode). - if ((widget_->IsFullscreen() || widget_->IsMaximized() || - underlay_capture_events) && - ash::wm::GetWindowState(window)->allow_set_bounds_in_maximized() && - window->layer()->GetTargetTransform().IsIdentity()) { + if (black_background_enabled) { if (shadow_underlay_in_surface_) { shadow_underlay_bounds = gfx::Rect(surface_->window()->bounds().size()); } else { @@ -1558,6 +1579,9 @@ void ShellSurface::UpdateShadow() { shadow_underlay_->SetBounds(shadow_underlay_bounds); + if (!shadow_underlay_->IsVisible()) + shadow_underlay_->Show(); + // TODO(oshima): Setting to the same value should be no-op. // crbug.com/642223. if (shadow_underlay_opacity != @@ -1565,25 +1589,24 @@ void ShellSurface::UpdateShadow() { shadow_underlay_->layer()->SetOpacity(shadow_underlay_opacity); } - shadow_underlay_->Show(); - wm::Shadow* shadow = wm::ShadowController::GetShadowForWindow(window); // Maximized/Fullscreen window does not create a shadow. if (!shadow) return; if (!shadow_overlay_) { - shadow_overlay_ = new aura::Window(nullptr); - DCHECK(shadow_overlay_->owned_by_parent()); + shadow_overlay_ = base::MakeUnique<aura::Window>(nullptr); + shadow_overlay_->set_owned_by_parent(false); + DCHECK(!shadow_overlay_->owned_by_parent()); shadow_overlay_->set_ignore_events(true); shadow_overlay_->Init(ui::LAYER_NOT_DRAWN); shadow_overlay_->layer()->Add(shadow->layer()); - window->AddChild(shadow_overlay_); + window->AddChild(shadow_overlay()); if (shadow_underlay_in_surface_) { - window->StackChildBelow(shadow_overlay_, surface_->window()); + window->StackChildBelow(shadow_overlay(), surface_->window()); } else { - window->StackChildAbove(shadow_overlay_, shadow_underlay_); + window->StackChildAbove(shadow_overlay(), shadow_underlay()); } shadow_overlay_->Show(); } diff --git a/chromium/components/exo/shell_surface.h b/chromium/components/exo/shell_surface.h index d621a988607..0bf2b7e916f 100644 --- a/chromium/components/exo/shell_surface.h +++ b/chromium/components/exo/shell_surface.h @@ -220,6 +220,11 @@ class ShellSurface : public SurfaceDelegate, bool CanMaximize() const override; bool CanMinimize() const override; base::string16 GetWindowTitle() const override; + void SaveWindowPlacement(const gfx::Rect& bounds, + ui::WindowShowState show_state) override; + bool GetSavedWindowPlacement(const views::Widget* widget, + gfx::Rect* bounds, + ui::WindowShowState* show_state) const override; void WindowClosing() override; views::Widget* GetWidget() override; const views::Widget* GetWidget() const override; @@ -260,8 +265,8 @@ class ShellSurface : public SurfaceDelegate, // Overridden from ui::AcceleratorTarget: bool AcceleratorPressed(const ui::Accelerator& accelerator) override; - aura::Window* shadow_overlay() { return shadow_overlay_; } - aura::Window* shadow_underlay() { return shadow_underlay_; } + aura::Window* shadow_overlay() { return shadow_overlay_.get(); } + aura::Window* shadow_underlay() { return shadow_underlay_.get(); } Surface* surface_for_testing() { return surface_; } @@ -342,8 +347,8 @@ class ShellSurface : public SurfaceDelegate, gfx::Vector2d pending_origin_offset_accumulator_; int resize_component_ = HTCAPTION; // HT constant (see ui/base/hit_test.h) int pending_resize_component_ = HTCAPTION; - aura::Window* shadow_overlay_ = nullptr; - aura::Window* shadow_underlay_ = nullptr; + std::unique_ptr<aura::Window> shadow_overlay_; + std::unique_ptr<aura::Window> shadow_underlay_; std::unique_ptr<ui::EventHandler> shadow_underlay_event_handler_; gfx::Rect shadow_content_bounds_; float shadow_background_opacity_ = 1.0; @@ -353,6 +358,7 @@ class ShellSurface : public SurfaceDelegate, int top_inset_height_ = 0; int pending_top_inset_height_ = 0; bool shadow_underlay_in_surface_ = true; + bool pending_shadow_underlay_in_surface_ = true; bool system_modal_ = false; DISALLOW_COPY_AND_ASSIGN(ShellSurface); diff --git a/chromium/components/exo/shell_surface_unittest.cc b/chromium/components/exo/shell_surface_unittest.cc index 5e300222acb..b8dbca007cd 100644 --- a/chromium/components/exo/shell_surface_unittest.cc +++ b/chromium/components/exo/shell_surface_unittest.cc @@ -829,6 +829,20 @@ TEST_F(ShellSurfaceTest, ShadowStartMaximized) { ASSERT_TRUE(shell_surface->shadow_underlay()); EXPECT_TRUE(shell_surface->shadow_underlay()->IsVisible()); + shell_surface->SetRectangularSurfaceShadow(gfx::Rect(0, 0, 0, 0)); + // Underlay should be created even without shadow. + ASSERT_TRUE(shell_surface->shadow_underlay()); + EXPECT_TRUE(shell_surface->shadow_underlay()->IsVisible()); + shell_surface->SetRectangularShadowEnabled(false); + surface->Commit(); + // Underlay should be created even without shadow. + ASSERT_TRUE(shell_surface->shadow_underlay()); + EXPECT_TRUE(shell_surface->shadow_underlay()->IsVisible()); + + shell_surface->SetRectangularShadowEnabled(true); + shell_surface->SetRectangularSurfaceShadow(gfx::Rect(10, 10, 100, 100)); + surface->Commit(); + // Restore the window and make sure the shadow is created, visible and // has the latest bounds. widget->Restore(); @@ -1011,5 +1025,41 @@ TEST_F(ShellSurfaceTest, SpokenFeedbackFullscreenBackground) { EXPECT_EQ(shadow_bounds, shell_surface2.shadow_underlay()->bounds()); } +// Make sure that a surface shell started in maximize creates deprecated +// shadow correctly. +TEST_F(ShellSurfaceTest, + StartMaximizedThenMinimizeWithSetRectangularShadow_DEPRECATED) { + const gfx::Size display_size = + display::Screen::GetScreen()->GetPrimaryDisplay().size(); + const gfx::Size buffer_size(display_size); + std::unique_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); + std::unique_ptr<Surface> surface(new Surface); + std::unique_ptr<ShellSurface> shell_surface(new ShellSurface( + surface.get(), nullptr, ShellSurface::BoundsMode::CLIENT, gfx::Point(), + true, false, ash::kShellWindowId_DefaultContainer)); + + // Start in maximized. + shell_surface->Maximize(); + surface->Attach(buffer.get()); + surface->Commit(); + + gfx::Rect shadow_bounds = + display::Screen::GetScreen()->GetPrimaryDisplay().bounds(); + shell_surface->SetGeometry(shadow_bounds); + shell_surface->SetRectangularShadow_DEPRECATED(shadow_bounds); + surface->Commit(); + EXPECT_EQ(shadow_bounds, + shell_surface->GetWidget()->GetWindowBoundsInScreen()); + ASSERT_EQ(shadow_bounds, shell_surface->shadow_underlay()->bounds()); + EXPECT_EQ(display::Screen::GetScreen()->GetPrimaryDisplay().size(), + shell_surface->surface_for_testing()->window()->bounds().size()); + + ash::wm::WMEvent minimize_event(ash::wm::WM_EVENT_MINIMIZE); + ash::WmWindow* window = + ash::WmWindow::Get(shell_surface->GetWidget()->GetNativeWindow()); + window->GetWindowState()->OnWMEvent(&minimize_event); +} + } // namespace } // namespace exo diff --git a/chromium/components/exo/touch.cc b/chromium/components/exo/touch.cc index fa2de6dd507..2ebdbb5950d 100644 --- a/chromium/components/exo/touch.cc +++ b/chromium/components/exo/touch.cc @@ -147,8 +147,13 @@ void Touch::OnTouchEvent(ui::TouchEvent* event) { return; } if (send_details) { - delegate_->OnTouchShape(touch_pointer_id, event->pointer_details().radius_x, - event->pointer_details().radius_y); + // Some devices do not report radius_y/minor. We assume a circular shape + // in that case. + float major = event->pointer_details().radius_x * 2.0f; + float minor = event->pointer_details().radius_y * 2.0f; + if (!minor) + minor = major; + delegate_->OnTouchShape(touch_pointer_id, major, minor); if (stylus_delegate_ && event->pointer_details().pointer_type != diff --git a/chromium/components/exo/touch_unittest.cc b/chromium/components/exo/touch_unittest.cc index 18917fb7544..1384229ac62 100644 --- a/chromium/components/exo/touch_unittest.cc +++ b/chromium/components/exo/touch_unittest.cc @@ -164,23 +164,24 @@ TEST_F(TouchTest, OnTouchShape) { testing::InSequence sequence; EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_, gfx::PointF())); - EXPECT_CALL(delegate, OnTouchShape(testing::_, 1, 1)); + EXPECT_CALL(delegate, OnTouchShape(testing::_, 20, 10)); EXPECT_CALL(delegate, OnTouchFrame()); EXPECT_CALL(delegate, OnTouchMotion(testing::_, testing::_, gfx::PointF(5, 5))); - EXPECT_CALL(delegate, OnTouchShape(testing::_, 1, 1)); + EXPECT_CALL(delegate, OnTouchShape(testing::_, 20, 10)); EXPECT_CALL(delegate, OnTouchFrame()); EXPECT_CALL(delegate, OnTouchMotion(testing::_, testing::_, gfx::PointF(10, 10))); - EXPECT_CALL(delegate, OnTouchShape(testing::_, 20, 10)); + EXPECT_CALL(delegate, OnTouchShape(testing::_, 20, 20)); EXPECT_CALL(delegate, OnTouchFrame()); EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_)); EXPECT_CALL(delegate, OnTouchFrame()); } generator.set_current_location(window.origin()); + generator.SetTouchRadius(10, 5); generator.PressTouch(); generator.MoveTouchBy(5, 5); - generator.SetTouchRadius(20, 10); + generator.SetTouchRadius(10, 0); // Minor not supported generator.MoveTouchBy(5, 5); generator.ReleaseTouch(); EXPECT_CALL(delegate, OnTouchDestroying(touch.get())); diff --git a/chromium/components/exo/wayland/server.cc b/chromium/components/exo/wayland/server.cc index 0abc727db2a..0faf554a77f 100644 --- a/chromium/components/exo/wayland/server.cc +++ b/chromium/components/exo/wayland/server.cc @@ -157,6 +157,10 @@ DEFINE_UI_CLASS_PROPERTY_KEY(bool, kSurfaceHasSecurityKey, false); // associated with window. DEFINE_UI_CLASS_PROPERTY_KEY(bool, kSurfaceHasBlendingKey, false); +// A property key containing a boolean set to true whether the current +// OnWindowActivated invocation should be ignored. +DEFINE_UI_CLASS_PROPERTY_KEY(bool, kIgnoreWindowActivated, false); + wl_resource* GetSurfaceResource(Surface* surface) { return surface->GetProperty(kSurfaceResourceKey); } @@ -1925,7 +1929,14 @@ void remote_surface_set_top_inset(wl_client* client, void remote_surface_activate(wl_client* client, wl_resource* resource, uint32_t serial) { + ShellSurface* shell_surface = GetUserDataAs<ShellSurface>(resource); + aura::Window* window = shell_surface->GetWidget()->GetNativeWindow(); + + // Activation on Aura is synchronous, so activation callbacks will be called + // before the flag is reset. + window->SetProperty(kIgnoreWindowActivated, true); GetUserDataAs<ShellSurface>(resource)->Activate(); + window->ClearProperty(kIgnoreWindowActivated); } void remote_surface_maximize(wl_client* client, wl_resource* resource) { @@ -2106,6 +2117,13 @@ class WaylandRemoteShell : public WMHelper::MaximizeModeObserver, // Overridden from WMHelper::ActivationObserver: void OnWindowActivated(aura::Window* gained_active, aura::Window* lost_active) override { + // If the origin of activation is Wayland client, then assume it's been + // already activated on the client side, so do not notify about the + // activation. It means that zcr_remote_shell_v1_send_activated is used + // only to notify about activations originating in Aura. + if (gained_active && gained_active->GetProperty(kIgnoreWindowActivated)) + return; + SendActivated(gained_active, lost_active); } @@ -2934,7 +2952,7 @@ void seat_release(wl_client* client, wl_resource* resource) { const struct wl_seat_interface seat_implementation = { seat_get_pointer, seat_get_keyboard, seat_get_touch, seat_release}; -const uint32_t seat_version = 5; +const uint32_t seat_version = 6; void bind_seat(wl_client* client, void* data, uint32_t version, uint32_t id) { wl_resource* resource = wl_resource_create( diff --git a/chromium/components/offline_pages/core/downloads/download_notifying_observer.cc b/chromium/components/offline_pages/core/downloads/download_notifying_observer.cc index 37836088129..00cc67daf40 100644 --- a/chromium/components/offline_pages/core/downloads/download_notifying_observer.cc +++ b/chromium/components/offline_pages/core/downloads/download_notifying_observer.cc @@ -67,9 +67,8 @@ void DownloadNotifyingObserver::OnChanged(const SavePageRequest& request) { void DownloadNotifyingObserver::OnNetworkProgress( const SavePageRequest& request, int64_t received_bytes) { - DownloadUIItem item(request); - item.download_progress_bytes = received_bytes; - notifier_->NotifyDownloadProgress(item); + // TODO(dimich): Enable this back in M59. See bug 704049 for more info and + // what was temporarily (for M58) reverted. } void DownloadNotifyingObserver::OnCompleted( diff --git a/chromium/components/password_manager/content/browser/content_password_manager_driver.cc b/chromium/components/password_manager/content/browser/content_password_manager_driver.cc index 0c26839db26..26695612a11 100644 --- a/chromium/components/password_manager/content/browser/content_password_manager_driver.cc +++ b/chromium/components/password_manager/content/browser/content_password_manager_driver.cc @@ -155,6 +155,11 @@ void ContentPasswordManagerDriver::AllowToRunFormClassifier() { GetPasswordGenerationAgent()->AllowToRunFormClassifier(); } +autofill::AutofillDriver* ContentPasswordManagerDriver::GetAutofillDriver() { + return autofill::ContentAutofillDriver::GetForRenderFrameHost( + render_frame_host_); +} + PasswordGenerationManager* ContentPasswordManagerDriver::GetPasswordGenerationManager() { return &password_generation_manager_; diff --git a/chromium/components/password_manager/content/browser/content_password_manager_driver.h b/chromium/components/password_manager/content/browser/content_password_manager_driver.h index eb6d2881dcf..a1c2168995b 100644 --- a/chromium/components/password_manager/content/browser/content_password_manager_driver.h +++ b/chromium/components/password_manager/content/browser/content_password_manager_driver.h @@ -77,6 +77,7 @@ class ContentPasswordManagerDriver void GeneratePassword() override; void SendLoggingAvailability() override; void AllowToRunFormClassifier() override; + autofill::AutofillDriver* GetAutofillDriver() override; PasswordGenerationManager* GetPasswordGenerationManager() override; PasswordManager* GetPasswordManager() override; diff --git a/chromium/components/password_manager/core/browser/password_autofill_manager.cc b/chromium/components/password_manager/core/browser/password_autofill_manager.cc index 091b2062c2e..a242d655fc0 100644 --- a/chromium/components/password_manager/core/browser/password_autofill_manager.cc +++ b/chromium/components/password_manager/core/browser/password_autofill_manager.cc @@ -17,7 +17,7 @@ #include "base/strings/string16.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" -#include "components/autofill/core/browser/autofill_driver.h" +#include "components/autofill/core/browser/autofill_client.h" #include "components/autofill/core/browser/autofill_experiments.h" #include "components/autofill/core/browser/popup_item_ids.h" #include "components/autofill/core/browser/suggestion.h" @@ -138,8 +138,7 @@ PasswordAutofillManager::PasswordAutofillManager( autofill::AutofillClient* autofill_client) : password_manager_driver_(password_manager_driver), autofill_client_(autofill_client), - weak_ptr_factory_(this) { -} + weak_ptr_factory_(this) {} PasswordAutofillManager::~PasswordAutofillManager() { } @@ -353,6 +352,10 @@ bool PasswordAutofillManager::IsCreditCardPopup() { return false; } +autofill::AutofillDriver* PasswordAutofillManager::GetAutofillDriver() { + return password_manager_driver_->GetAutofillDriver(); +} + //////////////////////////////////////////////////////////////////////////////// // PasswordAutofillManager, private: diff --git a/chromium/components/password_manager/core/browser/password_autofill_manager.h b/chromium/components/password_manager/core/browser/password_autofill_manager.h index 56a5b5c62ba..737bc926e3a 100644 --- a/chromium/components/password_manager/core/browser/password_autofill_manager.h +++ b/chromium/components/password_manager/core/browser/password_autofill_manager.h @@ -43,6 +43,7 @@ class PasswordAutofillManager : public autofill::AutofillPopupDelegate { bool RemoveSuggestion(const base::string16& value, int identifier) override; void ClearPreviewedForm() override; bool IsCreditCardPopup() override; + autofill::AutofillDriver* GetAutofillDriver() override; // Invoked when a password mapping is added. void OnAddPasswordFormMapping( diff --git a/chromium/components/password_manager/core/browser/password_manager_driver.h b/chromium/components/password_manager/core/browser/password_manager_driver.h index 8ec6b5e8261..028bf7273ac 100644 --- a/chromium/components/password_manager/core/browser/password_manager_driver.h +++ b/chromium/components/password_manager/core/browser/password_manager_driver.h @@ -14,6 +14,7 @@ #include "components/autofill/core/common/password_form_field_prediction_map.h" namespace autofill { +class AutofillDriver; struct FormData; struct PasswordForm; struct PasswordFormGenerationData; @@ -97,6 +98,9 @@ class PasswordManagerDriver // Allows the form classifier to find generation fields. virtual void AllowToRunFormClassifier() {} + // Return the associated AutofillDriver. + virtual autofill::AutofillDriver* GetAutofillDriver() = 0; + private: DISALLOW_COPY_AND_ASSIGN(PasswordManagerDriver); }; diff --git a/chromium/components/password_manager/core/browser/stub_password_manager_driver.cc b/chromium/components/password_manager/core/browser/stub_password_manager_driver.cc index ba19e68c086..18b7dc56a7c 100644 --- a/chromium/components/password_manager/core/browser/stub_password_manager_driver.cc +++ b/chromium/components/password_manager/core/browser/stub_password_manager_driver.cc @@ -56,4 +56,8 @@ StubPasswordManagerDriver::GetPasswordAutofillManager() { return nullptr; } +autofill::AutofillDriver* StubPasswordManagerDriver::GetAutofillDriver() { + return nullptr; +} + } // namespace password_manager diff --git a/chromium/components/password_manager/core/browser/stub_password_manager_driver.h b/chromium/components/password_manager/core/browser/stub_password_manager_driver.h index 88d1ff38b28..f7a1703d1d9 100644 --- a/chromium/components/password_manager/core/browser/stub_password_manager_driver.h +++ b/chromium/components/password_manager/core/browser/stub_password_manager_driver.h @@ -36,6 +36,7 @@ class StubPasswordManagerDriver : public PasswordManagerDriver { PasswordGenerationManager* GetPasswordGenerationManager() override; PasswordManager* GetPasswordManager() override; PasswordAutofillManager* GetPasswordAutofillManager() override; + autofill::AutofillDriver* GetAutofillDriver() override; private: DISALLOW_COPY_AND_ASSIGN(StubPasswordManagerDriver); diff --git a/chromium/components/ssl_errors/error_classification.cc b/chromium/components/ssl_errors/error_classification.cc index 572b5729528..52827fe1565 100644 --- a/chromium/components/ssl_errors/error_classification.cc +++ b/chromium/components/ssl_errors/error_classification.cc @@ -38,32 +38,13 @@ using base::TimeDelta; namespace ssl_errors { namespace { -// Events for UMA. Do not reorder or change! -enum SSLInterstitialCause { - CLOCK_PAST, - CLOCK_FUTURE, - WWW_SUBDOMAIN_MATCH, - SUBDOMAIN_MATCH, - SUBDOMAIN_INVERSE_MATCH, - SUBDOMAIN_OUTSIDE_WILDCARD, - HOST_NAME_NOT_KNOWN_TLD, - LIKELY_MULTI_TENANT_HOSTING, - LOCALHOST, - PRIVATE_URL, - AUTHORITY_ERROR_CAPTIVE_PORTAL, // Deprecated in M47. - SELF_SIGNED, - EXPIRED_RECENTLY, - LIKELY_SAME_DOMAIN, - UNUSED_INTERSTITIAL_CAUSE_ENTRY, -}; - void RecordSSLInterstitialCause(bool overridable, SSLInterstitialCause event) { if (overridable) { UMA_HISTOGRAM_ENUMERATION("interstitial.ssl.cause.overridable", event, - UNUSED_INTERSTITIAL_CAUSE_ENTRY); + SSL_INTERSTITIAL_CAUSE_MAX); } else { UMA_HISTOGRAM_ENUMERATION("interstitial.ssl.cause.nonoverridable", event, - UNUSED_INTERSTITIAL_CAUSE_ENTRY); + SSL_INTERSTITIAL_CAUSE_MAX); } } @@ -109,7 +90,7 @@ bool IsWWWSubDomainMatch(const GURL& request_url, const net::X509Certificate& cert) { std::string www_host; std::vector<std::string> dns_names; - cert.GetDNSNames(&dns_names); + cert.GetSubjectAltName(&dns_names, nullptr); return GetWWWSubDomainMatch(request_url, dns_names, &www_host); } @@ -148,24 +129,28 @@ void RecordUMAStatistics(bool overridable, } case ssl_errors::ErrorInfo::CERT_COMMON_NAME_INVALID: { std::string host_name = request_url.host(); + std::vector<std::string> dns_names; + cert.GetSubjectAltName(&dns_names, nullptr); + std::vector<HostnameTokens> dns_name_tokens = + GetTokenizedDNSNames(dns_names); + + if (dns_names.empty()) + RecordSSLInterstitialCause(overridable, NO_SUBJECT_ALT_NAME); + if (HostNameHasKnownTLD(host_name)) { HostnameTokens host_name_tokens = Tokenize(host_name); if (IsWWWSubDomainMatch(request_url, cert)) - RecordSSLInterstitialCause(overridable, WWW_SUBDOMAIN_MATCH); + RecordSSLInterstitialCause(overridable, WWW_SUBDOMAIN_MATCH2); if (IsSubDomainOutsideWildcard(request_url, cert)) - RecordSSLInterstitialCause(overridable, SUBDOMAIN_OUTSIDE_WILDCARD); - std::vector<std::string> dns_names; - cert.GetDNSNames(&dns_names); - std::vector<HostnameTokens> dns_name_tokens = - GetTokenizedDNSNames(dns_names); + RecordSSLInterstitialCause(overridable, SUBDOMAIN_OUTSIDE_WILDCARD2); if (NameUnderAnyNames(host_name_tokens, dns_name_tokens)) - RecordSSLInterstitialCause(overridable, SUBDOMAIN_MATCH); + RecordSSLInterstitialCause(overridable, SUBDOMAIN_MATCH2); if (AnyNamesUnderName(dns_name_tokens, host_name_tokens)) - RecordSSLInterstitialCause(overridable, SUBDOMAIN_INVERSE_MATCH); + RecordSSLInterstitialCause(overridable, SUBDOMAIN_INVERSE_MATCH2); if (IsCertLikelyFromMultiTenantHosting(request_url, cert)) - RecordSSLInterstitialCause(overridable, LIKELY_MULTI_TENANT_HOSTING); + RecordSSLInterstitialCause(overridable, LIKELY_MULTI_TENANT_HOSTING2); if (IsCertLikelyFromSameDomain(request_url, cert)) - RecordSSLInterstitialCause(overridable, LIKELY_SAME_DOMAIN); + RecordSSLInterstitialCause(overridable, LIKELY_SAME_DOMAIN2); } else { RecordSSLInterstitialCause(overridable, HOST_NAME_NOT_KNOWN_TLD); } @@ -382,7 +367,7 @@ bool IsSubDomainOutsideWildcard(const GURL& request_url, std::string host_name = request_url.host(); HostnameTokens host_name_tokens = Tokenize(host_name); std::vector<std::string> dns_names; - cert.GetDNSNames(&dns_names); + cert.GetSubjectAltName(&dns_names, nullptr); bool result = false; // This method requires that the host name be longer than the dns name on @@ -410,7 +395,7 @@ bool IsCertLikelyFromMultiTenantHosting(const GURL& request_url, std::string host_name = request_url.host(); std::vector<std::string> dns_names; std::vector<std::string> dns_names_domain; - cert.GetDNSNames(&dns_names); + cert.GetSubjectAltName(&dns_names, nullptr); size_t dns_names_size = dns_names.size(); // If there is only 1 DNS name then it is definitely not a shared certificate. @@ -457,7 +442,9 @@ bool IsCertLikelyFromSameDomain(const GURL& request_url, const net::X509Certificate& cert) { std::string host_name = request_url.host(); std::vector<std::string> dns_names; - cert.GetDNSNames(&dns_names); + cert.GetSubjectAltName(&dns_names, nullptr); + if (dns_names.empty()) + return false; dns_names.push_back(host_name); std::vector<std::string> dns_names_domain; diff --git a/chromium/components/ssl_errors/error_classification.h b/chromium/components/ssl_errors/error_classification.h index b8c472df669..0dea46560cc 100644 --- a/chromium/components/ssl_errors/error_classification.h +++ b/chromium/components/ssl_errors/error_classification.h @@ -28,6 +28,33 @@ typedef std::vector<std::string> HostnameTokens; // Methods for identifying specific error causes. ------------------------------ +// These values are written to logs. New enum values can be added, but existing +// enums must never be renumbered or deleted and reused. +enum SSLInterstitialCause { + CLOCK_PAST = 0, + CLOCK_FUTURE = 1, + WWW_SUBDOMAIN_MATCH = 2, // Deprecated in M59. + SUBDOMAIN_MATCH = 3, // Deprecated in M59. + SUBDOMAIN_INVERSE_MATCH = 4, // Deprecated in M59. + SUBDOMAIN_OUTSIDE_WILDCARD = 5, // Deprecated in M59. + HOST_NAME_NOT_KNOWN_TLD = 6, + LIKELY_MULTI_TENANT_HOSTING = 7, // Deprecated in M59. + LOCALHOST = 8, + PRIVATE_URL = 9, + AUTHORITY_ERROR_CAPTIVE_PORTAL = 10, // Deprecated in M47. + SELF_SIGNED = 11, + EXPIRED_RECENTLY = 12, + LIKELY_SAME_DOMAIN = 13, // Deprecated in M59. + NO_SUBJECT_ALT_NAME = 14, + WWW_SUBDOMAIN_MATCH2 = 15, + SUBDOMAIN_MATCH2 = 16, + SUBDOMAIN_INVERSE_MATCH2 = 17, + SUBDOMAIN_OUTSIDE_WILDCARD2 = 18, + LIKELY_MULTI_TENANT_HOSTING2 = 19, + LIKELY_SAME_DOMAIN2 = 20, + SSL_INTERSTITIAL_CAUSE_MAX +}; + // What is known about the accuracy of system clock. Do not change or // reorder; these values are used in an UMA histogram. enum ClockState { @@ -110,14 +137,9 @@ bool IsCertLikelyFromMultiTenantHosting(const GURL& request_url, bool IsCertLikelyFromSameDomain(const GURL& request_url, const net::X509Certificate& cert); -// Returns true if the site's hostname differs from one of the DNS -// names in the certificate (CN or SANs) only by the presence or -// absence of the single-label prefix "www". E.g.: (The first domain -// is hostname and the second domain is a DNS name in the certificate) -// www.example.com ~ example.com -> true -// example.com ~ www.example.com -> true -// www.food.example.com ~ example.com -> false -// mail.example.com ~ example.com -> false +// Returns true if the site's hostname differs from one of the DNS names in +// |dns_names| only by the presence or absence of the single-label prefix "www". +// The matching name from the certificate is returned in |www_match_host_name|. bool GetWWWSubDomainMatch(const GURL& request_url, const std::vector<std::string>& dns_names, std::string* www_match_host_name); diff --git a/chromium/components/ssl_errors/error_classification_unittest.cc b/chromium/components/ssl_errors/error_classification_unittest.cc index 1099181a6f4..c4c2c45e9ef 100644 --- a/chromium/components/ssl_errors/error_classification_unittest.cc +++ b/chromium/components/ssl_errors/error_classification_unittest.cc @@ -26,11 +26,15 @@ #include "net/test/test_certificate_data.h" #include "net/test/test_data_directory.h" #include "net/url_request/url_request_test_util.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" +using testing::ElementsAre; + namespace { const char kNetworkTimeHistogram[] = "interstitial.ssl.clockstate.network3"; +const char kSslErrorCauseHistogram[] = "interstitial.ssl.cause.overridable"; static std::unique_ptr<net::test_server::HttpResponse> NetworkErrorResponseHandler(const net::test_server::HttpRequest& request) { @@ -53,112 +57,132 @@ class SSLErrorClassificationTest : public ::testing::Test { }; TEST_F(SSLErrorClassificationTest, TestNameMismatch) { - scoped_refptr<net::X509Certificate> google_cert( - net::X509Certificate::CreateFromBytes( - reinterpret_cast<const char*>(google_der), sizeof(google_der))); - ASSERT_TRUE(google_cert.get()); - std::vector<std::string> dns_names_google; - google_cert->GetDNSNames(&dns_names_google); - ASSERT_EQ(1u, dns_names_google.size()); // ["www.google.com"] - std::vector<std::string> hostname_tokens_google = - ssl_errors::Tokenize(dns_names_google[0]); - ASSERT_EQ(3u, hostname_tokens_google.size()); // ["www","google","com"] - std::vector<std::vector<std::string>> dns_name_tokens_google; - dns_name_tokens_google.push_back(hostname_tokens_google); - ASSERT_EQ(1u, dns_name_tokens_google.size()); // [["www","google","com"]] + scoped_refptr<net::X509Certificate> example_cert = net::ImportCertFromFile( + net::GetTestCertsDirectory(), "subjectAltName_www_example_com.pem"); + ASSERT_TRUE(example_cert); + std::vector<std::string> dns_names_example; + example_cert->GetSubjectAltName(&dns_names_example, nullptr); + ASSERT_THAT(dns_names_example, ElementsAre("www.example.com")); + std::vector<std::string> hostname_tokens_example = + ssl_errors::Tokenize(dns_names_example[0]); + ASSERT_THAT(hostname_tokens_example, ElementsAre("www", "example", "com")); + std::vector<std::vector<std::string>> dns_name_tokens_example; + dns_name_tokens_example.push_back(hostname_tokens_example); + ASSERT_EQ(1u, dns_name_tokens_example.size()); // [["www","example","com"]] + ASSERT_THAT(dns_name_tokens_example[0], ElementsAre("www", "example", "com")); { - GURL origin("https://google.com"); + GURL origin("https://example.com"); std::string www_host; std::vector<std::string> host_name_tokens = base::SplitString( origin.host(), ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); EXPECT_TRUE( - ssl_errors::GetWWWSubDomainMatch(origin, dns_names_google, &www_host)); - EXPECT_EQ("www.google.com", www_host); + ssl_errors::GetWWWSubDomainMatch(origin, dns_names_example, &www_host)); + EXPECT_EQ("www.example.com", www_host); EXPECT_FALSE(ssl_errors::NameUnderAnyNames(host_name_tokens, - dns_name_tokens_google)); - EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_google, + dns_name_tokens_example)); + EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_example, host_name_tokens)); - EXPECT_FALSE(ssl_errors::IsSubDomainOutsideWildcard(origin, *google_cert)); + EXPECT_FALSE(ssl_errors::IsSubDomainOutsideWildcard(origin, *example_cert)); EXPECT_FALSE( - ssl_errors::IsCertLikelyFromMultiTenantHosting(origin, *google_cert)); - EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *google_cert)); + ssl_errors::IsCertLikelyFromMultiTenantHosting(origin, *example_cert)); + EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *example_cert)); } { - GURL origin("https://foo.blah.google.com"); + GURL origin("https://foo.blah.example.com"); std::string www_host; std::vector<std::string> host_name_tokens = base::SplitString( origin.host(), ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); EXPECT_FALSE( - ssl_errors::GetWWWSubDomainMatch(origin, dns_names_google, &www_host)); + ssl_errors::GetWWWSubDomainMatch(origin, dns_names_example, &www_host)); EXPECT_FALSE(ssl_errors::NameUnderAnyNames(host_name_tokens, - dns_name_tokens_google)); - EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_google, + dns_name_tokens_example)); + EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_example, host_name_tokens)); - EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *google_cert)); + EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *example_cert)); } { - GURL origin("https://foo.www.google.com"); + GURL origin("https://foo.www.example.com"); std::string www_host; std::vector<std::string> host_name_tokens = base::SplitString( origin.host(), ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); EXPECT_FALSE( - ssl_errors::GetWWWSubDomainMatch(origin, dns_names_google, &www_host)); + ssl_errors::GetWWWSubDomainMatch(origin, dns_names_example, &www_host)); EXPECT_TRUE(ssl_errors::NameUnderAnyNames(host_name_tokens, - dns_name_tokens_google)); - EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_google, + dns_name_tokens_example)); + EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_example, host_name_tokens)); - EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *google_cert)); + EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *example_cert)); } { - GURL origin("https://www.google.com.foo"); + GURL origin("https://www.example.com.foo"); std::string www_host; std::vector<std::string> host_name_tokens = base::SplitString( origin.host(), ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); EXPECT_FALSE( - ssl_errors::GetWWWSubDomainMatch(origin, dns_names_google, &www_host)); + ssl_errors::GetWWWSubDomainMatch(origin, dns_names_example, &www_host)); EXPECT_FALSE(ssl_errors::NameUnderAnyNames(host_name_tokens, - dns_name_tokens_google)); - EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_google, + dns_name_tokens_example)); + EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_example, host_name_tokens)); - EXPECT_FALSE(ssl_errors::IsCertLikelyFromSameDomain(origin, *google_cert)); + EXPECT_FALSE(ssl_errors::IsCertLikelyFromSameDomain(origin, *example_cert)); } { - GURL origin("https://www.foogoogle.com."); + GURL origin("https://www.fooexample.com."); std::string www_host; std::vector<std::string> host_name_tokens = base::SplitString( origin.host(), ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); EXPECT_FALSE( - ssl_errors::GetWWWSubDomainMatch(origin, dns_names_google, &www_host)); + ssl_errors::GetWWWSubDomainMatch(origin, dns_names_example, &www_host)); EXPECT_FALSE(ssl_errors::NameUnderAnyNames(host_name_tokens, - dns_name_tokens_google)); - EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_google, + dns_name_tokens_example)); + EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_example, host_name_tokens)); - EXPECT_FALSE(ssl_errors::IsCertLikelyFromSameDomain(origin, *google_cert)); + EXPECT_FALSE(ssl_errors::IsCertLikelyFromSameDomain(origin, *example_cert)); + } + + // Ensure that a certificate with no SubjectAltName does not fall back to + // the Subject CN when evaluating hostnames. + { + scoped_refptr<net::X509Certificate> google_cert( + net::X509Certificate::CreateFromBytes( + reinterpret_cast<const char*>(google_der), sizeof(google_der))); + ASSERT_TRUE(google_cert); + + GURL origin("https://google.com"); + + base::HistogramTester histograms; + ssl_errors::RecordUMAStatistics(true, base::Time::NowFromSystemTime(), + origin, net::ERR_CERT_COMMON_NAME_INVALID, + *google_cert); + + // Verify that we recorded only NO_SUBJECT_ALT_NAME and no other causes. + histograms.ExpectUniqueSample(kSslErrorCauseHistogram, + ssl_errors::NO_SUBJECT_ALT_NAME, 1); } - scoped_refptr<net::X509Certificate> webkit_cert( - net::X509Certificate::CreateFromBytes( - reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der))); - ASSERT_TRUE(webkit_cert.get()); - std::vector<std::string> dns_names_webkit; - webkit_cert->GetDNSNames(&dns_names_webkit); - ASSERT_EQ(2u, dns_names_webkit.size()); // ["*.webkit.org", "webkit.org"] - std::vector<std::string> hostname_tokens_webkit_0 = - ssl_errors::Tokenize(dns_names_webkit[0]); - ASSERT_EQ(3u, hostname_tokens_webkit_0.size()); // ["*", "webkit","org"] - std::vector<std::string> hostname_tokens_webkit_1 = - ssl_errors::Tokenize(dns_names_webkit[1]); - ASSERT_EQ(2u, hostname_tokens_webkit_1.size()); // ["webkit","org"] - std::vector<std::vector<std::string>> dns_name_tokens_webkit; - dns_name_tokens_webkit.push_back(hostname_tokens_webkit_0); - dns_name_tokens_webkit.push_back(hostname_tokens_webkit_1); - ASSERT_EQ(2u, dns_name_tokens_webkit.size()); { + scoped_refptr<net::X509Certificate> webkit_cert( + net::X509Certificate::CreateFromBytes( + reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der))); + ASSERT_TRUE(webkit_cert); + std::vector<std::string> dns_names_webkit; + webkit_cert->GetSubjectAltName(&dns_names_webkit, nullptr); + ASSERT_THAT(dns_names_webkit, ElementsAre("*.webkit.org", "webkit.org")); + std::vector<std::string> hostname_tokens_webkit_0 = + ssl_errors::Tokenize(dns_names_webkit[0]); + ASSERT_THAT(hostname_tokens_webkit_0, ElementsAre("*", "webkit", "org")); + std::vector<std::string> hostname_tokens_webkit_1 = + ssl_errors::Tokenize(dns_names_webkit[1]); + ASSERT_THAT(hostname_tokens_webkit_1, ElementsAre("webkit", "org")); + std::vector<std::vector<std::string>> dns_name_tokens_webkit; + dns_name_tokens_webkit.push_back(hostname_tokens_webkit_0); + dns_name_tokens_webkit.push_back(hostname_tokens_webkit_1); + ASSERT_EQ(2u, dns_name_tokens_webkit.size()); GURL origin("https://a.b.webkit.org"); std::string www_host; std::vector<std::string> host_name_tokens = base::SplitString( diff --git a/chromium/components/ssl_errors/error_info.cc b/chromium/components/ssl_errors/error_info.cc index 7ef291ebe4b..ab7afccb05c 100644 --- a/chromium/components/ssl_errors/error_info.cc +++ b/chromium/components/ssl_errors/error_info.cc @@ -32,22 +32,30 @@ ErrorInfo ErrorInfo::CreateError(ErrorType error_type, base::string16 details, short_description; switch (error_type) { case CERT_COMMON_NAME_INVALID: { - // If the certificate contains multiple DNS names, we choose the most - // representative one -- either the DNS name that's also in the subject - // field, or the first one. If this heuristic turns out to be - // inadequate, we can consider choosing the DNS name that is the - // "closest match" to the host name in the request URL, or listing all - // the DNS names with an HTML <ul>. std::vector<std::string> dns_names; - cert->GetDNSNames(&dns_names); - DCHECK(!dns_names.empty()); + cert->GetSubjectAltName(&dns_names, nullptr); + size_t i = 0; - for (; i < dns_names.size(); ++i) { - if (dns_names[i] == cert->subject().common_name) - break; + if (dns_names.empty()) { + // The certificate had no DNS names, display an explanatory string. + // TODO(elawrence): Change the error messsage instead of just the + // placeholder string; see https://crbug.com/708268 + dns_names.push_back("[missing_subjectAltName]"); + } else { + // If the certificate contains multiple DNS names, we choose the most + // representative one -- either the DNS name that's also in the subject + // field, or the first one. If this heuristic turns out to be + // inadequate, we can consider choosing the DNS name that is the + // "closest match" to the host name in the request URL, or listing all + // the DNS names with an HTML <ul>. + for (; i < dns_names.size(); ++i) { + if (dns_names[i] == cert->subject().common_name) + break; + } + if (i == dns_names.size()) + i = 0; } - if (i == dns_names.size()) - i = 0; + details = l10n_util::GetStringFUTF16( IDS_CERT_ERROR_COMMON_NAME_INVALID_DETAILS, UTF8ToUTF16(request_url.host()), diff --git a/chromium/components/strings/components_strings_es.xtb b/chromium/components/strings/components_strings_es.xtb index 2096a445d92..262ea2fa385 100644 --- a/chromium/components/strings/components_strings_es.xtb +++ b/chromium/components/strings/components_strings_es.xtb @@ -89,7 +89,7 @@ <translation id="1787142507584202372">Las pestañas abiertas aparecen aquí</translation> <translation id="1791429645902722292">Google Smart Lock</translation> <translation id="1797835274315207060">Selecciona una dirección de envío para consultar los métodos de envío y los requisitos.</translation> -<translation id="1803678881841855883">La función de navegación segura de Google <ph name="BEGIN_LINK" />detectó software malicioso<ph name="END_LINK" /> recientemente en <ph name="SITE" />. En ocasiones, los sitios web que suelen ser seguros contienen software malicioso. Este contenido procede de <ph name="SUBRESOURCE_HOST" />, un conocido distribuidor de este tipo de software. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="1803678881841855883">La función de Navegación Segura de Google <ph name="BEGIN_LINK" />detectó software malicioso<ph name="END_LINK" /> recientemente en <ph name="SITE" />. En ocasiones, los sitios web que suelen ser seguros contienen software malicioso. Este contenido procede de <ph name="SUBRESOURCE_HOST" />, un conocido distribuidor de este tipo de software. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="1806541873155184440">Añadida el <ph name="ADDED_TO_AUTOFILL_MONTH" /></translation> <translation id="1821930232296380041">Parámetros de solicitud o solicitud no válidos</translation> <translation id="1826516787628120939">Comprobando</translation> @@ -157,7 +157,7 @@ <translation id="2386255080630008482">Se ha revocado el certificado de servidor.</translation> <translation id="2392959068659972793">Mostrar políticas sin valores establecidos</translation> <translation id="2396249848217231973">&Deshacer eliminación</translation> -<translation id="2460160116472764928">La función de navegación segura de Google <ph name="BEGIN_LINK" />detectó software malicioso<ph name="END_LINK" /> recientemente en <ph name="SITE" />. En ocasiones, los sitios web que suelen ser seguros contienen software malicioso. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="2460160116472764928">La función de Navegación Segura de Google <ph name="BEGIN_LINK" />detectó software malicioso<ph name="END_LINK" /> recientemente en <ph name="SITE" />. En ocasiones, los sitios web que suelen ser seguros contienen software malicioso. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="2463739503403862330">Rellenar</translation> <translation id="2467694685043708798"><ph name="BEGIN_LINK" />Ejecutar Diagnósticos de red<ph name="END_LINK" /></translation> <translation id="2479410451996844060">La URL de búsqueda no es válida.</translation> @@ -369,7 +369,7 @@ <translation id="4269787794583293679">(Ningún nombre de usuario)</translation> <translation id="4275830172053184480">Reiniciar tu dispositivo</translation> <translation id="4280429058323657511">Vcto. <ph name="EXPIRATION_DATE_ABBR" /></translation> -<translation id="4295944351946828969">La función de navegación segura de Google <ph name="BEGIN_LINK" />encontró programas dañinos<ph name="END_LINK" /> recientemente en <ph name="SITE" />. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="4295944351946828969">La función de Navegación Segura de Google <ph name="BEGIN_LINK" />encontró programas dañinos<ph name="END_LINK" /> recientemente en <ph name="SITE" />. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="4300246636397505754">Sugerencias de padres</translation> <translation id="4304224509867189079">Iniciar sesión</translation> <translation id="432290197980158659">El servidor ha mostrado un certificado que no coincide con lo que se esperaba. Algunos sitios web tienen un alto nivel de seguridad para garantizar tu protección y esperan ciertas características de los certificados. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> @@ -745,7 +745,7 @@ <translation id="800218591365569300">Prueba a cerrar otros programas o pestañas para liberar memoria.</translation> <translation id="8012647001091218357">No hemos podido contactar con tus padres. Vuelve a intentarlo.</translation> <translation id="8025119109950072390">Es posible que los atacantes que se encuentren en este sitio web intenten engañarte para que realices una acción peligrosa, como instalar software o revelar tu información personal (por ejemplo, contraseñas, números de teléfono o tarjetas de crédito).</translation> -<translation id="803030522067524905">La función de navegación segura de Google detectó phishing recientemente en <ph name="SITE" />. Los sitios web de phishing imitan el aspecto de otros sitios web para engañarte. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="803030522067524905">La función de Navegación Segura de Google detectó phishing recientemente en <ph name="SITE" />. Los sitios web de phishing imitan el aspecto de otros sitios web para engañarte. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="8034522405403831421">Esta página está escrita en <ph name="SOURCE_LANGUAGE" />. ¿Quieres traducirla al <ph name="TARGET_LANGUAGE" />?</translation> <translation id="8041089156583427627">Enviar</translation> <translation id="8088680233425245692">Se ha producido un error al ver el artículo.</translation> diff --git a/chromium/components/url_formatter/url_formatter.cc b/chromium/components/url_formatter/url_formatter.cc index a93bf1154c3..3d5740fd377 100644 --- a/chromium/components/url_formatter/url_formatter.cc +++ b/chromium/components/url_formatter/url_formatter.cc @@ -15,6 +15,7 @@ #include "base/strings/utf_offset_string_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_local_storage.h" +#include "third_party/icu/source/common/unicode/schriter.h" #include "third_party/icu/source/common/unicode/uidna.h" #include "third_party/icu/source/common/unicode/uniset.h" #include "third_party/icu/source/common/unicode/uscript.h" @@ -33,6 +34,7 @@ base::string16 IDNToUnicodeWithAdjustments( base::OffsetAdjuster::Adjustments* adjustments); bool IDNToUnicodeOneComponent(const base::char16* comp, size_t comp_len, + bool is_tld_ascii, base::string16* out); class AppendComponentTransform { @@ -200,6 +202,13 @@ base::string16 IDNToUnicodeWithAdjustments( input16.reserve(host.length()); input16.insert(input16.end(), host.begin(), host.end()); + bool is_tld_ascii = true; + size_t last_dot = host.rfind('.'); + if (last_dot != base::StringPiece::npos && + host.substr(last_dot).starts_with(".xn--")) { + is_tld_ascii = false; + } + // Do each component of the host separately, since we enforce script matching // on a per-component basis. base::string16 out16; @@ -217,7 +226,7 @@ base::string16 IDNToUnicodeWithAdjustments( // Add the substring that we just found. converted_idn = IDNToUnicodeOneComponent(input16.data() + component_start, - component_length, &out16); + component_length, is_tld_ascii, &out16); } size_t new_component_length = out16.length() - new_component_start; @@ -241,17 +250,22 @@ class IDNSpoofChecker { public: IDNSpoofChecker(); - // Returns true if |label| is safe to display as Unicode. In the event of - // library failure, all IDN inputs will be treated as unsafe. - bool Check(base::StringPiece16 label); + // Returns true if |label| is safe to display as Unicode. When the TLD is + // ASCII, check if a label is entirely made of Cyrillic letters that look like + // Latin letters. In the event of library failure, all IDN inputs will be + // treated as unsafe. + bool Check(base::StringPiece16 label, bool is_tld_ascii); private: void SetAllowedUnicodeSet(UErrorCode* status); + bool IsMadeOfLatinAlikeCyrillic(const icu::UnicodeString& label_string); USpoofChecker* checker_; icu::UnicodeSet deviation_characters_; icu::UnicodeSet non_ascii_latin_letters_; icu::UnicodeSet kana_letters_exceptions_; + icu::UnicodeSet cyrillic_letters_; + icu::UnicodeSet cyrillic_letters_latin_alike_; DISALLOW_COPY_AND_ASSIGN(IDNSpoofChecker); }; @@ -314,10 +328,20 @@ IDNSpoofChecker::IDNSpoofChecker() { "[\\u3078-\\u307a\\u30d8-\\u30da\\u30fb\\u30fc]"), status); kana_letters_exceptions_.freeze(); + // These Cyrillic letters look like Latin. A domain label entirely made of + // these letters is blocked as a simpliified whole-script-spoofable. + cyrillic_letters_latin_alike_ = + icu::UnicodeSet(icu::UnicodeString("[асԁеһіјӏорԛѕԝхуъЬҽпгѵѡ]"), status); + cyrillic_letters_latin_alike_.freeze(); + + cyrillic_letters_ = + icu::UnicodeSet(UNICODE_STRING_SIMPLE("[[:Cyrl:]]"), status); + cyrillic_letters_.freeze(); + DCHECK(U_SUCCESS(status)); } -bool IDNSpoofChecker::Check(base::StringPiece16 label) { +bool IDNSpoofChecker::Check(base::StringPiece16 label, bool is_tld_ascii) { UErrorCode status = U_ZERO_ERROR; int32_t result = uspoof_check(checker_, label.data(), base::checked_cast<int32_t>(label.size()), @@ -345,17 +369,19 @@ bool IDNSpoofChecker::Check(base::StringPiece16 label) { return false; // If there's no script mixing, the input is regarded as safe without any - // extra check unless it contains Kana letter exceptions. Note that - // the following combinations of scripts are treated as a 'logical' single - // script. + // extra check unless it contains Kana letter exceptions or it's made entirely + // of Cyrillic letters that look like Latin letters. Note that the following + // combinations of scripts are treated as a 'logical' single script. // - Chinese: Han, Bopomofo, Common // - Japanese: Han, Hiragana, Katakana, Common // - Korean: Hangul, Han, Common result &= USPOOF_RESTRICTION_LEVEL_MASK; - if (result == USPOOF_ASCII || - (result == USPOOF_SINGLE_SCRIPT_RESTRICTIVE && - kana_letters_exceptions_.containsNone(label_string))) - return true; + if (result == USPOOF_ASCII) return true; + if (result == USPOOF_SINGLE_SCRIPT_RESTRICTIVE && + kana_letters_exceptions_.containsNone(label_string)) { + // Check Cyrillic confusable only for ASCII TLDs. + return !is_tld_ascii || !IsMadeOfLatinAlikeCyrillic(label_string); + } // Additional checks for |label| with multiple scripts, one of which is Latin. // Disallow non-ASCII Latin letters to mix with a non-Latin script. @@ -407,6 +433,25 @@ bool IDNSpoofChecker::Check(base::StringPiece16 label) { return !dangerous_pattern->find(); } +bool IDNSpoofChecker::IsMadeOfLatinAlikeCyrillic( + const icu::UnicodeString& label_string) { + // Collect all the Cyrillic letters in |label_string| and see if they're + // a subset of |cyrillic_letters_latin_alike_|. + // A shortcut of defining cyrillic_letters_latin_alike_ to include [0-9] and + // [_-] and checking if the set contains all letters of |label_string| + // would work in most cases, but not if a label has non-letters outside + // ASCII. + icu::UnicodeSet cyrillic_in_label; + icu::StringCharacterIterator it(label_string); + for (it.setToStart(); it.hasNext();) { + const UChar32 c = it.next32PostInc(); + if (cyrillic_letters_.contains(c)) + cyrillic_in_label.add(c); + } + return !cyrillic_in_label.isEmpty() && + cyrillic_letters_latin_alike_.containsAll(cyrillic_in_label); +} + void IDNSpoofChecker::SetAllowedUnicodeSet(UErrorCode* status) { if (U_FAILURE(*status)) return; @@ -481,8 +526,8 @@ void IDNSpoofChecker::SetAllowedUnicodeSet(UErrorCode* status) { // user. Note that this function does not deal with pure ASCII domain labels at // all even though it's possible to make up look-alike labels with ASCII // characters alone. -bool IsIDNComponentSafe(base::StringPiece16 label) { - return g_idn_spoof_checker.Get().Check(label); +bool IsIDNComponentSafe(base::StringPiece16 label, bool is_tld_ascii) { + return g_idn_spoof_checker.Get().Check(label, is_tld_ascii); } // A wrapper to use LazyInstance<>::Leaky with ICU's UIDNA, a C pointer to @@ -527,6 +572,7 @@ base::LazyInstance<UIDNAWrapper>::Leaky g_uidna = LAZY_INSTANCE_INITIALIZER; // Returns whether any conversion was performed. bool IDNToUnicodeOneComponent(const base::char16* comp, size_t comp_len, + bool is_tld_ascii, base::string16* out) { DCHECK(out); if (comp_len == 0) @@ -558,8 +604,9 @@ bool IDNToUnicodeOneComponent(const base::char16* comp, // can be safely displayed to the user. out->resize(original_length + output_length); if (IsIDNComponentSafe( - base::StringPiece16(out->data() + original_length, - base::checked_cast<size_t>(output_length)))) + base::StringPiece16(out->data() + original_length, + base::checked_cast<size_t>(output_length)), + is_tld_ascii)) return true; } diff --git a/chromium/components/url_formatter/url_formatter_unittest.cc b/chromium/components/url_formatter/url_formatter_unittest.cc index c0fe9509a6d..5b2646ce09c 100644 --- a/chromium/components/url_formatter/url_formatter_unittest.cc +++ b/chromium/components/url_formatter/url_formatter_unittest.cc @@ -32,6 +32,7 @@ struct IDNTestCase { const bool unicode_allowed; }; +// TODO(jshin): Replace L"..." with "..." in UTF-8 when it's easier to read. const IDNTestCase idn_cases[] = { // No IDN {"www.google.com", L"www.google.com", true}, @@ -209,6 +210,35 @@ const IDNTestCase idn_cases[] = { // U+30FB + Latin {"xn--abc-os4b.jp", L"\x30fb" L"abc.jp", false}, + // Cyrillic labels made of Latin-look-alike Cyrillic letters. + // ѕсоре.com with ѕсоре in Cyrillic + {"xn--e1argc3h.com", L"\x0455\x0441\x043e\x0440\x0435.com", false}, + // ѕсоре123.com with ѕсоре in Cyrillic. + {"xn--123-qdd8bmf3n.com", + L"\x0455\x0441\x043e\x0440\x0435" L"123.com", false}, + // ѕсоре-рау.com with ѕсоре and рау in Cyrillic. + {"xn----8sbn9akccw8m.com", + L"\x0455\x0441\x043e\x0440\x0435-\x0440\x0430\x0443.com", false}, + // ѕсоре·рау.com with scope and pay in Cyrillic and U+00B7 between them. + {"xn--uba29ona9akccw8m.com", + L"\x0455\x0441\x043e\x0440\x0435\u00b7\x0440\x0430\x0443.com", false}, + + // The same as above three, but in IDN TLD. + {"xn--e1argc3h.xn--p1ai", + L"\x0455\x0441\x043e\x0440\x0435.\x0440\x0444", true}, + {"xn--123-qdd8bmf3n.xn--p1ai", + L"\x0455\x0441\x043e\x0440\x0435" L"123.\x0440\x0444", true}, + {"xn--uba29ona9akccw8m.xn--p1ai", + L"\x0455\x0441\x043e\x0440\x0435\u00b7\x0440\x0430\x0443.\x0440\x0444", + true}, + + // ѕсоре-рау.한국 with ѕсоре and рау in Cyrillic. + {"xn----8sbn9akccw8m.xn--3e0b707e", + L"\x0455\x0441\x043e\x0440\x0435-\x0440\x0430\x0443.\xd55c\xad6d", true}, + + // музей (museum in Russian) has characters without a Latin-look-alike. + {"xn--e1adhj9a.com", L"\x043c\x0443\x0437\x0435\x0439.com", true}, + // Mixed digits: the first two will also fail mixed script test // Latin + ASCII digit + Deva digit {"xn--asc1deva-j0q.co.in", L"asc1deva\x0967.co.in", false}, diff --git a/chromium/components/user_manager/user_manager_base.cc b/chromium/components/user_manager/user_manager_base.cc index 054949fff92..5805a9ca35b 100644 --- a/chromium/components/user_manager/user_manager_base.cc +++ b/chromium/components/user_manager/user_manager_base.cc @@ -242,6 +242,7 @@ void UserManagerBase::SwitchActiveUser(const AccountId& account_id) { NotifyActiveUserHashChanged(active_user_->username_hash()); NotifyActiveUserChanged(active_user_); + CallUpdateLoginState(); } void UserManagerBase::SwitchToLastActiveUser() { @@ -508,17 +509,8 @@ void UserManagerBase::ParseUserList(const base::ListValue& users_list, bool UserManagerBase::IsCurrentUserOwner() const { DCHECK(task_runner_->RunsTasksOnCurrentThread()); - base::AutoLock lk(is_current_user_owner_lock_); - return is_current_user_owner_; -} - -void UserManagerBase::SetCurrentUserIsOwner(bool is_current_user_owner) { - DCHECK(task_runner_->RunsTasksOnCurrentThread()); - { - base::AutoLock lk(is_current_user_owner_lock_); - is_current_user_owner_ = is_current_user_owner; - } - CallUpdateLoginState(); + return !owner_account_id_.empty() && active_user_ && + active_user_->GetAccountId() == owner_account_id_; } bool UserManagerBase::IsCurrentUserNew() const { @@ -739,6 +731,7 @@ bool UserManagerBase::HasPendingBootstrap(const AccountId& account_id) const { void UserManagerBase::SetOwnerId(const AccountId& owner_account_id) { owner_account_id_ = owner_account_id; + CallUpdateLoginState(); } const AccountId& UserManagerBase::GetPendingUserSwitchID() const { @@ -1028,7 +1021,7 @@ void UserManagerBase::Initialize() { } void UserManagerBase::CallUpdateLoginState() { - UpdateLoginState(active_user_, primary_user_, is_current_user_owner_); + UpdateLoginState(active_user_, primary_user_, IsCurrentUserOwner()); } void UserManagerBase::SetLRUUser(User* user) { diff --git a/chromium/components/user_manager/user_manager_base.h b/chromium/components/user_manager/user_manager_base.h index b30015f0ecc..9e9fec63919 100644 --- a/chromium/components/user_manager/user_manager_base.h +++ b/chromium/components/user_manager/user_manager_base.h @@ -250,8 +250,6 @@ class USER_MANAGER_EXPORT UserManagerBase : public UserManager { // Getters/setters for private members. - virtual void SetCurrentUserIsOwner(bool is_current_user_owner); - virtual bool GetEphemeralUsersEnabled() const; virtual void SetEphemeralUsersEnabled(bool enabled); @@ -340,11 +338,6 @@ class USER_MANAGER_EXPORT UserManagerBase : public UserManager { // Indicates stage of loading user from prefs. UserLoadStage user_loading_stage_ = STAGE_NOT_LOADED; - // Cached flag of whether currently logged-in user is owner or not. - // May be accessed on different threads, requires locking. - bool is_current_user_owner_ = false; - mutable base::Lock is_current_user_owner_lock_; - // Cached flag of whether the currently logged-in user existed before this // login. bool is_current_user_new_ = false; diff --git a/chromium/content/app/strings/translations/content_strings_es.xtb b/chromium/content/app/strings/translations/content_strings_es.xtb index cff295b99e0..a5abfcf8ac7 100644 --- a/chromium/content/app/strings/translations/content_strings_es.xtb +++ b/chromium/content/app/strings/translations/content_strings_es.xtb @@ -6,7 +6,7 @@ <translation id="10623998915015855">botón de activación</translation> <translation id="1088086359088493902">Segundos</translation> <translation id="1171774979989969504">Introduce una dirección de correo electrónico</translation> -<translation id="1178581264944972037">Detener</translation> +<translation id="1178581264944972037">Pausar</translation> <translation id="1188858454923323853">complementario</translation> <translation id="1206619573307042055">marquee</translation> <translation id="1206693055195146388">control deslizante</translation> diff --git a/chromium/content/browser/android/date_time_chooser_android.cc b/chromium/content/browser/android/date_time_chooser_android.cc index ba20ad53bd5..2ea331c5502 100644 --- a/chromium/content/browser/android/date_time_chooser_android.cc +++ b/chromium/content/browser/android/date_time_chooser_android.cc @@ -92,9 +92,13 @@ void DateTimeChooserAndroid::ShowDialog( } } - j_date_time_chooser_.Reset(Java_DateTimeChooserAndroid_createDateTimeChooser( - env, native_window->GetJavaObject(), reinterpret_cast<intptr_t>(this), - dialog_type, dialog_value, min, max, step, suggestions_array)); + if (native_window && !(native_window->GetJavaObject()).is_null()) { + j_date_time_chooser_.Reset( + Java_DateTimeChooserAndroid_createDateTimeChooser( + env, native_window->GetJavaObject(), + reinterpret_cast<intptr_t>(this), dialog_type, dialog_value, min, + max, step, suggestions_array)); + } if (j_date_time_chooser_.is_null()) ReplaceDateTime(env, j_date_time_chooser_, dialog_value); } diff --git a/chromium/content/browser/compositor/gpu_surfaceless_browser_compositor_output_surface.cc b/chromium/content/browser/compositor/gpu_surfaceless_browser_compositor_output_surface.cc index e0464b67354..3a0e0915ad7 100644 --- a/chromium/content/browser/compositor/gpu_surfaceless_browser_compositor_output_surface.cc +++ b/chromium/content/browser/compositor/gpu_surfaceless_browser_compositor_output_surface.cc @@ -63,7 +63,7 @@ bool GpuSurfacelessBrowserCompositorOutputSurface::IsDisplayedAsOverlayPlane() unsigned GpuSurfacelessBrowserCompositorOutputSurface::GetOverlayTextureId() const { - return buffer_queue_->current_texture_id(); + return buffer_queue_->GetCurrentTextureId(); } void GpuSurfacelessBrowserCompositorOutputSurface::SwapBuffers( @@ -73,8 +73,15 @@ void GpuSurfacelessBrowserCompositorOutputSurface::SwapBuffers( // TODO(ccameron): What if a swap comes again before OnGpuSwapBuffersCompleted // happens, we'd see the wrong swap size there? swap_size_ = reshape_size_; - buffer_queue_->SwapBuffers(frame.sub_buffer_rect ? *frame.sub_buffer_rect - : gfx::Rect(swap_size_)); + + gfx::Rect damage_rect = + frame.sub_buffer_rect ? *frame.sub_buffer_rect : gfx::Rect(swap_size_); + // Use previous buffer when damage rect is empty. This avoids unnecessary + // partial swap work and makes it possible to support empty swaps on devices + // where partial swaps are disabled. + if (!damage_rect.IsEmpty()) + buffer_queue_->SwapBuffers(damage_rect); + GpuBrowserCompositorOutputSurface::SwapBuffers(std::move(frame)); } diff --git a/chromium/content/browser/find_request_manager.cc b/chromium/content/browser/find_request_manager.cc index 5c2eeb2df37..7713bc3a5b9 100644 --- a/chromium/content/browser/find_request_manager.cc +++ b/chromium/content/browser/find_request_manager.cc @@ -158,9 +158,13 @@ void FindRequestManager::OnFindReply(RenderFrameHost* rfh, number_of_matches_ += matches_delta; matches_per_frame_it->second = number_of_matches; + // All matches may have been removed since the last find reply. + if (rfh == active_frame_ && !number_of_matches) + relative_active_match_ordinal_ = 0; + // The active match ordinal may need updating since the number of matches // before the active match may have changed. - if (rfh != active_frame_) + if (rfh != active_frame_ || !number_of_matches) UpdateActiveMatchOrdinal(); } } diff --git a/chromium/content/browser/frame_host/navigation_handle_impl.cc b/chromium/content/browser/frame_host/navigation_handle_impl.cc index 380b80a125a..4ebe13f190b 100644 --- a/chromium/content/browser/frame_host/navigation_handle_impl.cc +++ b/chromium/content/browser/frame_host/navigation_handle_impl.cc @@ -947,6 +947,12 @@ bool NavigationHandleImpl::IsSelfReferentialURL() { if (!is_renderer_initiated_) return false; + // Some sites rely on constructing frame hierarchies where frames are loaded + // via POSTs with the same URLs, so exempt POST requests. See + // https://crbug.com/710008. + if (method_ == "POST") + return false; + // We allow one level of self-reference because some sites depend on that, // but we don't allow more than one. bool found_self_reference = false; diff --git a/chromium/content/browser/frame_host/render_frame_host_manager.cc b/chromium/content/browser/frame_host/render_frame_host_manager.cc index 120595fdc6b..1bbf60fac4e 100644 --- a/chromium/content/browser/frame_host/render_frame_host_manager.cc +++ b/chromium/content/browser/frame_host/render_frame_host_manager.cc @@ -2327,6 +2327,13 @@ RenderFrameHostImpl* RenderFrameHostManager::UpdateStateForNavigate( dest_url, source_instance, dest_instance, nullptr, transition, dest_is_restore, dest_is_view_source_mode, was_server_redirect); + // Note: Do not add code here to determine whether the subframe should swap + // or not. Add it to CanSubframeSwapProcess instead. + bool allowed_to_swap_process = + frame_tree_node_->IsMainFrame() || + CanSubframeSwapProcess(dest_url, source_instance, dest_instance, + was_server_redirect); + // Inform the transferring NavigationHandle of a transfer to a different // SiteInstance. It is important do so now, in order to mark the request as // transferring on the IO thread before attempting to destroy the pending RFH. @@ -2334,11 +2341,22 @@ RenderFrameHostImpl* RenderFrameHostManager::UpdateStateForNavigate( // RFH but will persist until it is picked up by the new RFH. if (transfer_navigation_handle_.get() && transfer_navigation_handle_->GetGlobalRequestID() == - transferred_request_id && - new_instance.get() != - transfer_navigation_handle_->GetRenderFrameHost() - ->GetSiteInstance()) { - transfer_navigation_handle_->Transfer(); + transferred_request_id) { + // The transfer is needed when switching to a new SiteInstance. One + // exception is if the process swap is not allowed and the transfer started + // in the current RFH, the navigation will stay in the current RFH (even + // when there is a new SiteInstance), so avoid calling Transfer() on it. + // This matters for some renderer-initiated data URLs navigations, see + // https://crbug.com/697513. + RenderFrameHostImpl* transferring_rfh = + transfer_navigation_handle_->GetRenderFrameHost(); + bool transfer_started_from_current_rfh = + transferring_rfh == render_frame_host_.get(); + bool should_transfer = + new_instance.get() != transferring_rfh->GetSiteInstance() && + (!transfer_started_from_current_rfh || allowed_to_swap_process); + if (should_transfer) + transfer_navigation_handle_->Transfer(); } // If we are currently navigating cross-process to a pending RFH for a @@ -2355,13 +2373,6 @@ RenderFrameHostImpl* RenderFrameHostManager::UpdateStateForNavigate( } } - // Note: Do not add code here to determine whether the subframe should swap - // or not. Add it to CanSubframeSwapProcess instead. - bool allowed_to_swap_process = - frame_tree_node_->IsMainFrame() || - CanSubframeSwapProcess(dest_url, source_instance, dest_instance, - was_server_redirect); - if (new_instance.get() != current_instance && allowed_to_swap_process) { TRACE_EVENT_INSTANT2( "navigation", diff --git a/chromium/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/chromium/content/browser/frame_host/render_frame_host_manager_browsertest.cc index 02027b0ee6d..74bb5be539a 100644 --- a/chromium/content/browser/frame_host/render_frame_host_manager_browsertest.cc +++ b/chromium/content/browser/frame_host/render_frame_host_manager_browsertest.cc @@ -3272,4 +3272,53 @@ IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, EXPECT_EQ(child->current_url(), first_url); } +// Ensures that POST requests bypass self-referential URL checks. See +// https://crbug.com/710008. +IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, + SelfReferencingFramesWithPOST) { + StartEmbeddedServer(); + GURL url(embedded_test_server()->GetURL("a.com", "/page_with_iframe.html")); + EXPECT_TRUE(NavigateToURL(shell(), url)); + + WebContentsImpl* web_contents = + static_cast<WebContentsImpl*>(shell()->web_contents()); + + FrameTreeNode* root = web_contents->GetFrameTree()->root(); + FrameTreeNode* child = root->child_at(0); + + GURL child_url(embedded_test_server()->GetURL("a.com", "/title1.html")); + EXPECT_EQ(url, root->current_url()); + EXPECT_EQ(child_url, child->current_url()); + + // Navigate the child frame to the same URL as parent via POST. + std::string script = + "var f = document.createElement('form');\n" + "f.method = 'POST';\n" + "f.action = '/page_with_iframe.html';\n" + "document.body.appendChild(f);\n" + "f.submit();"; + { + TestFrameNavigationObserver observer(child); + EXPECT_TRUE(ExecuteScript(child, script)); + observer.Wait(); + } + + FrameTreeNode* grandchild = child->child_at(0); + EXPECT_EQ(url, child->current_url()); + EXPECT_EQ(child_url, grandchild->current_url()); + + // Now navigate the grandchild to the same URL as its two ancestors. This + // should be allowed since it uses POST; it was blocked prior to + // fixing https://crbug.com/710008. + { + TestFrameNavigationObserver observer(grandchild); + EXPECT_TRUE(ExecuteScript(grandchild, script)); + observer.Wait(); + } + + EXPECT_EQ(url, grandchild->current_url()); + ASSERT_EQ(1U, grandchild->child_count()); + EXPECT_EQ(child_url, grandchild->child_at(0)->current_url()); +} + } // namespace content diff --git a/chromium/content/browser/gpu/gpu_process_host.cc b/chromium/content/browser/gpu/gpu_process_host.cc index 4f9f69fb0f9..6b1df02f7fe 100644 --- a/chromium/content/browser/gpu/gpu_process_host.cc +++ b/chromium/content/browser/gpu/gpu_process_host.cc @@ -445,6 +445,14 @@ void GpuProcessHost::CallOnIO( base::Bind(&RunCallbackOnIO, kind, force_create, callback)); } +GpuProcessHost::EstablishChannelRequest::EstablishChannelRequest() + : client_id(0) {} + +GpuProcessHost::EstablishChannelRequest::EstablishChannelRequest( + const EstablishChannelRequest& other) = default; + +GpuProcessHost::EstablishChannelRequest::~EstablishChannelRequest() {} + service_manager::InterfaceProvider* GpuProcessHost::GetRemoteInterfaces() { return process_->child_connection()->GetRemoteInterfaces(); } @@ -470,8 +478,7 @@ GpuProcessHost::GpuProcessHost(int host_id, GpuProcessKind kind) kind_(kind), process_launched_(false), initialized_(false), - gpu_host_binding_(this), - weak_ptr_factory_(this) { + gpu_host_binding_(this) { if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kSingleProcess) || base::CommandLine::ForCurrentProcess()->HasSwitch( @@ -680,6 +687,7 @@ bool GpuProcessHost::OnMessageReceived(const IPC::Message& message) { DCHECK(CalledOnValidThread()); IPC_BEGIN_MESSAGE_MAP(GpuProcessHost, message) IPC_MESSAGE_HANDLER(GpuHostMsg_Initialized, OnInitialized) + IPC_MESSAGE_HANDLER(GpuHostMsg_ChannelEstablished, OnChannelEstablished) IPC_MESSAGE_HANDLER(GpuHostMsg_GpuMemoryBufferCreated, OnGpuMemoryBufferCreated) #if defined(OS_ANDROID) @@ -719,15 +727,21 @@ void GpuProcessHost::EstablishGpuChannel( return; } - DCHECK_EQ(preempts, allow_view_command_buffers); - DCHECK_EQ(preempts, allow_real_time_streams); - bool is_gpu_host = preempts; - - channel_requests_.push(callback); - gpu_service_ptr_->EstablishGpuChannel( - client_id, client_tracing_id, is_gpu_host, - base::Bind(&GpuProcessHost::OnChannelEstablished, - weak_ptr_factory_.GetWeakPtr(), client_id, callback)); + EstablishChannelParams params; + params.client_id = client_id; + params.client_tracing_id = client_tracing_id; + params.preempts = preempts; + params.allow_view_command_buffers = allow_view_command_buffers; + params.allow_real_time_streams = allow_real_time_streams; + if (Send(new GpuMsg_EstablishChannel(params))) { + EstablishChannelRequest request; + request.client_id = client_id; + request.callback = callback; + channel_requests_.push(request); + } else { + DVLOG(1) << "Failed to send GpuMsg_EstablishChannel."; + callback.Run(IPC::ChannelHandle(), gpu::GPUInfo()); + } if (!base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kDisableGpuShaderDiskCache)) { @@ -802,27 +816,32 @@ void GpuProcessHost::OnInitialized( } void GpuProcessHost::OnChannelEstablished( - int client_id, - const EstablishChannelCallback& callback, - mojo::ScopedMessagePipeHandle channel_handle) { + const IPC::ChannelHandle& channel_handle) { TRACE_EVENT0("gpu", "GpuProcessHost::OnChannelEstablished"); - DCHECK(!channel_requests_.empty()); - DCHECK(channel_requests_.front().Equals(callback)); + + if (channel_requests_.empty()) { + // This happens when GPU process is compromised. + RouteOnUIThread(GpuHostMsg_OnLogMessage( + logging::LOG_WARNING, "WARNING", + "Received a ChannelEstablished message but no requests in queue.")); + return; + } + EstablishChannelRequest request = channel_requests_.front(); channel_requests_.pop(); // Currently if any of the GPU features are blacklisted, we don't establish a // GPU channel. - if (channel_handle.is_valid() && - !GpuDataManagerImpl::GetInstance()->GpuAccessAllowed(nullptr)) { - Send(new GpuMsg_CloseChannel(client_id)); - callback.Run(IPC::ChannelHandle(), gpu::GPUInfo()); + if (channel_handle.mojo_handle.is_valid() && + !GpuDataManagerImpl::GetInstance()->GpuAccessAllowed(NULL)) { + Send(new GpuMsg_CloseChannel(request.client_id)); + request.callback.Run(IPC::ChannelHandle(), gpu::GPUInfo()); RouteOnUIThread( GpuHostMsg_OnLogMessage(logging::LOG_WARNING, "WARNING", "Hardware acceleration is unavailable.")); return; } - callback.Run(IPC::ChannelHandle(channel_handle.release()), gpu_info_); + request.callback.Run(channel_handle, gpu_info_); } void GpuProcessHost::OnGpuMemoryBufferCreated( @@ -1082,12 +1101,11 @@ bool GpuProcessHost::LaunchGpuProcess(gpu::GpuPreferences* gpu_preferences) { void GpuProcessHost::SendOutstandingReplies() { valid_ = false; - // First send empty channel handles for all EstablishChannel requests. while (!channel_requests_.empty()) { - auto callback = channel_requests_.front(); + EstablishChannelRequest request = channel_requests_.front(); channel_requests_.pop(); - callback.Run(IPC::ChannelHandle(), gpu::GPUInfo()); + request.callback.Run(IPC::ChannelHandle(), gpu::GPUInfo()); } while (!create_gpu_memory_buffer_requests_.empty()) { diff --git a/chromium/content/browser/gpu/gpu_process_host.h b/chromium/content/browser/gpu/gpu_process_host.h index 101b8d4ed85..9cb6f5831f0 100644 --- a/chromium/content/browser/gpu/gpu_process_host.h +++ b/chromium/content/browser/gpu/gpu_process_host.h @@ -72,6 +72,14 @@ class GpuProcessHost : public BrowserChildProcessHostDelegate, typedef base::Callback<void(const IPC::ChannelHandle&, const gpu::GPUInfo&)> EstablishChannelCallback; + struct EstablishChannelRequest { + EstablishChannelRequest(); + EstablishChannelRequest(const EstablishChannelRequest& other); + ~EstablishChannelRequest(); + int32_t client_id; + EstablishChannelCallback callback; + }; + typedef base::Callback<void(const gfx::GpuMemoryBufferHandle& handle)> CreateGpuMemoryBufferCallback; @@ -197,14 +205,11 @@ class GpuProcessHost : public BrowserChildProcessHostDelegate, const std::string& key, const std::string& shader) override; - void OnChannelEstablished(int client_id, - const EstablishChannelCallback& callback, - mojo::ScopedMessagePipeHandle channel_handle); - // Message handlers. void OnInitialized(bool result, const gpu::GPUInfo& gpu_info, const gpu::GpuFeatureInfo& gpu_feature_info); + void OnChannelEstablished(const IPC::ChannelHandle& channel_handle); void OnGpuMemoryBufferCreated(const gfx::GpuMemoryBufferHandle& handle); #if defined(OS_ANDROID) void OnDestroyingVideoSurfaceAck(int surface_id); @@ -229,7 +234,7 @@ class GpuProcessHost : public BrowserChildProcessHostDelegate, // These are the channel requests that we have already sent to // the GPU process, but haven't heard back about yet. - std::queue<EstablishChannelCallback> channel_requests_; + std::queue<EstablishChannelRequest> channel_requests_; // The pending create gpu memory buffer requests we need to reply to. std::queue<CreateGpuMemoryBufferCallback> create_gpu_memory_buffer_requests_; @@ -296,8 +301,6 @@ class GpuProcessHost : public BrowserChildProcessHostDelegate, ui::mojom::GpuServicePtr gpu_service_ptr_; mojo::Binding<ui::mojom::GpuHost> gpu_host_binding_; - base::WeakPtrFactory<GpuProcessHost> weak_ptr_factory_; - DISALLOW_COPY_AND_ASSIGN(GpuProcessHost); }; diff --git a/chromium/content/browser/loader/resource_dispatcher_host_impl.cc b/chromium/content/browser/loader/resource_dispatcher_host_impl.cc index 3e200a25cd7..7dff16b1a90 100644 --- a/chromium/content/browser/loader/resource_dispatcher_host_impl.cc +++ b/chromium/content/browser/loader/resource_dispatcher_host_impl.cc @@ -1329,7 +1329,8 @@ void ResourceDispatcherHostImpl::BeginRequest( } ContinuePendingBeginRequest( requester_info, request_id, request_data, sync_result_handler, route_id, - headers, std::move(mojo_request), std::move(url_loader_client), true, 0); + headers, std::move(mojo_request), std::move(url_loader_client), + HeaderInterceptorResult::CONTINUE); } void ResourceDispatcherHostImpl::ContinuePendingBeginRequest( @@ -1341,13 +1342,14 @@ void ResourceDispatcherHostImpl::ContinuePendingBeginRequest( const net::HttpRequestHeaders& headers, mojom::URLLoaderAssociatedRequest mojo_request, mojom::URLLoaderClientPtr url_loader_client, - bool continue_request, - int error_code) { + HeaderInterceptorResult interceptor_result) { DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); - if (!continue_request) { - if (requester_info->IsRenderer()) { + if (interceptor_result != HeaderInterceptorResult::CONTINUE) { + if (requester_info->IsRenderer() && + interceptor_result == HeaderInterceptorResult::KILL) { // TODO(ananta): Find a way to specify the right error code here. Passing - // in a non-content error code is not safe. + // in a non-content error code is not safe, but future header interceptors + // might say to kill for reasons other than illegal origins. bad_message::ReceivedBadMessage(requester_info->filter(), bad_message::RDH_ILLEGAL_ORIGIN); } diff --git a/chromium/content/browser/loader/resource_dispatcher_host_impl.h b/chromium/content/browser/loader/resource_dispatcher_host_impl.h index c30b304c738..13b0378ad65 100644 --- a/chromium/content/browser/loader/resource_dispatcher_host_impl.h +++ b/chromium/content/browser/loader/resource_dispatcher_host_impl.h @@ -583,9 +583,8 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl // decisions which could be time consuming. We allow for these decisions // to be made asynchronously. The request proceeds when we hear back from // the interceptors about whether to continue or not. - // The |continue_request| parameter in the function indicates whether the - // request should be continued or aborted. The |error_code| parameter is set - // if |continue_request| is false. + // The |interceptor_result| indicates whether the request should be continued + // or aborted, and in the latter case whether the renderer should be killed. void ContinuePendingBeginRequest( scoped_refptr<ResourceRequesterInfo> requester_info, int request_id, @@ -595,8 +594,7 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl const net::HttpRequestHeaders& headers, mojom::URLLoaderAssociatedRequest mojo_request, mojom::URLLoaderClientPtr url_loader_client, - bool continue_request, - int error_code); + HeaderInterceptorResult interceptor_result); // Creates a ResourceHandler to be used by BeginRequest() for normal resource // loading. diff --git a/chromium/content/browser/media/android/media_player_renderer.cc b/chromium/content/browser/media/android/media_player_renderer.cc index 7e5874aedd2..9c129c6cba3 100644 --- a/chromium/content/browser/media/android/media_player_renderer.cc +++ b/chromium/content/browser/media/android/media_player_renderer.cc @@ -32,7 +32,6 @@ media::MediaUrlInterceptor* g_media_url_interceptor = nullptr; MediaPlayerRenderer::MediaPlayerRenderer(RenderFrameHost* render_frame_host) : render_frame_host_(render_frame_host), - duration_(media::kInfiniteDuration), has_error_(false), weak_factory_(this) {} diff --git a/chromium/content/browser/pointer_lock_browsertest.cc b/chromium/content/browser/pointer_lock_browsertest.cc index 46fde73b719..ad5e90c7b3a 100644 --- a/chromium/content/browser/pointer_lock_browsertest.cc +++ b/chromium/content/browser/pointer_lock_browsertest.cc @@ -307,4 +307,115 @@ IN_PROC_BROWSER_TEST_F(PointerLockBrowserTest, PointerLockChildFrameDetached) { web_contents()->GetMouseLockWidget()); } +IN_PROC_BROWSER_TEST_F(PointerLockBrowserTest, PointerLockWheelEventRouting) { + GURL main_url(embedded_test_server()->GetURL( + "a.com", "/cross_site_iframe_factory.html?a(b)")); + EXPECT_TRUE(NavigateToURL(shell(), main_url)); + + FrameTreeNode* root = web_contents()->GetFrameTree()->root(); + FrameTreeNode* child = root->child_at(0); + RenderWidgetHostInputEventRouter* router = + web_contents()->GetInputEventRouter(); + RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( + root->current_frame_host()->GetView()); + RenderWidgetHostViewBase* child_view = static_cast<RenderWidgetHostViewBase*>( + child->current_frame_host()->GetView()); + + // Request a pointer lock on the root frame's body. + EXPECT_TRUE(ExecuteScript(root, "document.body.requestPointerLock()")); + + // Root frame should have been granted pointer lock. + bool locked = false; + EXPECT_TRUE(ExecuteScriptAndExtractBool(root, + "window.domAutomationController.send(" + "document.pointerLockElement == " + "document.body);", + &locked)); + EXPECT_TRUE(locked); + + // Add a mouse move wheel event listener to the root frame. + EXPECT_TRUE(ExecuteScript( + root, + "var x; var y; var mX; var mY; document.addEventListener('mousewheel', " + "function(e) {x = e.x; y = e.y; dX = e.deltaX; dY = e.deltaY;});")); + MainThreadFrameObserver root_observer(root_view->GetRenderWidgetHost()); + root_observer.Wait(); + + blink::WebMouseWheelEvent wheel_event( + blink::WebInputEvent::MouseWheel, blink::WebInputEvent::NoModifiers, + blink::WebInputEvent::TimeStampForTesting); + wheel_event.x = 10; + wheel_event.y = 11; + wheel_event.deltaX = -12; + wheel_event.deltaY = -13; + router->RouteMouseWheelEvent(root_view, &wheel_event, ui::LatencyInfo()); + + // Make sure that the renderer handled the input event. + root_observer.Wait(); + + int x, y, deltaX, deltaY; + EXPECT_TRUE(ExecuteScriptAndExtractInt( + root, "window.domAutomationController.send(x);", &x)); + EXPECT_TRUE(ExecuteScriptAndExtractInt( + root, "window.domAutomationController.send(y);", &y)); + EXPECT_TRUE(ExecuteScriptAndExtractInt( + root, "window.domAutomationController.send(dX);", &deltaX)); + EXPECT_TRUE(ExecuteScriptAndExtractInt( + root, "window.domAutomationController.send(dY);", &deltaY)); + EXPECT_EQ(10, x); + EXPECT_EQ(11, y); + EXPECT_EQ(12, deltaX); + EXPECT_EQ(13, deltaY); + + // Release pointer lock on root frame. + EXPECT_TRUE(ExecuteScript(root, "document.exitPointerLock()")); + + // Request a pointer lock on the child frame's body. + EXPECT_TRUE(ExecuteScript(child, "document.body.requestPointerLock()")); + + // Child frame should have been granted pointer lock. + EXPECT_TRUE(ExecuteScriptAndExtractBool(child, + "window.domAutomationController.send(" + "document.pointerLockElement == " + "document.body);", + &locked)); + EXPECT_TRUE(locked); + + // Add a mouse move event listener to the child frame. + EXPECT_TRUE(ExecuteScript( + child, + "var x; var y; var mX; var mY; document.addEventListener('mousewheel', " + "function(e) {x = e.x; y = e.y; dX = e.deltaX; dY = e.deltaY;});")); + MainThreadFrameObserver child_observer(child_view->GetRenderWidgetHost()); + child_observer.Wait(); + + gfx::Point transformed_point; + root_view->TransformPointToCoordSpaceForView(gfx::Point(0, 0), child_view, + &transformed_point); + + wheel_event.x = -transformed_point.x() + 14; + wheel_event.y = -transformed_point.y() + 15; + wheel_event.deltaX = -16; + wheel_event.deltaY = -17; + // We use root_view intentionally as the RenderWidgetHostInputEventRouter is + // responsible for correctly routing the event to the child frame. + router->RouteMouseWheelEvent(root_view, &wheel_event, ui::LatencyInfo()); + + // Make sure that the renderer handled the input event. + child_observer.Wait(); + + EXPECT_TRUE(ExecuteScriptAndExtractInt( + child, "window.domAutomationController.send(x);", &x)); + EXPECT_TRUE(ExecuteScriptAndExtractInt( + child, "window.domAutomationController.send(y);", &y)); + EXPECT_TRUE(ExecuteScriptAndExtractInt( + child, "window.domAutomationController.send(dX);", &deltaX)); + EXPECT_TRUE(ExecuteScriptAndExtractInt( + child, "window.domAutomationController.send(dY);", &deltaY)); + EXPECT_EQ(14, x); + EXPECT_EQ(15, y); + EXPECT_EQ(16, deltaX); + EXPECT_EQ(17, deltaY); +} + } // namespace content diff --git a/chromium/content/browser/renderer_host/render_widget_host_input_event_router.cc b/chromium/content/browser/renderer_host/render_widget_host_input_event_router.cc index 2b0afcbf377..2ff6b89c7e1 100644 --- a/chromium/content/browser/renderer_host/render_widget_host_input_event_router.cc +++ b/chromium/content/browser/renderer_host/render_widget_host_input_event_router.cc @@ -263,18 +263,22 @@ void RenderWidgetHostInputEventRouter::RouteMouseWheelEvent( RenderWidgetHostViewBase* root_view, blink::WebMouseWheelEvent* event, const ui::LatencyInfo& latency) { + RenderWidgetHostViewBase* target = nullptr; + gfx::Point transformed_point; + if (root_view->IsMouseLocked()) { - RenderWidgetHostImpl::From(root_view->GetRenderWidgetHost()) - ->delegate() - ->GetMouseLockWidget() - ->GetView() - ->ProcessMouseEvent(*event, latency); - return; + target = RenderWidgetHostImpl::From(root_view->GetRenderWidgetHost()) + ->delegate() + ->GetMouseLockWidget() + ->GetView(); + if (!root_view->TransformPointToCoordSpaceForView( + gfx::Point(event->x, event->y), target, &transformed_point)) + return; + } else { + target = FindEventTarget(root_view, gfx::Point(event->x, event->y), + &transformed_point); } - gfx::Point transformed_point; - RenderWidgetHostViewBase* target = FindEventTarget( - root_view, gfx::Point(event->x, event->y), &transformed_point); if (!target) return; diff --git a/chromium/content/browser/renderer_host/render_widget_host_view_mac.mm b/chromium/content/browser/renderer_host/render_widget_host_view_mac.mm index 9ce93d256d4..b7f8bad5ef1 100644 --- a/chromium/content/browser/renderer_host/render_widget_host_view_mac.mm +++ b/chromium/content/browser/renderer_host/render_widget_host_view_mac.mm @@ -568,7 +568,8 @@ RenderWidgetHostImpl* RenderWidgetHostViewMac::GetActiveWidget() { const TextInputManager::CompositionRangeInfo* RenderWidgetHostViewMac::GetCompositionRangeInfo() { - return text_input_manager_->GetCompositionRangeInfo(); + return GetTextInputManager() ? text_input_manager_->GetCompositionRangeInfo() + : nullptr; } const TextInputManager::TextSelection* diff --git a/chromium/content/browser/security_exploit_browsertest.cc b/chromium/content/browser/security_exploit_browsertest.cc index 3d61efb0e97..780d8223741 100644 --- a/chromium/content/browser/security_exploit_browsertest.cc +++ b/chromium/content/browser/security_exploit_browsertest.cc @@ -421,7 +421,7 @@ void OnHttpHeaderReceived(const std::string& header, int child_process_id, content::ResourceContext* resource_context, OnHeaderProcessedCallback callback) { - callback.Run(false, content::bad_message::RDH_ILLEGAL_ORIGIN); + callback.Run(HeaderInterceptorResult::KILL); } // Renderer processes should not be able to spoof Origin HTTP headers. diff --git a/chromium/content/browser/service_worker/service_worker_browsertest.cc b/chromium/content/browser/service_worker/service_worker_browsertest.cc index 9551a4878cd..6915c118ad2 100644 --- a/chromium/content/browser/service_worker/service_worker_browsertest.cc +++ b/chromium/content/browser/service_worker/service_worker_browsertest.cc @@ -1499,7 +1499,7 @@ class ServiceWorkerNavigationPreloadTest : public ServiceWorkerBrowserTest { content::ResourceContext* resource_context, OnHeaderProcessedCallback callback) { DCHECK_EQ(kNavigationPreloadHeaderName, header); - callback.Run(false, 0); + callback.Run(HeaderInterceptorResult::KILL); } void SetupForNavigationPreloadTest(const GURL& scope, diff --git a/chromium/content/common/drag_traits.h b/chromium/content/common/drag_traits.h index bf20e175fa0..16ea9b1e8fa 100644 --- a/chromium/content/common/drag_traits.h +++ b/chromium/content/common/drag_traits.h @@ -35,6 +35,7 @@ IPC_STRUCT_TRAITS_BEGIN(content::DropData) IPC_STRUCT_TRAITS_MEMBER(html) IPC_STRUCT_TRAITS_MEMBER(html_base_url) IPC_STRUCT_TRAITS_MEMBER(file_contents) + IPC_STRUCT_TRAITS_MEMBER(file_contents_source_url) IPC_STRUCT_TRAITS_MEMBER(file_contents_filename_extension) IPC_STRUCT_TRAITS_MEMBER(file_contents_content_disposition) IPC_STRUCT_TRAITS_MEMBER(custom_data) diff --git a/chromium/content/common/gpu_host_messages.h b/chromium/content/common/gpu_host_messages.h index 6e76f92761f..01bf3d7f29d 100644 --- a/chromium/content/common/gpu_host_messages.h +++ b/chromium/content/common/gpu_host_messages.h @@ -45,6 +45,14 @@ IPC_STRUCT_BEGIN(GpuMsg_CreateGpuMemoryBuffer_Params) IPC_STRUCT_MEMBER(gpu::SurfaceHandle, surface_handle) IPC_STRUCT_END() +IPC_STRUCT_TRAITS_BEGIN(content::EstablishChannelParams) + IPC_STRUCT_TRAITS_MEMBER(client_id) + IPC_STRUCT_TRAITS_MEMBER(client_tracing_id) + IPC_STRUCT_TRAITS_MEMBER(preempts) + IPC_STRUCT_TRAITS_MEMBER(allow_view_command_buffers) + IPC_STRUCT_TRAITS_MEMBER(allow_real_time_streams) +IPC_STRUCT_TRAITS_END() + IPC_STRUCT_TRAITS_BEGIN(gpu::GpuPreferences) IPC_STRUCT_TRAITS_MEMBER(single_process) IPC_STRUCT_TRAITS_MEMBER(in_process_gpu) @@ -92,6 +100,15 @@ IPC_STRUCT_TRAITS_END() // Tells the GPU process to shutdown itself. IPC_MESSAGE_CONTROL0(GpuMsg_Finalize) +// Tells the GPU process to create a new channel for communication with a +// given client. The channel name is returned in a +// GpuHostMsg_ChannelEstablished message. The client ID is passed so +// that the GPU process reuses an existing channel to that process if it exists. +// This ID is a unique opaque identifier generated by the browser process. +// The client_tracing_id is a unique ID used for the purposes of tracing. +IPC_MESSAGE_CONTROL1(GpuMsg_EstablishChannel, + content::EstablishChannelParams /* params */) + // Tells the GPU process to close the channel identified by |client_id|. // If no channel can be identified, do nothing. IPC_MESSAGE_CONTROL1(GpuMsg_CloseChannel, int32_t /* client_id */) @@ -145,6 +162,10 @@ IPC_MESSAGE_CONTROL3(GpuHostMsg_Initialized, ::gpu::GPUInfo /* gpu_info */, ::gpu::GpuFeatureInfo /* gpu_feature_info */) +// Response from GPU to a GpuHostMsg_EstablishChannel message. +IPC_MESSAGE_CONTROL1(GpuHostMsg_ChannelEstablished, + IPC::ChannelHandle /* channel_handle */) + // Message to the GPU that a shader was loaded from disk. IPC_MESSAGE_CONTROL1(GpuMsg_LoadedShader, std::string /* encoded shader */) diff --git a/chromium/content/common/sandbox_win.cc b/chromium/content/common/sandbox_win.cc index 789a7a882d4..1b139b06f59 100644 --- a/chromium/content/common/sandbox_win.cc +++ b/chromium/content/common/sandbox_win.cc @@ -814,10 +814,12 @@ sandbox::ResultCode StartSandboxedProcess( } } +#if !defined(OFFICIAL_BUILD) // If stdout/stderr point to a Windows console, these calls will // have no effect. These calls can fail with SBOX_ERROR_BAD_PARAMS. policy->SetStdoutHandle(GetStdHandle(STD_OUTPUT_HANDLE)); policy->SetStderrHandle(GetStdHandle(STD_ERROR_HANDLE)); +#endif if (!delegate->PreSpawnTarget(policy.get())) return sandbox::SBOX_ERROR_DELEGATE_PRE_SPAWN; diff --git a/chromium/content/gpu/gpu_child_thread.cc b/chromium/content/gpu/gpu_child_thread.cc index de49633c845..6da716b9ec9 100644 --- a/chromium/content/gpu/gpu_child_thread.cc +++ b/chromium/content/gpu/gpu_child_thread.cc @@ -276,6 +276,7 @@ bool GpuChildThread::OnMessageReceived(const IPC::Message& msg) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(GpuChildThread, msg) + IPC_MESSAGE_HANDLER(GpuMsg_EstablishChannel, OnEstablishChannel) IPC_MESSAGE_HANDLER(GpuMsg_CloseChannel, OnCloseChannel) IPC_MESSAGE_HANDLER(GpuMsg_DestroyGpuMemoryBuffer, OnDestroyGpuMemoryBuffer) IPC_MESSAGE_HANDLER(GpuMsg_LoadedShader, OnLoadedShader) @@ -466,6 +467,17 @@ void GpuChildThread::OnGpuSwitched() { ui::GpuSwitchingManager::GetInstance()->NotifyGpuSwitched(); } +void GpuChildThread::OnEstablishChannel(const EstablishChannelParams& params) { + if (!gpu_channel_manager()) + return; + + IPC::ChannelHandle channel_handle = gpu_channel_manager()->EstablishChannel( + params.client_id, params.client_tracing_id, params.preempts, + params.allow_view_command_buffers, params.allow_real_time_streams); + gpu_service_->media_gpu_channel_manager()->AddChannel(params.client_id); + Send(new GpuHostMsg_ChannelEstablished(channel_handle)); +} + void GpuChildThread::OnCloseChannel(int32_t client_id) { if (gpu_channel_manager()) gpu_channel_manager()->RemoveChannel(client_id); diff --git a/chromium/content/gpu/gpu_child_thread.h b/chromium/content/gpu/gpu_child_thread.h index bac6fac97fd..a3af520ef09 100644 --- a/chromium/content/gpu/gpu_child_thread.h +++ b/chromium/content/gpu/gpu_child_thread.h @@ -46,6 +46,7 @@ class TargetServices; namespace content { class GpuServiceFactory; +struct EstablishChannelParams; // The main thread of the GPU child process. There will only ever be one of // these per process. It does process initialization and shutdown. It forwards @@ -128,6 +129,7 @@ class GpuChildThread : public ChildThreadImpl, #endif void OnGpuSwitched(); + void OnEstablishChannel(const EstablishChannelParams& params); void OnCloseChannel(int32_t client_id); void OnLoadedShader(const std::string& shader); void OnDestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id, diff --git a/chromium/content/public/browser/resource_dispatcher_host.h b/chromium/content/public/browser/resource_dispatcher_host.h index a3761fbd0ef..540fa6defce 100644 --- a/chromium/content/public/browser/resource_dispatcher_host.h +++ b/chromium/content/public/browser/resource_dispatcher_host.h @@ -23,11 +23,25 @@ class ResourceContext; class ResourceDispatcherHostDelegate; class RenderFrameHost; +// This value is returned by header interceptors below, to determine if a +// request should proceed based on the values of HTTP headers. +enum class HeaderInterceptorResult { + // Allow the request to proceed with the given headers. + CONTINUE, + + // Force the request to fail, since the headers were not supported values. + FAIL, + + // Force the request to fail and kill the renderer process, since it attempted + // to use an illegal header value that could pose a security risk. + KILL, +}; + // This callback is invoked when the interceptor finishes processing the // header. -// Parameter 1 is a bool indicating success or failure. -// Parameter 2 contains the error code in case of failure, else 0. -typedef base::Callback<void(bool, int)> OnHeaderProcessedCallback; +// Parameter 1 indicates whether to continue the request, fail it, or kill the +// renderer process (and fail it). +typedef base::Callback<void(HeaderInterceptorResult)> OnHeaderProcessedCallback; // This callback is registered by interceptors who are interested in being // notified of certain HTTP headers in outgoing requests. For e.g. Origin. diff --git a/chromium/content/public/common/common_param_traits_macros.h b/chromium/content/public/common/common_param_traits_macros.h index 0b895af9d44..e3bc5511dd2 100644 --- a/chromium/content/public/common/common_param_traits_macros.h +++ b/chromium/content/public/common/common_param_traits_macros.h @@ -256,6 +256,7 @@ IPC_STRUCT_TRAITS_BEGIN(content::WebPreferences) IPC_STRUCT_TRAITS_MEMBER(enable_instant_source_buffer_gc) IPC_STRUCT_TRAITS_MEMBER(presentation_receiver) IPC_STRUCT_TRAITS_MEMBER(media_controls_enabled) + IPC_STRUCT_TRAITS_MEMBER(do_not_update_selection_on_mutating_selection_range) IPC_STRUCT_TRAITS_END() IPC_STRUCT_TRAITS_BEGIN(blink::mojom::WindowFeatures) diff --git a/chromium/content/public/common/web_preferences.cc b/chromium/content/public/common/web_preferences.cc index 6c86828ed60..79a5128b726 100644 --- a/chromium/content/public/common/web_preferences.cc +++ b/chromium/content/public/common/web_preferences.cc @@ -232,7 +232,8 @@ WebPreferences::WebPreferences() base::TimeDelta::FromSeconds(10)), enable_instant_source_buffer_gc(false), presentation_receiver(false), - media_controls_enabled(true) { + media_controls_enabled(true), + do_not_update_selection_on_mutating_selection_range(false) { standard_font_family_map[kCommonScript] = base::ASCIIToUTF16("Times New Roman"); fixed_font_family_map[kCommonScript] = base::ASCIIToUTF16("Courier New"); diff --git a/chromium/content/public/common/web_preferences.h b/chromium/content/public/common/web_preferences.h index 03773883c7a..554c4d928a6 100644 --- a/chromium/content/public/common/web_preferences.h +++ b/chromium/content/public/common/web_preferences.h @@ -292,6 +292,12 @@ struct CONTENT_EXPORT WebPreferences { // If disabled, media controls should never be used. bool media_controls_enabled; + // Whether we want to disable updating selection on mutating selection range. + // This is to work around Samsung's email app issue. See + // https://crbug.com/699943 for details. + // TODO(changwan): remove this once we no longer support Android N. + bool do_not_update_selection_on_mutating_selection_range; + // We try to keep the default values the same as the default values in // chrome, except for the cases where it would require lots of extra work for // the embedder to use the same default value. diff --git a/chromium/content/renderer/media/webmediaplayer_ms.cc b/chromium/content/renderer/media/webmediaplayer_ms.cc index e51b5c5e1ed..0a01e58aeff 100644 --- a/chromium/content/renderer/media/webmediaplayer_ms.cc +++ b/chromium/content/renderer/media/webmediaplayer_ms.cc @@ -577,6 +577,8 @@ void WebMediaPlayerMS::OnBecamePersistentVideo(bool value) { bool WebMediaPlayerMS::copyVideoTextureToPlatformTexture( gpu::gles2::GLES2Interface* gl, unsigned int texture, + unsigned int internal_format, + unsigned int type, bool premultiply_alpha, bool flip_y) { TRACE_EVENT0("media", "WebMediaPlayerMS:copyVideoTextureToPlatformTexture"); @@ -597,7 +599,8 @@ bool WebMediaPlayerMS::copyVideoTextureToPlatformTexture( context_3d = media::Context3D(provider->ContextGL(), provider->GrContext()); DCHECK(context_3d.gl); return video_renderer_.CopyVideoFrameTexturesToGLTexture( - context_3d, gl, video_frame.get(), texture, premultiply_alpha, flip_y); + context_3d, gl, video_frame.get(), texture, internal_format, type, + premultiply_alpha, flip_y); } bool WebMediaPlayerMS::texImageImpl(TexImageFunctionID functionID, diff --git a/chromium/content/renderer/media/webmediaplayer_ms.h b/chromium/content/renderer/media/webmediaplayer_ms.h index a7724c14bc9..2127a46733a 100644 --- a/chromium/content/renderer/media/webmediaplayer_ms.h +++ b/chromium/content/renderer/media/webmediaplayer_ms.h @@ -155,6 +155,8 @@ class CONTENT_EXPORT WebMediaPlayerMS bool copyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface* gl, unsigned int texture, + unsigned int internal_format, + unsigned int type, bool premultiply_alpha, bool flip_y) override; diff --git a/chromium/content/renderer/media_recorder/video_track_recorder.cc b/chromium/content/renderer/media_recorder/video_track_recorder.cc index e53129e4dc5..6fc99336398 100644 --- a/chromium/content/renderer/media_recorder/video_track_recorder.cc +++ b/chromium/content/renderer/media_recorder/video_track_recorder.cc @@ -410,6 +410,7 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder, public: VEAEncoder( const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback, + const VideoTrackRecorder::OnErrorCB& on_error_callback, int32_t bits_per_second, media::VideoCodecProfile codec, const gfx::Size& size); @@ -468,6 +469,9 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder, // Frames and corresponding timestamps in encode as FIFO. std::queue<VideoParamsAndTimestamp> frames_in_encode_; + + // This callback can be exercised on any thread. + const VideoTrackRecorder::OnErrorCB on_error_callback_; }; // Class encapsulating all libvpx interactions for VP8/VP9 encoding. @@ -557,6 +561,7 @@ class H264Encoder final : public VideoTrackRecorder::Encoder { VEAEncoder::VEAEncoder( const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback, + const VideoTrackRecorder::OnErrorCB& on_error_callback, int32_t bits_per_second, media::VideoCodecProfile codec, const gfx::Size& size) @@ -566,7 +571,8 @@ VEAEncoder::VEAEncoder( RenderThreadImpl::current()->GetGpuFactories()->GetTaskRunner()), gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()), codec_(codec), - error_notified_(false) { + error_notified_(false), + on_error_callback_(on_error_callback) { DCHECK(gpu_factories_); DCHECK_GE(size.width(), kVEAEncoderMinResolutionWidth); DCHECK_GE(size.height(), kVEAEncoderMinResolutionHeight); @@ -639,8 +645,7 @@ void VEAEncoder::BitstreamBufferReady(int32_t bitstream_buffer_id, void VEAEncoder::NotifyError(media::VideoEncodeAccelerator::Error error) { DVLOG(3) << __func__; DCHECK(encoding_task_runner_->BelongsToCurrentThread()); - - // TODO(emircan): Notify the owner via a callback. + on_error_callback_.Run(); error_notified_ = true; } @@ -1156,7 +1161,10 @@ VideoTrackRecorder::VideoTrackRecorder( // InitializeEncoder() will be called on Render Main thread. MediaStreamVideoSink::ConnectToTrack( - track_, media::BindToCurrentLoop(initialize_encoder_callback_), false); + track_, + media::BindToCurrentLoop(base::Bind(initialize_encoder_callback_, + true /* allow_vea_encoder */)), + false); } VideoTrackRecorder::~VideoTrackRecorder() { @@ -1188,7 +1196,8 @@ void VideoTrackRecorder::OnVideoFrameForTesting( if (!encoder_) { DCHECK(!initialize_encoder_callback_.is_null()); - initialize_encoder_callback_.Run(frame, timestamp); + initialize_encoder_callback_.Run(true /* allow_vea_encoder */, frame, + timestamp); } encoder_->StartFrameEncode(frame, timestamp); @@ -1198,6 +1207,7 @@ void VideoTrackRecorder::InitializeEncoder( CodecId codec, const OnEncodedVideoCB& on_encoded_video_callback, int32_t bits_per_second, + bool allow_vea_encoder, const scoped_refptr<media::VideoFrame>& frame, base::TimeTicks capture_time) { DVLOG(3) << __func__ << frame->visible_rect().size().ToString(); @@ -1208,11 +1218,15 @@ void VideoTrackRecorder::InitializeEncoder( const gfx::Size& input_size = frame->visible_rect().size(); const auto& vea_supported_profile = GetCodecEnumerator()->CodecIdToVEAProfile(codec); - if (vea_supported_profile != media::VIDEO_CODEC_PROFILE_UNKNOWN && + if (allow_vea_encoder && + vea_supported_profile != media::VIDEO_CODEC_PROFILE_UNKNOWN && input_size.width() >= kVEAEncoderMinResolutionWidth && input_size.height() >= kVEAEncoderMinResolutionHeight) { - encoder_ = new VEAEncoder(on_encoded_video_callback, bits_per_second, - vea_supported_profile, input_size); + encoder_ = new VEAEncoder( + on_encoded_video_callback, + media::BindToCurrentLoop(base::Bind(&VideoTrackRecorder::OnError, + weak_ptr_factory_.GetWeakPtr())), + bits_per_second, vea_supported_profile, input_size); } else { switch (codec) { #if BUILDFLAG(RTC_USE_H264) @@ -1241,4 +1255,19 @@ void VideoTrackRecorder::InitializeEncoder( false); } +void VideoTrackRecorder::OnError() { + DVLOG(3) << __func__; + DCHECK(main_render_thread_checker_.CalledOnValidThread()); + + // InitializeEncoder() will be called to reinitialize encoder on Render Main + // thread. + MediaStreamVideoSink::DisconnectFromTrack(); + encoder_ = nullptr; + MediaStreamVideoSink::ConnectToTrack( + track_, + media::BindToCurrentLoop(base::Bind(initialize_encoder_callback_, + false /*allow_vea_encoder*/)), + false); +} + } // namespace content diff --git a/chromium/content/renderer/media_recorder/video_track_recorder.h b/chromium/content/renderer/media_recorder/video_track_recorder.h index 895523d696e..667cb237b82 100644 --- a/chromium/content/renderer/media_recorder/video_track_recorder.h +++ b/chromium/content/renderer/media_recorder/video_track_recorder.h @@ -53,6 +53,7 @@ class CONTENT_EXPORT VideoTrackRecorder std::unique_ptr<std::string> encoded_data, base::TimeTicks capture_timestamp, bool is_key_frame)>; + using OnErrorCB = base::Closure; static CodecId GetPreferredCodecId(); @@ -73,8 +74,10 @@ class CONTENT_EXPORT VideoTrackRecorder void InitializeEncoder(CodecId codec, const OnEncodedVideoCB& on_encoded_video_callback, int32_t bits_per_second, + bool allow_vea_encoder, const scoped_refptr<media::VideoFrame>& frame, base::TimeTicks capture_time); + void OnError(); // Used to check that we are destroyed on the same thread we were created. base::ThreadChecker main_render_thread_checker_; @@ -85,7 +88,8 @@ class CONTENT_EXPORT VideoTrackRecorder // Inner class to encode using whichever codec is configured. scoped_refptr<Encoder> encoder_; - base::Callback<void(const scoped_refptr<media::VideoFrame>& frame, + base::Callback<void(bool allow_vea_encoder, + const scoped_refptr<media::VideoFrame>& frame, base::TimeTicks capture_time)> initialize_encoder_callback_; diff --git a/chromium/content/renderer/media_recorder/video_track_recorder_unittest.cc b/chromium/content/renderer/media_recorder/video_track_recorder_unittest.cc index 093d2cf0045..1f901a6ca8c 100644 --- a/chromium/content/renderer/media_recorder/video_track_recorder_unittest.cc +++ b/chromium/content/renderer/media_recorder/video_track_recorder_unittest.cc @@ -112,6 +112,12 @@ class VideoTrackRecorderTest video_track_recorder_->OnVideoFrameForTesting(frame, capture_time); } + void OnError() { video_track_recorder_->OnError(); } + + bool HasEncoderInstance() { + return video_track_recorder_->encoder_.get() != nullptr; + } + // A ChildProcess and a MessageLoopForUI are both needed to fool the Tracks // and Sources below into believing they are on the right threads. const base::MessageLoopForUI message_loop_; @@ -211,6 +217,31 @@ TEST_P(VideoTrackRecorderTest, EncodeFrameWithPaddedCodedSize) { Mock::VerifyAndClearExpectations(this); } +// Inserts an OnError() call between sent frames. +TEST_P(VideoTrackRecorderTest, HandlesOnError) { + const gfx::Size& frame_size = kTrackRecorderTestSize[0]; + const scoped_refptr<VideoFrame> video_frame = + VideoFrame::CreateBlackFrame(frame_size); + + InSequence s; + EXPECT_CALL(*this, DoOnEncodedVideo(_, _, _, true)).Times(1); + Encode(video_frame, base::TimeTicks::Now()); + + EXPECT_TRUE(HasEncoderInstance()); + OnError(); + EXPECT_FALSE(HasEncoderInstance()); + + base::RunLoop run_loop; + base::Closure quit_closure = run_loop.QuitClosure(); + EXPECT_CALL(*this, DoOnEncodedVideo(_, _, _, true)) + .Times(1) + .WillOnce(RunClosure(quit_closure)); + Encode(video_frame, base::TimeTicks::Now()); + run_loop.Run(); + + Mock::VerifyAndClearExpectations(this); +} + INSTANTIATE_TEST_CASE_P(, VideoTrackRecorderTest, ::testing::Combine(ValuesIn(kTrackRecorderTestCodec), diff --git a/chromium/content/renderer/render_view_impl.cc b/chromium/content/renderer/render_view_impl.cc index 1869ab4f557..aedd7599c00 100644 --- a/chromium/content/renderer/render_view_impl.cc +++ b/chromium/content/renderer/render_view_impl.cc @@ -1077,6 +1077,8 @@ void RenderView::ApplyWebPreferences(const WebPreferences& prefs, prefs.video_fullscreen_detection_enabled); settings->setEmbeddedMediaExperienceEnabled( prefs.embedded_media_experience_enabled); + settings->setDoNotUpdateSelectionOnMutatingSelectionRange( + prefs.do_not_update_selection_on_mutating_selection_range); #else // defined(OS_ANDROID) settings->setCrossOriginMediaPlaybackRequiresUserGesture( prefs.cross_origin_media_playback_requires_user_gesture); diff --git a/chromium/content/renderer/render_widget.cc b/chromium/content/renderer/render_widget.cc index e0ae75e2ad4..0b23ea4dff4 100644 --- a/chromium/content/renderer/render_widget.cc +++ b/chromium/content/renderer/render_widget.cc @@ -941,6 +941,7 @@ void RenderWidget::RequestScheduleAnimation() { void RenderWidget::UpdateVisualState() { GetWebWidget()->updateAllLifecyclePhases(); + GetWebWidget()->setSuppressFrameRequestsWorkaroundFor704763Only(false); if (time_to_first_active_paint_recorded_) return; @@ -958,6 +959,8 @@ void RenderWidget::UpdateVisualState() { void RenderWidget::WillBeginCompositorFrame() { TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame"); + GetWebWidget()->setSuppressFrameRequestsWorkaroundFor704763Only(true); + // The UpdateTextInputState can result in further layout and possibly // enable GPU acceleration so they need to be called before any painting // is done. diff --git a/chromium/device/usb/webusb_descriptors.cc b/chromium/device/usb/webusb_descriptors.cc index 57468182278..1bc243d114e 100644 --- a/chromium/device/usb/webusb_descriptors.cc +++ b/chromium/device/usb/webusb_descriptors.cc @@ -576,7 +576,9 @@ void ReadWebUsbDescriptors(scoped_refptr<UsbDeviceHandle> device_handle, bool FindInWebUsbAllowedOrigins( const device::WebUsbAllowedOrigins* allowed_origins, - const GURL& origin) { + const GURL& origin, + base::Optional<uint8_t> config_value, + base::Optional<uint8_t> first_interface) { if (!allowed_origins) return false; @@ -584,10 +586,16 @@ bool FindInWebUsbAllowedOrigins( return true; for (const auto& config : allowed_origins->configurations) { + if (config_value && *config_value != config.configuration_value) + continue; + if (base::ContainsValue(config.origins, origin)) return true; for (const auto& function : config.functions) { + if (first_interface && *first_interface != function.first_interface) + continue; + if (base::ContainsValue(function.origins, origin)) return true; } diff --git a/chromium/device/usb/webusb_descriptors.h b/chromium/device/usb/webusb_descriptors.h index c88b1f97389..34a7d614ca0 100644 --- a/chromium/device/usb/webusb_descriptors.h +++ b/chromium/device/usb/webusb_descriptors.h @@ -12,6 +12,7 @@ #include "base/callback_forward.h" #include "base/memory/ref_counted.h" +#include "base/optional.h" #include "url/gurl.h" namespace device { @@ -70,10 +71,13 @@ void ReadWebUsbDescriptors( void(std::unique_ptr<WebUsbAllowedOrigins> allowed_origins, const GURL& landing_page)>& callback); -// Check if the origin is allowed. +// Check if the origin is allowed to access a given device, optionally filtering +// by configuration and function. bool FindInWebUsbAllowedOrigins( const device::WebUsbAllowedOrigins* allowed_origins, - const GURL& origin); + const GURL& origin, + base::Optional<uint8_t> configuration_value, + base::Optional<uint8_t> first_interface); } // device diff --git a/chromium/extensions/browser/app_window/app_window.cc b/chromium/extensions/browser/app_window/app_window.cc index 69126c3436a..fe70056fd01 100644 --- a/chromium/extensions/browser/app_window/app_window.cc +++ b/chromium/extensions/browser/app_window/app_window.cc @@ -561,6 +561,10 @@ base::string16 AppWindow::GetTitle() const { return title; } +bool AppWindow::HasCustomIcon() const { + return window_icon_url_.is_valid() || app_icon_url_.is_valid(); +} + void AppWindow::SetAppIconUrl(const GURL& url) { // Avoid using any previous icons that were being downloaded. image_loader_ptr_factory_.InvalidateWeakPtrs(); @@ -595,7 +599,8 @@ void AppWindow::UpdateAppIcon(const gfx::Image& image) { // Set the showInShelf=true window icon and add the app_icon_image_ // as a badge. If the image is empty, set the default app icon placeholder // as the base image. - if (window_icon_url_.is_valid() && !app_icon_image_->image().IsEmpty()) { + if (window_icon_url_.is_valid() && app_icon_image_ && + !app_icon_image_->image().IsEmpty()) { gfx::Image base_image = !image.IsEmpty() ? image diff --git a/chromium/extensions/browser/app_window/app_window.h b/chromium/extensions/browser/app_window/app_window.h index 66fdd4c1417..d89b7456513 100644 --- a/chromium/extensions/browser/app_window/app_window.h +++ b/chromium/extensions/browser/app_window/app_window.h @@ -360,6 +360,10 @@ class AppWindow : public content::WebContentsDelegate, // unblock resource requests. void NotifyRenderViewReady(); + // Returns true if window has custom icon in case either |window_icon_url_| or + // |app_icon_url_| is set. Custom icon may be not loaded yet. + bool HasCustomIcon() const; + // Whether the app window wants to be alpha enabled. bool requested_alpha_enabled() const { return requested_alpha_enabled_; } diff --git a/chromium/extensions/browser/extension_icon_image.h b/chromium/extensions/browser/extension_icon_image.h index 2698de2def2..2ec6c2602ce 100644 --- a/chromium/extensions/browser/extension_icon_image.h +++ b/chromium/extensions/browser/extension_icon_image.h @@ -77,6 +77,9 @@ class IconImage : public content::NotificationObserver { gfx::Image image() const { return image_; } const gfx::ImageSkia& image_skia() const { return image_skia_; } + // Returns true if the icon is attached to an existing extension. + bool is_valid() const { return extension_ ? true : false; } + void AddObserver(Observer* observer); void RemoveObserver(Observer* observer); diff --git a/chromium/extensions/common/api/_permission_features.json b/chromium/extensions/common/api/_permission_features.json index de72ed47c25..cd8b963cf9b 100644 --- a/chromium/extensions/common/api/_permission_features.json +++ b/chromium/extensions/common/api/_permission_features.json @@ -523,7 +523,7 @@ } ], "virtualKeyboard": { - "channel": "dev", + "channel": "stable", "extension_types": ["platform_app"], "platforms": ["chromeos"], "session_types": ["kiosk"] diff --git a/chromium/extensions/renderer/i18n_custom_bindings.cc b/chromium/extensions/renderer/i18n_custom_bindings.cc index 34dd6c89c0f..57e0e96e2e8 100644 --- a/chromium/extensions/renderer/i18n_custom_bindings.cc +++ b/chromium/extensions/renderer/i18n_custom_bindings.cc @@ -41,6 +41,10 @@ namespace { // Max number of languages to detect. const int kCldNumLangs = 3; +// CLD3 minimum reliable byte threshold. Predictions for inputs below this size +// in bytes will be considered unreliable. +const int kCld3MinimumByteThreshold = 50; + struct DetectedLanguage { DetectedLanguage(const std::string& language, int percentage) : language(language), percentage(percentage) {} @@ -310,8 +314,17 @@ void I18NCustomBindings::DetectTextLanguage( #elif BUILDFLAG(CLD_VERSION) == 3 chrome_lang_id::NNetLanguageIdentifier nnet_lang_id(/*min_num_bytes=*/0, /*max_num_bytes=*/512); - const std::vector<chrome_lang_id::NNetLanguageIdentifier::Result> - lang_results = nnet_lang_id.FindTopNMostFreqLangs(text, kCldNumLangs); + std::vector<chrome_lang_id::NNetLanguageIdentifier::Result> lang_results = + nnet_lang_id.FindTopNMostFreqLangs(text, kCldNumLangs); + + // is_reliable is set to false if we believe the input is too short to be + // accurately identified by the current model. + if (text.size() < kCld3MinimumByteThreshold) { + for (auto& result : lang_results) { + result.is_reliable = false; + } + } + LanguageDetectionResult result; // Populate LanguageDetectionResult with prediction reliability, languages, diff --git a/chromium/extensions/renderer/resources/guest_view/guest_view.js b/chromium/extensions/renderer/resources/guest_view/guest_view.js index 28811964c18..c8ce3b98711 100644 --- a/chromium/extensions/renderer/resources/guest_view/guest_view.js +++ b/chromium/extensions/renderer/resources/guest_view/guest_view.js @@ -48,6 +48,8 @@ function GuestViewImpl(guestView, viewType, guestInstanceId) { // Prevent GuestViewImpl inadvertently inheriting code from the global Object, // allowing a pathway for executing unintended user code execution. +// TODO(wjmaclean): Use utils.expose() here instead? Track down other issues +// of Object inheritance. https://crbug.com/701034 GuestViewImpl.prototype.__proto__ = null; // Possible states. diff --git a/chromium/extensions/renderer/resources/guest_view/guest_view_attributes.js b/chromium/extensions/renderer/resources/guest_view/guest_view_attributes.js index 4f6c3fd32c3..7c9189c7230 100644 --- a/chromium/extensions/renderer/resources/guest_view/guest_view_attributes.js +++ b/chromium/extensions/renderer/resources/guest_view/guest_view_attributes.js @@ -17,6 +17,12 @@ function Attribute(name, view) { this.defineProperty(); } +// Prevent GuestViewEvents inadvertently inheritng code from the global Object, +// allowing a pathway for unintended execution of user code. +// TODO(wjmaclean): Use utils.expose() here instead, track down other issues +// of Object inheritance. https://crbug.com/701034 +Attribute.prototype.__proto__ = null; + // Retrieves and returns the attribute's value. Attribute.prototype.getValue = function() { return this.view.element.getAttribute(this.name) || ''; diff --git a/chromium/extensions/renderer/resources/guest_view/guest_view_container.js b/chromium/extensions/renderer/resources/guest_view/guest_view_container.js index 2cf1584c5df..2ef77f4f635 100644 --- a/chromium/extensions/renderer/resources/guest_view/guest_view_container.js +++ b/chromium/extensions/renderer/resources/guest_view/guest_view_container.js @@ -33,6 +33,8 @@ function GuestViewContainer(element, viewType) { // Prevent GuestViewContainer inadvertently inheriting code from the global // Object, allowing a pathway for executing unintended user code execution. +// TODO(wjmaclean): Use utils.expose() here instead? Track down other issues +// of Object inheritance. https://crbug.com/701034 GuestViewContainer.prototype.__proto__ = null; // Forward public API methods from |proto| to their internal implementations. diff --git a/chromium/extensions/renderer/resources/guest_view/guest_view_events.js b/chromium/extensions/renderer/resources/guest_view/guest_view_events.js index d3c64746233..4381c39c20c 100644 --- a/chromium/extensions/renderer/resources/guest_view/guest_view_events.js +++ b/chromium/extensions/renderer/resources/guest_view/guest_view_events.js @@ -27,6 +27,12 @@ function GuestViewEvents(view) { this.setupEvents(); } +// Prevent GuestViewEvents inadvertently inheritng code from the global Object, +// allowing a pathway for unintended execution of user code. +// TODO(wjmaclean): Use utils.expose() here instead, track down other issues +// of Object inheritance. https://crbug.com/701034 +GuestViewEvents.prototype.__proto__ = null; + // |GuestViewEvents.EVENTS| is a dictionary of extension events to be listened // for, which specifies how each event should be handled. The events are // organized by name, and by default will be dispatched as DOM events with diff --git a/chromium/extensions/renderer/resources/guest_view/web_view/web_view_action_requests.js b/chromium/extensions/renderer/resources/guest_view/web_view/web_view_action_requests.js index 3dc177e198f..4333398adce 100644 --- a/chromium/extensions/renderer/resources/guest_view/web_view/web_view_action_requests.js +++ b/chromium/extensions/renderer/resources/guest_view/web_view/web_view_action_requests.js @@ -37,6 +37,12 @@ function WebViewActionRequest(webViewImpl, event, webViewEvent, interfaceName) { } } +// Prevent GuestViewEvents inadvertently inheritng code from the global Object, +// allowing a pathway for unintended execution of user code. +// TODO(wjmaclean): Use utils.expose() here instead, track down other issues +// of Object inheritance. https://crbug.com/701034 +WebViewActionRequest.prototype.__proto__ = null; + // Performs the default action for the request. WebViewActionRequest.prototype.defaultAction = function() { // Do nothing if the action has already been taken or the requester is diff --git a/chromium/extensions/strings/extensions_strings_ca.xtb b/chromium/extensions/strings/extensions_strings_ca.xtb index b266bb3d613..1d249ce5534 100644 --- a/chromium/extensions/strings/extensions_strings_ca.xtb +++ b/chromium/extensions/strings/extensions_strings_ca.xtb @@ -2,7 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ca"> <translation id="1135328998467923690">El paquet no és vàlid: "<ph name="ERROR_CODE" />".</translation> -<translation id="1256619696651732561">Analitzador per a manifests d'extensions</translation> +<translation id="1256619696651732561">Analitzador per a fitxers de manifest d'extensions</translation> <translation id="1445572445564823378">Aquesta extensió està alentint <ph name="PRODUCT_NAME" />. L'heu de desactivar per restaurar el rendiment de: <ph name="PRODUCT_NAME" />.</translation> <translation id="149347756975725155">No s'ha pogut carregar la icona d'extensió "<ph name="ICON" />".</translation> <translation id="1803557475693955505">No s'ha pogut carregar la pàgina en segon pla "<ph name="BACKGROUND_PAGE" />".</translation> diff --git a/chromium/gpu/command_buffer/common/capabilities.h b/chromium/gpu/command_buffer/common/capabilities.h index b6445c376d3..826d0b4479e 100644 --- a/chromium/gpu/command_buffer/common/capabilities.h +++ b/chromium/gpu/command_buffer/common/capabilities.h @@ -167,6 +167,9 @@ struct GPU_EXPORT Capabilities { // work around this. See https://crbug.com/449150 for an example. bool emulate_rgb_buffer_with_rgba = false; + // When true, non-empty post sub buffer calls are unsupported. + bool disable_non_empty_post_sub_buffers = false; + int major_version = 2; int minor_version = 0; }; diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc index 9295ee0eb3b..5b50a3125c7 100644 --- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -3780,6 +3780,10 @@ Capabilities GLES2DecoderImpl::GetCapabilities() { workarounds().disable_webgl_rgb_multisampling_usage; caps.emulate_rgb_buffer_with_rgba = workarounds().disable_gl_rgb_format; + if (workarounds().disable_non_empty_post_sub_buffers_for_onscreen_surfaces && + !surface_->IsOffscreen()) { + caps.disable_non_empty_post_sub_buffers = true; + } return caps; } diff --git a/chromium/gpu/config/gpu_driver_bug_list_json.cc b/chromium/gpu/config/gpu_driver_bug_list_json.cc index 9f361cf9ee7..ac67cf4d53c 100644 --- a/chromium/gpu/config/gpu_driver_bug_list_json.cc +++ b/chromium/gpu/config/gpu_driver_bug_list_json.cc @@ -19,7 +19,7 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST( { "name": "gpu driver bug list", // Please update the version number whenever you change this file. - "version": "9.35", + "version": "9.36", "entries": [ { "id": 1, @@ -85,14 +85,7 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST( "id": 19, "description": "Disable depth textures on Android with Qualcomm GPUs", "cr_bugs": [682075], - "os": { - "type": "android", - "version": { - "op": "<", - "value": "6.0" - } - }, - "gl_vendor": "Qualcomm.*", + "gl_renderer": "Adreno \\(TM\\) [23].*", "features": [ "disable_depth_texture" ], @@ -433,7 +426,7 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST( "value": "6.0" } }, - "gl_vendor": "Qualcomm.*", + "gl_renderer": "Adreno \\(TM\\) 4.*", "features": [ "disable_chromium_framebuffer_multisample" ] @@ -525,7 +518,7 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST( "gl_type": "gl", "gl_renderer": ".*Mesa.*", "features": [ - "disable_post_sub_buffers_for_onscreen_surfaces" + "disable_non_empty_post_sub_buffers_for_onscreen_surfaces" ] }, { @@ -2325,8 +2318,7 @@ LONG_STRING_CONST( "id": 214, "description": "Certain versions of Qualcomm driver don't setup scissor state correctly when FBO0 is bound.", "cr_bugs": [670607, 696627, 698197], - "gl_vendor": "Qualcomm.*", - "machine_model_name": ["Nexus 7", "KFTHWI", "KFSAWI", "KFAPWI", "KFTHWA", "KFSAWA", "KFAPWA"], + "gl_renderer": "Adreno \\(TM\\) 3.*", "features": [ "force_update_scissor_state_when_binding_fbo0", // Somehow the main workaround above won't work without the one below. diff --git a/chromium/gpu/config/gpu_driver_bug_workaround_type.h b/chromium/gpu/config/gpu_driver_bug_workaround_type.h index fecb82c19a4..3e68fd3b472 100644 --- a/chromium/gpu/config/gpu_driver_bug_workaround_type.h +++ b/chromium/gpu/config/gpu_driver_bug_workaround_type.h @@ -207,6 +207,8 @@ wake_up_gpu_before_drawing) \ GPU_OP(USE_TESTING_GPU_DRIVER_WORKAROUND, \ use_gpu_driver_workaround_for_testing) \ + GPU_OP(DISABLE_NON_EMPTY_POST_SUB_BUFFERS_FOR_ONSCREEN_SURFACES, \ + disable_non_empty_post_sub_buffers_for_onscreen_surfaces) \ // clang-format on namespace gpu { diff --git a/chromium/gpu/config/software_rendering_list_json.cc b/chromium/gpu/config/software_rendering_list_json.cc index 6f54fd47967..be002ceae2e 100644 --- a/chromium/gpu/config/software_rendering_list_json.cc +++ b/chromium/gpu/config/software_rendering_list_json.cc @@ -18,7 +18,7 @@ const char kSoftwareRenderingListJson[] = LONG_STRING_CONST( { "name": "software rendering list", // Please update the version number whenever you change this file. - "version": "12.19", + "version": "12.20", "entries": [ { "id": 1, @@ -1469,7 +1469,7 @@ LONG_STRING_CONST( "value": "6.0" } }, - "gl_vendor": "Qualcomm.*", + "gl_renderer": "Adreno \\(TM\\) 4.*", "features": [ "webgl2" ] @@ -1510,8 +1510,7 @@ LONG_STRING_CONST( "id": 140, "description": "Some old Qualcomm scissor bug workaround needs disabling MSAA to work, which is a core part of WebGL 2.", "cr_bugs": [670607, 696627, 698197], - "gl_vendor": "Qualcomm.*", - "machine_model_name": ["Nexus 7", "KFTHWI", "KFSAWI", "KFAPWI", "KFTHWA", "KFSAWA", "KFAPWA"], + "gl_renderer": "Adreno \\(TM\\) 3.*", "features": [ "webgl2" ] diff --git a/chromium/gpu/ipc/common/gpu_command_buffer_traits_multi.h b/chromium/gpu/ipc/common/gpu_command_buffer_traits_multi.h index 4dc28d16fb5..dacd67809fe 100644 --- a/chromium/gpu/ipc/common/gpu_command_buffer_traits_multi.h +++ b/chromium/gpu/ipc/common/gpu_command_buffer_traits_multi.h @@ -128,6 +128,7 @@ IPC_STRUCT_TRAITS_BEGIN(gpu::Capabilities) IPC_STRUCT_TRAITS_MEMBER(chromium_image_rgb_emulation) IPC_STRUCT_TRAITS_MEMBER(emulate_rgb_buffer_with_rgba) IPC_STRUCT_TRAITS_MEMBER(set_draw_rectangle) + IPC_STRUCT_TRAITS_MEMBER(disable_non_empty_post_sub_buffers) IPC_STRUCT_TRAITS_MEMBER(major_version) IPC_STRUCT_TRAITS_MEMBER(minor_version) diff --git a/chromium/ios/chrome/browser/ui/history/BUILD.gn b/chromium/ios/chrome/browser/ui/history/BUILD.gn index 892643980a0..d25410a3252 100644 --- a/chromium/ios/chrome/browser/ui/history/BUILD.gn +++ b/chromium/ios/chrome/browser/ui/history/BUILD.gn @@ -166,6 +166,8 @@ source_set("unit_tests_arc") { "//ios/chrome/browser/history", "//ios/chrome/browser/signin", "//ios/chrome/browser/signin:test_support", + "//ios/chrome/browser/sync:sync", + "//ios/chrome/browser/sync:test_support", "//ios/chrome/browser/ui", "//ios/chrome/browser/ui/collection_view", "//ios/chrome/browser/ui/util", @@ -174,6 +176,7 @@ source_set("unit_tests_arc") { "//ios/web", "//ios/web:test_support", "//skia", + "//testing/gmock", "//testing/gtest", "//third_party/ocmock", "//ui/base", diff --git a/chromium/media/base/container_names.cc b/chromium/media/base/container_names.cc index 24d8ea953ff..4eb91d82d58 100644 --- a/chromium/media/base/container_names.cc +++ b/chromium/media/base/container_names.cc @@ -956,29 +956,35 @@ static bool CheckMov(const uint8_t* buffer, int buffer_size) { RCHECK(buffer_size > 8); int offset = 0; + int valid_top_level_boxes = 0; while (offset + 8 < buffer_size) { uint32_t atomsize = Read32(buffer + offset); uint32_t atomtype = Read32(buffer + offset + 4); - // Only need to check for ones that are valid at the top level. + + // Only need to check for atoms that are valid at the top level. However, + // "Boxes with an unrecognized type shall be ignored and skipped." So + // simply make sure that at least two recognized top level boxes are found. + // This list matches BoxReader::IsValidTopLevelBox(). switch (atomtype) { - case TAG('f','t','y','p'): - case TAG('p','d','i','n'): - case TAG('m','o','o','v'): - case TAG('m','o','o','f'): - case TAG('m','f','r','a'): - case TAG('m','d','a','t'): - case TAG('f','r','e','e'): - case TAG('s','k','i','p'): - case TAG('m','e','t','a'): - case TAG('m','e','c','o'): - case TAG('s','t','y','p'): - case TAG('s','i','d','x'): - case TAG('s','s','i','x'): - case TAG('p','r','f','t'): - case TAG('b','l','o','c'): + case TAG('f', 't', 'y', 'p'): + case TAG('p', 'd', 'i', 'n'): + case TAG('b', 'l', 'o', 'c'): + case TAG('m', 'o', 'o', 'v'): + case TAG('m', 'o', 'o', 'f'): + case TAG('m', 'f', 'r', 'a'): + case TAG('m', 'd', 'a', 't'): + case TAG('f', 'r', 'e', 'e'): + case TAG('s', 'k', 'i', 'p'): + case TAG('m', 'e', 't', 'a'): + case TAG('m', 'e', 'c', 'o'): + case TAG('s', 't', 'y', 'p'): + case TAG('s', 'i', 'd', 'x'): + case TAG('s', 's', 'i', 'x'): + case TAG('p', 'r', 'f', 't'): + case TAG('u', 'u', 'i', 'd'): + case TAG('e', 'm', 's', 'g'): + ++valid_top_level_boxes; break; - default: - return false; } if (atomsize == 1) { // Indicates that the length is the next 64bits. @@ -992,7 +998,7 @@ static bool CheckMov(const uint8_t* buffer, int buffer_size) { break; // Indicates the last atom or length too big. offset += atomsize; } - return true; + return valid_top_level_boxes >= 2; } enum MPEGVersion { diff --git a/chromium/media/base/container_names_unittest.cc b/chromium/media/base/container_names_unittest.cc index b05632acb63..cb70a2f1e3d 100644 --- a/chromium/media/base/container_names_unittest.cc +++ b/chromium/media/base/container_names_unittest.cc @@ -160,7 +160,9 @@ TEST(ContainerNamesTest, FileCheckWAV) { } TEST(ContainerNamesTest, FileCheckMOV) { + TestFile(CONTAINER_MOV, GetTestDataFilePath("bear_rotate_90.mp4")); TestFile(CONTAINER_MOV, GetTestDataFilePath("bear-1280x720.mp4")); + TestFile(CONTAINER_MOV, GetTestDataFilePath("crbug657437.mp4")); TestFile(CONTAINER_MOV, GetTestDataFilePath("sfx.m4a")); } diff --git a/chromium/media/blink/webmediaplayer_impl.cc b/chromium/media/blink/webmediaplayer_impl.cc index d558fdef403..94adf818ab2 100644 --- a/chromium/media/blink/webmediaplayer_impl.cc +++ b/chromium/media/blink/webmediaplayer_impl.cc @@ -552,6 +552,10 @@ void WebMediaPlayerImpl::DoSeek(base::TimeDelta time, bool time_updated) { if (watch_time_reporter_) watch_time_reporter_->OnSeeking(); + // Clear any new frame processed callbacks on seek; otherwise we'll end up + // logging a time long after the seek completes. + frame_time_report_cb_.Cancel(); + // TODO(sandersd): Move |seeking_| to PipelineController. // TODO(sandersd): Do we want to reset the idle timer here? delegate_->SetIdle(delegate_id_, false); @@ -954,6 +958,8 @@ size_t WebMediaPlayerImpl::videoDecodedByteCount() const { bool WebMediaPlayerImpl::copyVideoTextureToPlatformTexture( gpu::gles2::GLES2Interface* gl, unsigned int texture, + unsigned int internal_format, + unsigned int type, bool premultiply_alpha, bool flip_y) { DCHECK(main_task_runner_->BelongsToCurrentThread()); @@ -974,7 +980,8 @@ bool WebMediaPlayerImpl::copyVideoTextureToPlatformTexture( if (!context_3d_cb_.is_null()) context_3d = context_3d_cb_.Run(); return skcanvas_video_renderer_.CopyVideoFrameTexturesToGLTexture( - context_3d, gl, video_frame.get(), texture, premultiply_alpha, flip_y); + context_3d, gl, video_frame.get(), texture, internal_format, type, + premultiply_alpha, flip_y); } void WebMediaPlayerImpl::setContentDecryptionModule( @@ -1250,6 +1257,10 @@ void WebMediaPlayerImpl::OnEnded() { ended_ = true; client_->timeChanged(); + // Clear any new frame processed callbacks on end; otherwise we'll end up + // logging a time long after playback ends. + frame_time_report_cb_.Cancel(); + // We don't actually want this to run until |client_| calls seek() or pause(), // but that should have already happened in timeChanged() and so this is // expected to be a no-op. @@ -1480,14 +1491,14 @@ void WebMediaPlayerImpl::OnFrameShown() { // for. if ((!paused_ && IsBackgroundOptimizationCandidate()) || paused_when_hidden_) { - VideoFrameCompositor::OnNewProcessedFrameCB new_processed_frame_cb = - BindToCurrentLoop(base::Bind( - &WebMediaPlayerImpl::ReportTimeFromForegroundToFirstFrame, - AsWeakPtr(), base::TimeTicks::Now())); + frame_time_report_cb_.Reset( + base::Bind(&WebMediaPlayerImpl::ReportTimeFromForegroundToFirstFrame, + AsWeakPtr(), base::TimeTicks::Now())); compositor_task_runner_->PostTask( FROM_HERE, base::Bind(&VideoFrameCompositor::SetOnNewProcessedFrameCallback, - base::Unretained(compositor_), new_processed_frame_cb)); + base::Unretained(compositor_), + BindToCurrentLoop(frame_time_report_cb_.callback()))); } EnableVideoTrackIfNeeded(); diff --git a/chromium/media/blink/webmediaplayer_impl.h b/chromium/media/blink/webmediaplayer_impl.h index 8a5cfd9e82d..3bf0e32ae07 100644 --- a/chromium/media/blink/webmediaplayer_impl.h +++ b/chromium/media/blink/webmediaplayer_impl.h @@ -171,6 +171,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl bool copyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface* gl, unsigned int texture, + unsigned int internal_format, + unsigned int type, bool premultiply_alpha, bool flip_y) override; @@ -708,6 +710,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl // the background. Affects the value of ShouldPauseVideoWhenHidden(). bool video_locked_when_paused_when_hidden_ = false; + base::CancelableCallback<void(base::TimeTicks)> frame_time_report_cb_; + DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl); }; diff --git a/chromium/media/renderers/skcanvas_video_renderer.cc b/chromium/media/renderers/skcanvas_video_renderer.cc index 418c8be1f23..1c8848b87c2 100644 --- a/chromium/media/renderers/skcanvas_video_renderer.cc +++ b/chromium/media/renderers/skcanvas_video_renderer.cc @@ -186,12 +186,9 @@ sk_sp<SkImage> NewSkImageFromVideoFrameNative(VideoFrame* video_frame, gl->GenTextures(1, &source_texture); DCHECK(source_texture); gl->BindTexture(GL_TEXTURE_2D, source_texture); - const gfx::Size& natural_size = video_frame->natural_size(); - gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, natural_size.width(), - natural_size.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, - nullptr); SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture( - gl, video_frame, source_texture, true, false); + gl, video_frame, source_texture, GL_RGBA, GL_UNSIGNED_BYTE, true, + false); } else { gl->WaitSyncTokenCHROMIUM(mailbox_holder.sync_token.GetConstData()); source_texture = gl->CreateAndConsumeTextureCHROMIUM( @@ -756,6 +753,8 @@ void SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture( gpu::gles2::GLES2Interface* gl, VideoFrame* video_frame, unsigned int texture, + unsigned int internal_format, + unsigned int type, bool premultiply_alpha, bool flip_y) { DCHECK(video_frame); @@ -777,15 +776,9 @@ void SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture( // value down to get the expected result. // "flip_y == true" means to reverse the video orientation while // "flip_y == false" means to keep the intrinsic orientation. - - // The video's texture might be larger than the natural size because - // the encoder might have had to round up to the size of a macroblock. - // Make sure to only copy the natural size to avoid putting garbage - // into the bottom of the destination texture. - const gfx::Size& natural_size = video_frame->natural_size(); - gl->CopySubTextureCHROMIUM(source_texture, 0, GL_TEXTURE_2D, texture, 0, 0, 0, - 0, 0, natural_size.width(), natural_size.height(), - flip_y, premultiply_alpha, false); + gl->CopyTextureCHROMIUM(source_texture, 0, GL_TEXTURE_2D, texture, 0, + internal_format, type, flip_y, premultiply_alpha, + false); gl->DeleteTextures(1, &source_texture); gl->Flush(); @@ -798,6 +791,8 @@ bool SkCanvasVideoRenderer::CopyVideoFrameTexturesToGLTexture( gpu::gles2::GLES2Interface* destination_gl, const scoped_refptr<VideoFrame>& video_frame, unsigned int texture, + unsigned int internal_format, + unsigned int type, bool premultiply_alpha, bool flip_y) { DCHECK(thread_checker_.CalledOnValidThread()); @@ -834,15 +829,9 @@ bool SkCanvasVideoRenderer::CopyVideoFrameTexturesToGLTexture( destination_gl->CreateAndConsumeTextureCHROMIUM( mailbox_holder.texture_target, mailbox_holder.mailbox.name); - // The video's texture might be larger than the natural size because - // the encoder might have had to round up to the size of a macroblock. - // Make sure to only copy the natural size to avoid putting garbage - // into the bottom of the destination texture. - const gfx::Size& natural_size = video_frame->natural_size(); - destination_gl->CopySubTextureCHROMIUM( - intermediate_texture, 0, GL_TEXTURE_2D, texture, 0, 0, 0, 0, 0, - natural_size.width(), natural_size.height(), flip_y, premultiply_alpha, - false); + destination_gl->CopyTextureCHROMIUM(intermediate_texture, 0, GL_TEXTURE_2D, + texture, 0, internal_format, type, + flip_y, premultiply_alpha, false); destination_gl->DeleteTextures(1, &intermediate_texture); // Wait for destination context to consume mailbox before deleting it in @@ -858,7 +847,8 @@ bool SkCanvasVideoRenderer::CopyVideoFrameTexturesToGLTexture( video_frame->UpdateReleaseSyncToken(&client); } else { CopyVideoFrameSingleTextureToGLTexture(destination_gl, video_frame.get(), - texture, premultiply_alpha, flip_y); + texture, internal_format, type, + premultiply_alpha, flip_y); } return true; diff --git a/chromium/media/renderers/skcanvas_video_renderer.h b/chromium/media/renderers/skcanvas_video_renderer.h index 3831139c03c..dbbf2aed074 100644 --- a/chromium/media/renderers/skcanvas_video_renderer.h +++ b/chromium/media/renderers/skcanvas_video_renderer.h @@ -67,13 +67,12 @@ class MEDIA_EXPORT SkCanvasVideoRenderer { // Copy the contents of texture of |video_frame| to texture |texture|. // |level|, |internal_format|, |type| specify target texture |texture|. // The format of |video_frame| must be VideoFrame::NATIVE_TEXTURE. - // Assumes |texture| has already been allocated with the appropriate - // size and a compatible format, internal format and type; this is - // effectively a "TexSubImage" operation. static void CopyVideoFrameSingleTextureToGLTexture( gpu::gles2::GLES2Interface* gl, VideoFrame* video_frame, unsigned int texture, + unsigned int internal_format, + unsigned int type, bool premultiply_alpha, bool flip_y); @@ -82,15 +81,14 @@ class MEDIA_EXPORT SkCanvasVideoRenderer { // |level|, |internal_format|, |type| specify target texture |texture|. // The format of |video_frame| must be VideoFrame::NATIVE_TEXTURE. // |context_3d| has a GrContext that may be used during the copy. - // Assumes |texture| has already been allocated with the appropriate - // size and a compatible format, internal format and type; this is - // effectively a "TexSubImage" operation. // Returns true on success. bool CopyVideoFrameTexturesToGLTexture( const Context3D& context_3d, gpu::gles2::GLES2Interface* destination_gl, const scoped_refptr<VideoFrame>& video_frame, unsigned int texture, + unsigned int internal_format, + unsigned int type, bool premultiply_alpha, bool flip_y); diff --git a/chromium/net/BUILD.gn b/chromium/net/BUILD.gn index 12de0001bf9..af14d0fbd7d 100644 --- a/chromium/net/BUILD.gn +++ b/chromium/net/BUILD.gn @@ -2283,6 +2283,7 @@ bundle_data("test_support_bundle_data") { "data/ssl/certificates/spdy_pooling.pem", "data/ssl/certificates/start_after_expiry.pem", "data/ssl/certificates/subjectAltName_sanity_check.pem", + "data/ssl/certificates/subjectAltName_www_example_com.pem", "data/ssl/certificates/test_mail_google_com.pem", "data/ssl/certificates/thawte.single.pem", "data/ssl/certificates/tls_feature_extension.pem", diff --git a/chromium/net/base/registry_controlled_domains/effective_tld_names.dat b/chromium/net/base/registry_controlled_domains/effective_tld_names.dat index bba925debcd..75983559b78 100644 --- a/chromium/net/base/registry_controlled_domains/effective_tld_names.dat +++ b/chromium/net/base/registry_controlled_domains/effective_tld_names.dat @@ -6793,11 +6793,16 @@ net.zm org.zm sch.zm -// zw : https://en.wikipedia.org/wiki/.zw -*.zw +// zw : https://www.potraz.gov.zw/ +// Confirmed by registry <bmtengwa@potraz.gov.zw> 2017-01-25 +zw +ac.zw +co.zw +gov.zw +mil.zw +org.zw - -// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2016-11-29T01:06:51Z +// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2017-02-23T00:46:09Z // aaa : 2015-02-26 American Automobile Association, Inc. aaa @@ -7729,9 +7734,6 @@ dvag // dvr : 2016-05-26 Hughes Satellite Systems Corporation dvr -// dwg : 2015-07-23 Autodesk, Inc. -dwg - // earth : 2014-12-04 Interlink Co., Ltd. earth @@ -8299,9 +8301,6 @@ ieee // ifm : 2014-01-30 ifm electronic gmbh ifm -// iinet : 2014-07-03 Connect West Pty. Ltd. -iinet - // ikano : 2015-07-09 Ikano S.A. ikano @@ -8869,9 +8868,6 @@ mtr // mutual : 2015-04-02 Northwestern Mutual MU TLD Registry, LLC mutual -// mutuelle : 2015-06-18 Fédération Nationale de la Mutualité Française -mutuelle - // nab : 2015-08-20 National Australia Bank Limited nab @@ -9370,6 +9366,9 @@ room // rsvp : 2014-05-08 Charleston Road Registry Inc. rsvp +// rugby : 2016-12-15 World Rugby Strategic Developments Limited +rugby + // ruhr : 2013-10-02 regiodot GmbH & Co. KG ruhr @@ -9796,9 +9795,6 @@ theater // theatre : 2015-05-07 theatre -// theguardian : 2015-04-30 Guardian News and Media Limited -theguardian - // tiaa : 2015-07-23 Teachers Insurance and Annuity Association of America tiaa @@ -9946,7 +9942,7 @@ ventures // verisign : 2015-08-13 VeriSign, Inc. verisign -// versicherung : 2014-03-20 dotversicherung-registry GmbH +// versicherung : 2014-03-20 versicherung // vet : 2014-03-06 @@ -10171,9 +10167,6 @@ xin // xn--4gbrim : 2013-10-04 Suhub Electronic Establishment موقع -// xn--4gq48lf9j : 2015-07-31 Wal-Mart Stores, Inc. -一号店 - // xn--55qw42g : 2013-11-08 China Organizational Name Administration Center 公益 @@ -10234,7 +10227,7 @@ xin // xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD 삼성 -// xn--czr694b : 2014-01-16 Dot Trademark TLD Holding Company Limted +// xn--czr694b : 2014-01-16 Dot Trademark TLD Holding Company Limited 商标 // xn--czrs0t : 2013-12-19 Wild Island, LLC @@ -10291,7 +10284,7 @@ xin // xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry संगठन -// xn--imr513n : 2014-12-11 Dot Trademark TLD Holding Company Limted +// xn--imr513n : 2014-12-11 Dot Trademark TLD Holding Company Limited 餐厅 // xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) @@ -10600,6 +10593,11 @@ myasustor.com // Submitted by Andreas Weise <a.weise@avm.de> myfritz.net +// AW AdvisorWebsites.com Software Inc : https://advisorwebsites.com +// Submitted by James Kennedy <domains@advisorwebsites.com> +*.awdev.ca +*.advisor.ws + // backplane : https://www.backplane.io // Submitted by Anthony Voutas <anthony@backplane.io> backplaneapp.io @@ -10690,6 +10688,10 @@ xenapponazure.com // Submitted by Leon Rowland <leon@clearvox.nl> virtueeldomein.nl +// Cloud66 : https://www.cloud66.com/ +// Submitted by Khash Sajadi <khash@cloud66.com> +c66.me + // cloudControl : https://www.cloudcontrol.com/ // Submitted by Tobias Wilken <tw@cloudcontrol.com> cloudcontrolled.com @@ -10765,6 +10767,7 @@ cyon.site // Daplie, Inc : https://daplie.com // Submitted by AJ ONeal <aj@daplie.com> daplie.me +localhost.daplie.me // Dansk.net : http://www.dansk.net/ // Submitted by Anani Voule <digital@digital.co.dk> @@ -11173,8 +11176,10 @@ us.eu.org // Submitted by Michal Kralik <support@evennode.com> eu-1.evennode.com eu-2.evennode.com +eu-3.evennode.com us-1.evennode.com us-2.evennode.com +us-3.evennode.com // Facebook, Inc. // Submitted by Peter Ruibal <public-suffix@fb.com> @@ -11258,19 +11263,26 @@ vologda.su // Fastly Inc. : http://www.fastly.com/ // Submitted by Fastly Security <security@fastly.com> +fastlylb.net +map.fastlylb.net +freetls.fastly.net map.fastly.net a.prod.fastly.net global.prod.fastly.net a.ssl.fastly.net b.ssl.fastly.net global.ssl.fastly.net -fastlylb.net -map.fastlylb.net // Featherhead : https://featherhead.xyz/ // Submitted by Simon Menke <simon@featherhead.xyz> fhapp.xyz +// Fedora : https://fedoraproject.org/ +// submitted by Patrick Uiterwijk <puiterwijk@fedoraproject.org> +fedorainfracloud.org +fedorapeople.org +cloud.fedoraproject.org + // Firebase, Inc. // Submitted by Chris Raynor <chris@firebase.com> firebaseapp.com @@ -11434,6 +11446,10 @@ hepforge.org herokuapp.com herokussl.com +// Ici la Lune : http://www.icilalune.com/ +// Submitted by Simon Morvan <simon@icilalune.com> +moonscale.net + // iki.fi // Submitted by Hannu Aronsson <haa@iki.fi> iki.fi @@ -11472,6 +11488,10 @@ se.leg.br sp.leg.br to.leg.br +// IPiFony Systems, Inc. : https://www.ipifony.com/ +// Submitted by Matthew Hardeman <mhardeman@ipifony.com> +ipifony.net + // Joyent : https://www.joyent.com/ // Submitted by Brian Bennett <brian.bennett@joyent.com> *.triton.zone @@ -11624,6 +11644,10 @@ zapto.org // Submitted by Matthew Brown <mattbrown@nyc.mn> nyc.mn +// Octopodal Solutions, LLC. : https://ulterius.io/ +// Submitted by Andrew Sampson <andrew@ulterius.io> +cya.gg + // One Fold Media : http://www.onefoldmedia.com/ // Submitted by Eddie Jones <eddie@onefoldmedia.com> nid.io @@ -11791,6 +11815,10 @@ spacekit.io // Submitted by Lina He <info@stackspace.io> stackspace.space +// Storj Labs Inc. : https://storj.io/ +// Submitted by Philip Hutchins <hostmaster@storj.io> +storj.farm + // Synology, Inc. : https://www.synology.com/ // Submitted by Rony Weng <ronyweng@synology.com> diskstation.me @@ -11806,6 +11834,7 @@ familyds.org i234.me myds.me synology.me +vpnplus.to // TAIFUN Software AG : http://taifun-software.de // Submitted by Bjoern Henke <dev-server@taifun-software.de> @@ -11849,6 +11878,10 @@ syno-ds.de synology-diskstation.de synology-ds.de +// Uberspace : https://uberspace.de +// Submitted by Moritz Werner <mwerner@jonaspasche.com> +uber.space + // UDR Limited : http://www.udr.hk.com // Submitted by registry <hostmaster@udr.hk.com> hk.com @@ -11872,6 +11905,10 @@ remotewd.com // Submitted by Yuvi Panda <yuvipanda@wikimedia.org> wmflabs.org +// XS4ALL Internet bv: https://www.xs4all.nl/ +// Submitted by Daniel Mostertman <unixbeheer+publicsuffix@xs4all.net> +xs4all.space + // Yola : https://www.yola.com/ // Submitted by Stefano Rivera <stefano@yola.com> yolasite.com diff --git a/chromium/net/base/registry_controlled_domains/effective_tld_names.gperf b/chromium/net/base/registry_controlled_domains/effective_tld_names.gperf index 5d152382a64..ba49a41d4e3 100644 --- a/chromium/net/base/registry_controlled_domains/effective_tld_names.gperf +++ b/chromium/net/base/registry_controlled_domains/effective_tld_names.gperf @@ -93,6 +93,7 @@ ac.uk, 0 ac.vn, 0 ac.za, 0 ac.zm, 0 +ac.zw, 0 aca.pro, 0 academy, 0 academy.museum, 0 @@ -118,6 +119,7 @@ adult, 0 adult.ht, 0 adv.br, 0 adv.mz, 0 +advisor.ws, 6 adygeya.ru, 4 adygeya.su, 4 ae, 0 @@ -465,6 +467,7 @@ avocat.pro, 0 avoues.fr, 0 aw, 0 awaji.hyogo.jp, 0 +awdev.ca, 6 aws, 0 ax, 0 axa, 0 @@ -859,6 +862,7 @@ c.bg, 0 c.cdn77.org, 4 c.la, 4 c.se, 0 +c66.me, 4 ca, 0 ca.eu.org, 4 ca.it, 0 @@ -1123,6 +1127,7 @@ clinton.museum, 0 clock.museum, 0 clothing, 0 cloud, 0 +cloud.fedoraproject.org, 4 cloudapp.net, 4 cloudcontrolapp.com, 4 cloudcontrolled.com, 4 @@ -1217,6 +1222,7 @@ co.ve, 0 co.vi, 0 co.za, 0 co.zm, 0 +co.zw, 0 coach, 0 coal.museum, 0 coastaldefence.museum, 0 @@ -1462,6 +1468,7 @@ cw, 0 cx, 0 cy, 0 cy.eu.org, 4 +cya.gg, 4 cyber.museum, 0 cymru, 0 cymru.museum, 0 @@ -1642,7 +1649,6 @@ dvag, 0 dvr, 0 dvrcam.info, 4 dvrdns.org, 4 -dwg, 0 dy.fi, 4 dyn-ip24.de, 4 dyn-o-saur.com, 4 @@ -1932,6 +1938,7 @@ etnedal.no, 0 eu, 0 eu-1.evennode.com, 4 eu-2.evennode.com, 4 +eu-3.evennode.com, 4 eu.com, 4 eu.int, 0 eu.meteorapp.com, 4 @@ -1992,6 +1999,8 @@ fed.us, 0 federation.aero, 0 fedex, 0 fedje.no, 0 +fedorainfracloud.org, 4 +fedorapeople.org, 4 feedback, 0 fermo.it, 0 ferrara.it, 0 @@ -2125,6 +2134,7 @@ freebox-os.fr, 4 freeboxos.com, 4 freeboxos.fr, 4 freemasonry.museum, 0 +freetls.fastly.net, 4 frei.no, 0 freiburg.museum, 0 freight.aero, 0 @@ -2585,6 +2595,7 @@ gov.vn, 0 gov.ws, 0 gov.za, 0 gov.zm, 0 +gov.zw, 0 government.aero, 0 govt.nz, 0 gp, 0 @@ -3021,7 +3032,6 @@ iheya.okinawa.jp, 0 iida.nagano.jp, 0 iide.yamagata.jp, 0 iijima.nagano.jp, 0 -iinet, 0 iitate.fukushima.jp, 0 iiyama.nagano.jp, 0 iizuka.fukuoka.jp, 0 @@ -3169,6 +3179,7 @@ investments, 0 inzai.chiba.jp, 0 io, 0 ip6.arpa, 0 +ipifony.net, 4 ipiranga, 0 iq, 0 ir, 0 @@ -4055,6 +4066,7 @@ loabat.no, 0 loan, 0 loans, 0 localhistory.museum, 0 +localhost.daplie.me, 4 locker, 0 locus, 0 lodi.it, 0 @@ -4379,6 +4391,7 @@ mil.vc, 0 mil.ve, 0 mil.za, 0 mil.zm, 0 +mil.zw, 0 milan.it, 0 milano.it, 0 military.museum, 0 @@ -4530,6 +4543,7 @@ monza.it, 0 monzabrianza.it, 0 monzaebrianza.it, 0 monzaedellabrianza.it, 0 +moonscale.net, 4 mopar, 0 mordovia.ru, 4 mordovia.su, 4 @@ -4617,7 +4631,6 @@ music.museum, 0 mutsu.aomori.jp, 0 mutsuzawa.chiba.jp, 0 mutual, 0 -mutuelle, 0 mv, 0 mw, 0 mw.gov.pl, 0 @@ -5462,6 +5475,7 @@ org.vu, 0 org.ws, 0 org.za, 0 org.zm, 0 +org.zw, 0 organic, 0 orientexpress, 0 origins, 0 @@ -5984,6 +5998,7 @@ ru, 0 ru.com, 4 ru.eu.org, 4 ru.net, 4 +rugby, 0 ruhr, 0 run, 0 ruovat.no, 0 @@ -6630,6 +6645,7 @@ store.ro, 0 store.st, 0 store.ve, 0 storfjord.no, 0 +storj.farm, 4 stpetersburg.museum, 0 strand.no, 0 stranda.no, 0 @@ -6871,7 +6887,6 @@ thd, 0 theater, 0 theater.museum, 0 theatre, 0 -theguardian, 0 thruhere.net, 4 tiaa, 0 tickets, 0 @@ -7159,6 +7174,7 @@ u.se, 0 ua, 0 ubank, 0 ube.yamaguchi.jp, 0 +uber.space, 4 ubs, 0 uchihara.ibaraki.jp, 0 uchiko.ehime.jp, 0 @@ -7230,6 +7246,7 @@ uryu.hokkaido.jp, 0 us, 0 us-1.evennode.com, 4 us-2.evennode.com, 4 +us-3.evennode.com, 4 us-east-1.amazonaws.com, 4 us.com, 4 us.eu.org, 4 @@ -7404,6 +7421,7 @@ vote, 0 voting, 0 voto, 0 voyage, 0 +vpnplus.to, 4 vr.it, 0 vs.it, 0 vt.it, 0 @@ -7566,7 +7584,6 @@ xn--42c2d9a, 0 xn--45brj9c, 0 xn--45q11c, 0 xn--4gbrim, 0 -xn--4gq48lf9j, 0 xn--4it168d.jp, 0 xn--4it797k.jp, 0 xn--4pvxs.jp, 0 @@ -7954,6 +7971,7 @@ xn--zf0ao64a.tw, 0 xn--zf0avx.hk, 0 xn--zfr164b, 0 xperia, 0 +xs4all.space, 4 xxx, 0 xyz, 0 xz.cn, 0 @@ -8120,5 +8138,5 @@ zp.ua, 0 zt.ua, 0 zuerich, 0 zushi.kanagawa.jp, 0 -zw, 2 +zw, 0 %% diff --git a/chromium/net/cert/x509_certificate.h b/chromium/net/cert/x509_certificate.h index 2c6fb4d071b..e11f1042b12 100644 --- a/chromium/net/cert/x509_certificate.h +++ b/chromium/net/cert/x509_certificate.h @@ -188,10 +188,13 @@ class NET_EXPORT X509Certificate const base::Time& valid_start() const { return valid_start_; } const base::Time& valid_expiry() const { return valid_expiry_; } - // Gets the DNS names in the certificate. Pursuant to RFC 2818, Section 3.1 + // Gets the DNS names in the certificate. Pursuant to RFC 2818, Section 3.1 // Server Identity, if the certificate has a subjectAltName extension of // type dNSName, this method gets the DNS names in that extension. // Otherwise, it gets the common name in the subject field. + // + // Note: Chrome has deprecated fallback to the subject field, see + // https://crbug.com/308330; prefer GetSubjectAltName() instead. void GetDNSNames(std::vector<std::string>* dns_names) const; // Gets the subjectAltName extension field from the certificate, if any. diff --git a/chromium/net/data/ssl/certificates/subjectAltName_www_example_com.pem b/chromium/net/data/ssl/certificates/subjectAltName_www_example_com.pem new file mode 100644 index 00000000000..88a338eee20 --- /dev/null +++ b/chromium/net/data/ssl/certificates/subjectAltName_www_example_com.pem @@ -0,0 +1,75 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 15837232328995864193 (0xdbc926e4db217e81) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=localhost + Validity + Not Before: Mar 28 22:42:07 2017 GMT + Not After : Mar 26 22:42:07 2027 GMT + Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=localhost + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:b5:12:3c:e3:76:25:c4:e5:9f:ac:69:3a:dd:40: + 78:95:ef:1e:f2:b6:c2:74:14:e7:ba:cc:f3:a6:46: + 6c:51:1f:2e:4e:9c:99:7a:82:1f:43:bc:28:8a:74: + 8e:52:73:59:24:ac:0a:71:c9:b5:30:a9:d3:85:f9: + 8c:76:d0:19:43:fe:cb:c0:d6:4b:9e:9b:76:63:84: + ae:99:4d:14:a2:be:ae:81:5d:05:22:b9:46:39:66: + 4e:42:10:57:64:26:27:f2:88:7f:55:10:38:83:7a: + dd:6c:09:ae:f1:09:33:04:84:ab:48:53:1c:9c:42: + b4:f7:ee:c5:21:7a:65:56:91:64:99:9b:f4:2c:22: + 50:dc:36:35:ac:04:22:eb:5c:2d:4c:6c:4b:16:70: + f7:13:36:f9:32:ec:6d:e8:f7:2e:f2:b9:b8:0c:e2: + 99:de:ed:61:7d:66:17:33:67:0e:6e:87:5d:05:65: + e1:98:46:2c:e7:8e:6d:a7:20:ab:87:5b:f3:32:55: + cb:2d:df:76:9b:cf:06:71:5c:06:77:3b:20:49:6b: + 47:5e:6e:ae:42:99:8b:8f:9e:c4:ba:4c:50:ec:14: + a1:43:8f:24:e9:9a:c8:ca:ec:b3:e2:26:d4:a5:ba: + c3:f8:90:b1:03:2a:05:72:a4:3f:17:bd:9c:af:68: + e4:17 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Alternative Name: + DNS:www.example.com + Signature Algorithm: sha256WithRSAEncryption + 38:41:86:d5:01:6b:00:3d:61:1e:ad:f1:82:1d:01:fc:c1:98: + 8e:d7:ea:46:2d:e3:7c:22:3c:ce:f2:64:f0:73:0c:e5:ea:21: + 3a:8f:63:e1:c0:27:3d:84:ed:0f:aa:0e:d3:ca:76:67:ba:b9: + f4:da:fc:d5:ec:07:f4:97:08:2c:55:e4:be:5f:0c:e7:c9:7f: + be:81:b5:76:d2:47:6b:be:01:82:8c:75:27:df:78:99:62:55: + 74:91:d9:c7:37:a3:62:1f:36:0b:ed:9f:54:01:be:87:9a:3d: + d5:90:1e:98:13:29:cd:23:9b:d4:a8:d0:c0:18:04:d5:05:55: + 97:8d:6b:89:14:0a:1b:b4:2b:bd:7d:05:68:87:72:64:9e:b9: + 66:a2:89:21:2a:ae:a1:b3:ef:22:0d:e1:80:46:52:11:20:3a: + a8:7e:18:1e:e1:19:2d:f5:de:cc:b9:f2:ff:6a:88:db:c1:31: + dc:34:25:e2:c0:4c:a7:6e:28:6e:b1:10:7b:04:ed:a4:82:3a: + 81:55:44:1a:87:25:14:69:de:2d:c0:7d:3b:e3:21:c4:21:e5: + ca:f6:7c:11:12:d8:7f:c1:b7:f5:45:ca:6b:e5:41:91:5d:d8: + db:64:48:01:64:a5:df:85:51:4b:c4:ed:27:e3:2f:b4:71:f4: + c6:a1:a2:ad +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIJANvJJuTbIX6BMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV +BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW +aWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAlsb2NhbGhvc3QwHhcNMTcw +MzI4MjI0MjA3WhcNMjcwMzI2MjI0MjA3WjBgMQswCQYDVQQGEwJVUzETMBEGA1UE +CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwH +VGVzdCBDQTESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAtRI843YlxOWfrGk63UB4le8e8rbCdBTnuszzpkZsUR8uTpyZ +eoIfQ7woinSOUnNZJKwKccm1MKnThfmMdtAZQ/7LwNZLnpt2Y4SumU0Uor6ugV0F +IrlGOWZOQhBXZCYn8oh/VRA4g3rdbAmu8QkzBISrSFMcnEK09+7FIXplVpFkmZv0 +LCJQ3DY1rAQi61wtTGxLFnD3Ezb5Muxt6Pcu8rm4DOKZ3u1hfWYXM2cOboddBWXh +mEYs545tpyCrh1vzMlXLLd92m88GcVwGdzsgSWtHXm6uQpmLj57EukxQ7BShQ48k +6ZrIyuyz4ibUpbrD+JCxAyoFcqQ/F72cr2jkFwIDAQABoy8wLTAPBgNVHRMBAf8E +BTADAQH/MBoGA1UdEQQTMBGCD3d3dy5leGFtcGxlLmNvbTANBgkqhkiG9w0BAQsF +AAOCAQEAOEGG1QFrAD1hHq3xgh0B/MGYjtfqRi3jfCI8zvJk8HMM5eohOo9j4cAn +PYTtD6oO08p2Z7q59Nr81ewH9JcILFXkvl8M58l/voG1dtJHa74Bgox1J994mWJV +dJHZxzejYh82C+2fVAG+h5o91ZAemBMpzSOb1KjQwBgE1QVVl41riRQKG7QrvX0F +aIdyZJ65ZqKJISquobPvIg3hgEZSESA6qH4YHuEZLfXezLny/2qI28Ex3DQl4sBM +p24obrEQewTtpII6gVVEGoclFGneLcB9O+MhxCHlyvZ8ERLYf8G39UXKa+VBkV3Y +22RIAWSl34VRS8TtJ+MvtHH0xqGirQ== +-----END CERTIFICATE----- diff --git a/chromium/net/data/ssl/scripts/ee.cnf b/chromium/net/data/ssl/scripts/ee.cnf index 7d91d75cf63..3d42df1b65b 100644 --- a/chromium/net/data/ssl/scripts/ee.cnf +++ b/chromium/net/data/ssl/scripts/ee.cnf @@ -81,6 +81,13 @@ email = test@test.example otherName = 1.2.3.4;UTF8:ignore me dirName = more_san_sanity +[req_san_example] +basicConstraints = critical, CA:true +subjectAltName = @san_example + +[san_example] +DNS = www.example.com + [req_spdy_pooling] subjectAltName = @spdy_pooling diff --git a/chromium/net/data/ssl/scripts/generate-test-certs.sh b/chromium/net/data/ssl/scripts/generate-test-certs.sh index f5395e4cf4d..abb9bd1a430 100755 --- a/chromium/net/data/ssl/scripts/generate-test-certs.sh +++ b/chromium/net/data/ssl/scripts/generate-test-certs.sh @@ -201,6 +201,11 @@ try openssl req -x509 -days 3650 -extensions req_san_sanity \ -config ../scripts/ee.cnf -newkey rsa:2048 -text \ -out ../certificates/subjectAltName_sanity_check.pem +## SubjectAltName containing www.example.com +try openssl req -x509 -days 3650 -extensions req_san_example \ + -config ../scripts/ee.cnf -newkey rsa:2048 -text \ + -out ../certificates/subjectAltName_www_example_com.pem + ## Punycode handling SUBJECT_NAME="req_punycode_dn" \ try openssl req -x509 -days 3650 -extensions req_punycode \ diff --git a/chromium/net/test/test_certificate_data.h b/chromium/net/test/test_certificate_data.h index c8fa950786a..fbeaca748fa 100644 --- a/chromium/net/test/test_certificate_data.h +++ b/chromium/net/test/test_certificate_data.h @@ -33,7 +33,8 @@ static const char kNistSPKIHash[] = #define VARIABLE_IS_NOT_USED #endif -// Google's cert. +// Google's 2009 cert. Lacks a SubjectAltName, but contains www.google.com in +// the Subject CN field. unsigned char VARIABLE_IS_NOT_USED google_der[] = { 0x30, 0x82, 0x03, 0x21, 0x30, 0x82, 0x02, 0x8a, 0xa0, 0x03, 0x02, 0x01, @@ -106,7 +107,8 @@ unsigned char VARIABLE_IS_NOT_USED google_der[] = { 0xdf }; -// webkit.org's cert. +// webkit.org's 2008 cert. Contains a SubjectAltName field with *.webkit.org and +// webkit.org. The Subject CN field contains *.webkit.org. unsigned char VARIABLE_IS_NOT_USED webkit_der[] = { 0x30, 0x82, 0x05, 0x0d, 0x30, 0x82, 0x03, 0xf5, 0xa0, 0x03, 0x02, 0x01, @@ -220,7 +222,9 @@ unsigned char VARIABLE_IS_NOT_USED webkit_der[] = { 0x8a }; -// thawte.com's cert (it's EV-licious!). +// thawte.com 2008 Extended Validation cert. Lacks a SubjectAltName, but +// contains www.thawte.com in the Subject CN field. + unsigned char VARIABLE_IS_NOT_USED thawte_der[] = { 0x30, 0x82, 0x04, 0xa5, 0x30, 0x82, 0x03, 0x8d, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x17, 0x76, 0x05, 0x88, 0x95, 0x58, 0xee, 0xbb, 0x00, diff --git a/chromium/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc b/chromium/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc index fc0ecf2e326..404168ac9f2 100644 --- a/chromium/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc +++ b/chromium/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc @@ -2192,19 +2192,6 @@ SANDBOX_DEATH_TEST( BPF_ASSERT(!sandbox.StartSandbox(SandboxBPF::SeccompLevel::SINGLE_THREADED)); } -// http://crbug.com/407357 -#if !defined(THREAD_SANITIZER) -SANDBOX_DEATH_TEST( - SandboxBPF, - StartSingleThreadedAsMultiThreaded, - DEATH_MESSAGE( - "Cannot start sandbox; process may be single-threaded when " - "reported as not")) { - SandboxBPF sandbox(new AllowAllPolicy()); - BPF_ASSERT(!sandbox.StartSandbox(SandboxBPF::SeccompLevel::MULTI_THREADED)); -} -#endif // !defined(THREAD_SANITIZER) - // A stub handler for the UnsafeTrap. Never called. intptr_t NoOpHandler(const struct arch_seccomp_data& args, void*) { return -1; diff --git a/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf.cc b/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf.cc index 4d8d4367130..3ab366a8e38 100644 --- a/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf.cc +++ b/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf.cc @@ -38,10 +38,6 @@ namespace { bool IsRunningOnValgrind() { return RUNNING_ON_VALGRIND; } -bool IsSingleThreaded(int proc_fd) { - return ThreadHelpers::IsSingleThreaded(proc_fd); -} - // Check if the kernel supports seccomp-filter (a.k.a. seccomp mode 2) via // prctl(). bool KernelSupportsSeccompBPF() { @@ -168,11 +164,6 @@ bool SandboxBPF::StartSandbox(SeccompLevel seccomp_level) { // process is single threaded. ThreadHelpers::AssertSingleThreaded(proc_fd_.get()); } else if (seccomp_level == SeccompLevel::MULTI_THREADED) { - if (IsSingleThreaded(proc_fd_.get())) { - SANDBOX_DIE("Cannot start sandbox; " - "process may be single-threaded when reported as not"); - return false; - } if (!supports_tsync) { SANDBOX_DIE("Cannot start sandbox; kernel does not support synchronizing " "filters for a threadgroup"); diff --git a/chromium/services/ui/gpu/interfaces/gpu_service.mojom b/chromium/services/ui/gpu/interfaces/gpu_service.mojom index 56080ad748c..6f420bd62b4 100644 --- a/chromium/services/ui/gpu/interfaces/gpu_service.mojom +++ b/chromium/services/ui/gpu/interfaces/gpu_service.mojom @@ -18,7 +18,7 @@ interface GpuService { EstablishGpuChannel(int32 client_id, uint64 client_tracing_id, bool is_gpu_host) - => (handle<message_pipe>? channel_handle); + => (handle<message_pipe> channel_handle); [Sync] CreateGpuMemoryBuffer(gfx.mojom.GpuMemoryBufferId id, diff --git a/chromium/services/ui/surfaces/display_output_surface_ozone.cc b/chromium/services/ui/surfaces/display_output_surface_ozone.cc index e63a2e88941..da565dd3db6 100644 --- a/chromium/services/ui/surfaces/display_output_surface_ozone.cc +++ b/chromium/services/ui/surfaces/display_output_surface_ozone.cc @@ -83,8 +83,14 @@ void DisplayOutputSurfaceOzone::SwapBuffers(cc::OutputSurfaceFrame frame) { DCHECK(reshape_size_ == frame.size); swap_size_ = reshape_size_; - buffer_queue_->SwapBuffers(frame.sub_buffer_rect ? *frame.sub_buffer_rect - : gfx::Rect(swap_size_)); + gfx::Rect damage_rect = + frame.sub_buffer_rect ? *frame.sub_buffer_rect : gfx::Rect(swap_size_); + // Use previous buffer when damage rect is empty. This avoids unnecessary + // partial swap work and makes it possible to support empty swaps on devices + // where partial swaps are disabled. + if (!damage_rect.IsEmpty()) + buffer_queue_->SwapBuffers(damage_rect); + DisplayOutputSurface::SwapBuffers(std::move(frame)); } @@ -98,7 +104,7 @@ bool DisplayOutputSurfaceOzone::IsDisplayedAsOverlayPlane() const { } unsigned DisplayOutputSurfaceOzone::GetOverlayTextureId() const { - return buffer_queue_->current_texture_id(); + return buffer_queue_->GetCurrentTextureId(); } void DisplayOutputSurfaceOzone::DidReceiveSwapBuffersAck( diff --git a/chromium/skia/ext/skia_commit_hash.h b/chromium/skia/ext/skia_commit_hash.h index f29b9cb28c6..b7a2d7100a3 100644 --- a/chromium/skia/ext/skia_commit_hash.h +++ b/chromium/skia/ext/skia_commit_hash.h @@ -3,6 +3,6 @@ #ifndef SKIA_EXT_SKIA_COMMIT_HASH_H_ #define SKIA_EXT_SKIA_COMMIT_HASH_H_ -#define SKIA_COMMIT_HASH "954a6986d5f0136775ea469c3522dda3251af4e9" +#define SKIA_COMMIT_HASH "8d57fc379a72d11f7ffbd2e4c78397ae71dba720" #endif // SKIA_EXT_SKIA_COMMIT_HASH_H_ diff --git a/chromium/testing/variations/fieldtrial_testing_config.json b/chromium/testing/variations/fieldtrial_testing_config.json index 6df5880b82f..74e9b53b74a 100644 --- a/chromium/testing/variations/fieldtrial_testing_config.json +++ b/chromium/testing/variations/fieldtrial_testing_config.json @@ -52,6 +52,21 @@ ] } ], + "AppleScriptExecuteJavaScript": [ + { + "platforms": [ + "mac" + ], + "experiments": [ + { + "name": "Disabled", + "disable_features": [ + "AppleScriptExecuteJavaScript" + ] + } + ] + } + ], "AsyncDNS": [ { "platforms": [ diff --git a/chromium/third_party/WebKit/Source/core/css/CSSMatrix.cpp b/chromium/third_party/WebKit/Source/core/css/CSSMatrix.cpp index 00e937709f5..afd86dfca56 100644 --- a/chromium/third_party/WebKit/Source/core/css/CSSMatrix.cpp +++ b/chromium/third_party/WebKit/Source/core/css/CSSMatrix.cpp @@ -46,6 +46,10 @@ CSSMatrix* CSSMatrix::create(ExecutionContext* executionContext, const String& s, ExceptionState& exceptionState) { UseCounter::count(executionContext, UseCounter::WebKitCSSMatrix); + if (!s.isEmpty()) { + UseCounter::count(executionContext, + UseCounter::WebkitCSSMatrixConstructFromString); + } return new CSSMatrix(s, exceptionState); } diff --git a/chromium/third_party/WebKit/Source/core/css/WebKitCSSMatrix.idl b/chromium/third_party/WebKit/Source/core/css/WebKitCSSMatrix.idl index 361076611fc..d9227cf0e59 100644 --- a/chromium/third_party/WebKit/Source/core/css/WebKitCSSMatrix.idl +++ b/chromium/third_party/WebKit/Source/core/css/WebKitCSSMatrix.idl @@ -56,7 +56,7 @@ attribute unrestricted double m43; attribute unrestricted double m44; - [RaisesException] void setMatrixValue([Default=Undefined] optional DOMString string); + [RaisesException, MeasureAs=WebkitCSSMatrixSetMatrixValue] void setMatrixValue([Default=Undefined] optional DOMString string); // Multiply this matrix by secondMatrix, on the right (result = this * secondMatrix) [LegacyInterfaceTypeChecking] WebKitCSSMatrix multiply([Default=Undefined] optional WebKitCSSMatrix secondMatrix); diff --git a/chromium/third_party/WebKit/Source/core/dom/Document.cpp b/chromium/third_party/WebKit/Source/core/dom/Document.cpp index b2f7a238285..1d3d38d7065 100644 --- a/chromium/third_party/WebKit/Source/core/dom/Document.cpp +++ b/chromium/third_party/WebKit/Source/core/dom/Document.cpp @@ -6626,21 +6626,13 @@ void Document::recordDeferredLoadReason(WouldLoadReason reason) { } DEFINE_TRACE_WRAPPERS(Document) { + // m_nodeLists are traced in their corresponding NodeListsNodeData, keeping + // them only alive for live nodes. Otherwise we would keep lists of dead + // nodes alive that have not yet been invalidated. visitor->traceWrappers(m_importsController); visitor->traceWrappers(m_implementation); visitor->traceWrappers(m_styleSheetList); visitor->traceWrappers(m_styleEngine); - for (int i = 0; i < numNodeListInvalidationTypes; ++i) { - for (auto list : m_nodeLists[i]) { - if (isHTMLCollectionType(list->type())) { - visitor->traceWrappersWithManualWriteBarrier( - static_cast<const HTMLCollection*>(list.get())); - } else { - visitor->traceWrappersWithManualWriteBarrier( - static_cast<const LiveNodeList*>(list.get())); - } - } - } // Cannot trace in Supplementable<Document> as it is part of platform/ and // thus cannot refer to ScriptWrappableVisitor. visitor->traceWrappers( diff --git a/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp b/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp index 44b990ed159..582eba68122 100644 --- a/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp +++ b/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp @@ -30,6 +30,8 @@ #include "core/dom/NodeListsNodeData.h" +#include "core/dom/LiveNodeList.h" + namespace blink { void NodeListsNodeData::invalidateCaches(const QualifiedName* attrName) { @@ -51,6 +53,18 @@ DEFINE_TRACE(NodeListsNodeData) { DEFINE_TRACE_WRAPPERS(NodeListsNodeData) { visitor->traceWrappersWithManualWriteBarrier(m_childNodeList); + for (const auto list : m_atomicNameCaches.values()) { + if (isHTMLCollectionType(list->type())) { + visitor->traceWrappersWithManualWriteBarrier( + static_cast<const HTMLCollection*>(list.get())); + } else { + visitor->traceWrappersWithManualWriteBarrier( + static_cast<const LiveNodeList*>(list.get())); + } + } + for (const auto list : m_tagCollectionCacheNS.values()) { + visitor->traceWrappersWithManualWriteBarrier(list.get()); + } } } // namespace blink diff --git a/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.h b/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.h index 85c5180aa87..a7a5eb0ae01 100644 --- a/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.h +++ b/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.h @@ -96,6 +96,7 @@ class NodeListsNodeData final : public GarbageCollected<NodeListsNodeData> { } T* list = T::create(node, collectionType, name); + ScriptWrappableVisitor::writeBarrier(this, list); result.storedValue->value = list; return list; } @@ -111,6 +112,7 @@ class NodeListsNodeData final : public GarbageCollected<NodeListsNodeData> { T* list = T::create(node, collectionType); result.storedValue->value = list; + ScriptWrappableVisitor::writeBarrier(this, list); return list; } @@ -132,6 +134,7 @@ class NodeListsNodeData final : public GarbageCollected<NodeListsNodeData> { TagCollection* list = TagCollection::create(node, namespaceURI, localName); result.storedValue->value = list; + ScriptWrappableVisitor::writeBarrier(this, list); return list; } diff --git a/chromium/third_party/WebKit/Source/core/dom/Range.cpp b/chromium/third_party/WebKit/Source/core/dom/Range.cpp index 6dcbf0c142f..4611c749cc8 100644 --- a/chromium/third_party/WebKit/Source/core/dom/Range.cpp +++ b/chromium/third_party/WebKit/Source/core/dom/Range.cpp @@ -43,6 +43,7 @@ #include "core/editing/iterators/TextIterator.h" #include "core/editing/serializers/Serialization.h" #include "core/events/ScopedEventQueue.h" +#include "core/frame/Settings.h" #include "core/html/HTMLBodyElement.h" #include "core/html/HTMLElement.h" #include "core/layout/LayoutObject.h" @@ -77,8 +78,13 @@ class RangeUpdateScope { DCHECK_GE(s_scopeCount, 1); if (--s_scopeCount > 0) return; - m_range->removeFromSelectionIfInDifferentRoot(*m_oldDocument); - m_range->updateSelectionIfAddedToSelection(); + Settings* settings = + m_oldDocument->frame() ? m_oldDocument->frame()->settings() : nullptr; + if (!settings || + !settings->getDoNotUpdateSelectionOnMutatingSelectionRange()) { + m_range->removeFromSelectionIfInDifferentRoot(*m_oldDocument); + m_range->updateSelectionIfAddedToSelection(); + } #if DCHECK_IS_ON() s_range = nullptr; #endif diff --git a/chromium/third_party/WebKit/Source/core/frame/Settings.json5 b/chromium/third_party/WebKit/Source/core/frame/Settings.json5 index c32d7ef1cac..ce11393c072 100644 --- a/chromium/third_party/WebKit/Source/core/frame/Settings.json5 +++ b/chromium/third_party/WebKit/Source/core/frame/Settings.json5 @@ -928,5 +928,12 @@ initial: true, invalidate: "MediaControls", }, + + // Whether we should not update selection attributes when mutating selection range. + // TODO(changwan): remove this flag when we no longer support Android M. + { + name: "doNotUpdateSelectionOnMutatingSelectionRange", + initial: false, + }, ], } diff --git a/chromium/third_party/WebKit/Source/core/frame/UseCounter.h b/chromium/third_party/WebKit/Source/core/frame/UseCounter.h index 398b441cb58..acea33fa4dd 100644 --- a/chromium/third_party/WebKit/Source/core/frame/UseCounter.h +++ b/chromium/third_party/WebKit/Source/core/frame/UseCounter.h @@ -1494,6 +1494,53 @@ class CORE_EXPORT UseCounter { VRPoseLinearAcceleration = 1864, VRPoseAngularVelocity = 1865, VRPoseAngularAcceleration = 1866, + CSSOverflowPaged = 1867, + ChildSrcAllowedWorkerThatScriptSrcBlocked = 1868, + HTMLTableElementPresentationAttributeBackground = 1869, + V8Navigator_GetInstalledRelatedApps_Method = 1870, + NamedAccessOnWindow_ChildBrowsingContext = 1871, + NamedAccessOnWindow_ChildBrowsingContext_CrossOriginNameMismatch = 1872, + V0CustomElementsRegisterHTMLCustomTag = 1873, + V0CustomElementsRegisterHTMLTypeExtension = 1874, + V0CustomElementsRegisterSVGElement = 1875, + V0CustomElementsRegisterEmbedderElement = 1876, + V0CustomElementsCreateCustomTagElement = 1877, + V0CustomElementsCreateTypeExtensionElement = 1878, + V0CustomElementsConstruct = 1879, + V8IDBObserver_Observe_Method = 1880, + V8IDBObserver_Unobserve_Method = 1881, + WebBluetoothRemoteCharacteristicGetDescriptor = 1882, + WebBluetoothRemoteCharacteristicGetDescriptors = 1883, + WebBluetoothRemoteCharacteristicReadValue = 1884, + WebBluetoothRemoteCharacteristicWriteValue = 1885, + WebBluetoothRemoteCharacteristicStartNotifications = 1886, + WebBluetoothRemoteCharacteristicStopNotifications = 1887, + WebBluetoothRemoteDescriptorReadValue = 1888, + WebBluetoothRemoteDescriptorWriteValue = 1889, + WebBluetoothRemoteServerConnect = 1890, + WebBluetoothRemoteServerDisconnect = 1891, + WebBluetoothRemoteServerGetPrimaryService = 1892, + WebBluetoothRemoteServerGetPrimaryServices = 1893, + WebBluetoothRemoteServiceGetCharacteristic = 1894, + WebBluetoothRemoteServiceGetCharacteristics = 1895, + HTMLContentElement = 1896, + HTMLShadowElement = 1897, + HTMLSlotElement = 1898, + AccelerometerConstructor = 1899, + AbsoluteOrientationSensorConstructor = 1900, + AmbientLightSensorConstructor = 1901, + GenericSensorOnActivate = 1902, + GenericSensorOnChange = 1903, + GenericSensorOnError = 1904, + GenericSensorActivated = 1905, + GyroscopeConstructor = 1906, + MagnetometerConstructor = 1907, + OrientationSensorPopulateMatrix = 1908, + WindowOpenWithInvalidURL = 1909, + CrossOriginMainFrameNulledNameAccessed = 1910, + MenuItemElementIconAttribute = 1911, + WebkitCSSMatrixSetMatrixValue = 1912, + WebkitCSSMatrixConstructFromString = 1913, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots. diff --git a/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp b/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp index af78208009f..d4dad0839ce 100644 --- a/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp +++ b/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp @@ -310,13 +310,17 @@ void HTMLVideoElement::paintCurrentFrame(PaintCanvas* canvas, bool HTMLVideoElement::copyVideoTextureToPlatformTexture( gpu::gles2::GLES2Interface* gl, GLuint texture, + GLenum internalFormat, + GLenum type, bool premultiplyAlpha, bool flipY) { if (!webMediaPlayer()) return false; + DCHECK(Extensions3DUtil::canUseCopyTextureCHROMIUM(GL_TEXTURE_2D, + internalFormat, type, 0)); return webMediaPlayer()->copyVideoTextureToPlatformTexture( - gl, texture, premultiplyAlpha, flipY); + gl, texture, internalFormat, type, premultiplyAlpha, flipY); } bool HTMLVideoElement::texImageImpl( diff --git a/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.h b/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.h index 385cc3a62fc..8e3b11a7630 100644 --- a/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.h +++ b/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.h @@ -75,9 +75,10 @@ class CORE_EXPORT HTMLVideoElement final : public HTMLMediaElement, void paintCurrentFrame(PaintCanvas*, const IntRect&, const PaintFlags*) const; // Used by WebGL to do GPU-GPU textures copy if possible. - // The caller is responsible for allocating the destination texture. bool copyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface*, GLuint texture, + GLenum internalFormat, + GLenum type, bool premultiplyAlpha, bool flipY); diff --git a/chromium/third_party/WebKit/Source/core/input/EventHandler.cpp b/chromium/third_party/WebKit/Source/core/input/EventHandler.cpp index 14fa616ebe3..68cd78a2ba1 100644 --- a/chromium/third_party/WebKit/Source/core/input/EventHandler.cpp +++ b/chromium/third_party/WebKit/Source/core/input/EventHandler.cpp @@ -949,6 +949,9 @@ WebInputEventResult EventHandler::handleMouseReleaseEvent( HitTestRequest request(hitType); MouseEventWithHitTestResults mev = EventHandlingUtil::performMouseEventHitTest(m_frame, request, mouseEvent); + Node* releaseNode = (mev.innerNode() && mev.innerNode()->isTextNode()) + ? FlatTreeTraversal::parent(*mev.innerNode()) + : mev.innerNode(); LocalFrame* subframe = m_capturingMouseEventsNode.get() ? subframeForTargetNode(m_capturingMouseEventsNode.get()) @@ -981,7 +984,7 @@ WebInputEventResult EventHandler::handleMouseReleaseEvent( mev.event(), Vector<WebMouseEvent>()); WebInputEventResult clickEventResult = - m_mouseEventManager->dispatchMouseClickIfNeeded(mev); + m_mouseEventManager->dispatchMouseClickIfNeeded(mev, releaseNode); m_scrollManager->clearResizeScrollableArea(false); @@ -1690,8 +1693,9 @@ GestureEventWithHitTestResults EventHandler::hitTestResultForGestureEvent( if (!hitFrame) hitFrame = m_frame; hitTestResult = EventHandlingUtil::hitTestResultInFrame( - hitFrame, hitFrame->view()->rootFrameToContents( - flooredIntPoint(adjustedEvent.positionInRootFrame())), + hitFrame, + hitFrame->view()->rootFrameToContents( + flooredIntPoint(adjustedEvent.positionInRootFrame())), (hitType | HitTestRequest::ReadOnly) & ~HitTestRequest::ListBased); } diff --git a/chromium/third_party/WebKit/Source/core/input/MouseEventManager.cpp b/chromium/third_party/WebKit/Source/core/input/MouseEventManager.cpp index 8f40ad03be6..70ebeac64b5 100644 --- a/chromium/third_party/WebKit/Source/core/input/MouseEventManager.cpp +++ b/chromium/third_party/WebKit/Source/core/input/MouseEventManager.cpp @@ -230,7 +230,8 @@ WebInputEventResult MouseEventManager::setMousePositionAndDispatchMouseEvent( } WebInputEventResult MouseEventManager::dispatchMouseClickIfNeeded( - const MouseEventWithHitTestResults& mev) { + const MouseEventWithHitTestResults& mev, + Node* releaseNode) { // We only prevent click event when the click may cause contextmenu to popup. // However, we always send auxclick. bool contextMenuEvent = @@ -247,23 +248,22 @@ WebInputEventResult MouseEventManager::dispatchMouseClickIfNeeded( WebInputEventResult clickEventResult = WebInputEventResult::NotHandled; const bool shouldDispatchClickEvent = - m_clickCount > 0 && !contextMenuEvent && mev.innerNode() && m_clickNode && - mev.innerNode()->canParticipateInFlatTree() && + m_clickCount > 0 && !contextMenuEvent && releaseNode && m_clickNode && + releaseNode->canParticipateInFlatTree() && m_clickNode->canParticipateInFlatTree() && !(m_frame->eventHandler().selectionController().hasExtendedSelection() && isLinkSelection(mev)); if (shouldDispatchClickEvent) { Node* clickTargetNode = nullptr; - // Updates distribution because a 'mouseup' event listener can make the - // tree dirty at dispatchMouseEvent() invocation above. - // Unless distribution is updated, commonAncestor would hit ASSERT. - if (m_clickNode == mev.innerNode()) { + if (m_clickNode == releaseNode) { clickTargetNode = m_clickNode; - clickTargetNode->updateDistribution(); } else if (m_clickNode->document() == mev.innerNode()->document()) { + // Updates distribution because a 'mouseup' event listener can make the + // tree dirty at dispatchMouseEvent() invocation above. + // Unless distribution is updated, commonAncestor would hit ASSERT. m_clickNode->updateDistribution(); mev.innerNode()->updateDistribution(); - clickTargetNode = mev.innerNode()->commonAncestor( + clickTargetNode = releaseNode->commonAncestor( *m_clickNode, EventHandlingUtil::parentForClickEvent); } if (clickTargetNode) { diff --git a/chromium/third_party/WebKit/Source/core/input/MouseEventManager.h b/chromium/third_party/WebKit/Source/core/input/MouseEventManager.h index f144769f7c8..fb49ba92e0d 100644 --- a/chromium/third_party/WebKit/Source/core/input/MouseEventManager.h +++ b/chromium/third_party/WebKit/Source/core/input/MouseEventManager.h @@ -57,7 +57,8 @@ class CORE_EXPORT MouseEventManager final const WebMouseEvent&); WebInputEventResult dispatchMouseClickIfNeeded( - const MouseEventWithHitTestResults&); + const MouseEventWithHitTestResults&, + Node* releaseNode); WebInputEventResult dispatchDragSrcEvent(const AtomicString& eventType, const WebMouseEvent&); diff --git a/chromium/third_party/WebKit/Source/core/layout/LayoutText.cpp b/chromium/third_party/WebKit/Source/core/layout/LayoutText.cpp index 045f3370d9a..f7f610dbe4a 100644 --- a/chromium/third_party/WebKit/Source/core/layout/LayoutText.cpp +++ b/chromium/third_party/WebKit/Source/core/layout/LayoutText.cpp @@ -1919,6 +1919,24 @@ LayoutRect LayoutText::visualOverflowRect() const { LayoutUnit logicalHeight = lastTextBox()->logicalBottomVisualOverflow() - logicalTop; + // Inflate visual overflow if we have adjusted ascent/descent causing the + // painted glyphs to overflow the layout geometries based on the adjusted + // ascent/descent. + unsigned inflation_for_ascent = 0; + unsigned inflation_for_descent = 0; + const auto* font_data = + styleRef(firstTextBox()->isFirstLineStyle()).font().primaryFont(); + if (font_data) + inflation_for_ascent = font_data->VisualOverflowInflationForAscent(); + if (lastTextBox()->isFirstLineStyle() != firstTextBox()->isFirstLineStyle()) { + font_data = + styleRef(lastTextBox()->isFirstLineStyle()).font().primaryFont(); + } + if (font_data) + inflation_for_descent = font_data->VisualOverflowInflationForDescent(); + logicalTop -= LayoutUnit(inflation_for_ascent); + logicalHeight += LayoutUnit(inflation_for_ascent + inflation_for_descent); + LayoutRect rect(logicalLeftSide, logicalTop, logicalWidth, logicalHeight); if (!style()->isHorizontalWritingMode()) rect = rect.transposedRect(); diff --git a/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp b/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp index 2b11d48670b..d613174fed0 100644 --- a/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp +++ b/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp @@ -318,7 +318,8 @@ void CompositedLayerMapping::updateStickyConstraints( LayoutPoint enclosingLayerOffset; compositingContainer->convertToLayerCoords(ancestorOverflowLayer, enclosingLayerOffset); - if (compositingContainer != ancestorOverflowLayer) { + DCHECK(!scrollParent() || scrollParent() == ancestorOverflowLayer); + if (!scrollParent() && compositingContainer != ancestorOverflowLayer) { enclosingLayerOffset += LayoutSize( ancestorOverflowLayer->getScrollableArea()->getScrollOffset()); } diff --git a/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp b/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp index 2153a44709a..cf5d3b176da 100644 --- a/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp +++ b/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp @@ -1689,6 +1689,63 @@ TEST_P(CompositedLayerMappingTest, StickyPositionTableCellContentOffset) { } TEST_P(CompositedLayerMappingTest, StickyPositionEnclosingLayersContentOffset) { + // Using backface-visibility: hidden causes the scroller to become composited + // without creating a stacking context. This is important as enclosing layer + // scroll correction works differently depending on whether you are in a + // stacking context or not. + setBodyInnerHTML( + "<style>.composited { backface-visibility: hidden; }" + "#scroller { overflow: auto; height: 200px; width: 200px; }" + ".container { height: 500px; }" + ".innerPadding { height: 10px; }" + "#sticky { position: sticky; top: 25px; height: 50px; }</style>" + "<div id='scroller' class='composited'>" + " <div class='composited container'>" + " <div class='composited container'>" + " <div class='innerPadding'></div>" + " <div id='sticky' class='composited'></div>" + " </div></div></div>"); + + PaintLayer* stickyLayer = + toLayoutBox(getLayoutObjectByElementId("sticky"))->layer(); + CompositedLayerMapping* stickyMapping = stickyLayer->compositedLayerMapping(); + ASSERT_TRUE(stickyMapping); + + WebLayerStickyPositionConstraint constraint = + stickyMapping->mainGraphicsLayer() + ->contentLayer() + ->layer() + ->stickyPositionConstraint(); + EXPECT_EQ(IntPoint(0, 10), + IntPoint(constraint.parentRelativeStickyBoxOffset)); + + // Now scroll the page - this should not affect the parent-relative offset. + LayoutBoxModelObject* scroller = + toLayoutBoxModelObject(getLayoutObjectByElementId("scroller")); + PaintLayerScrollableArea* scrollableArea = scroller->getScrollableArea(); + scrollableArea->scrollToAbsolutePosition( + FloatPoint(scrollableArea->scrollPosition().x(), 100)); + ASSERT_EQ(100.0, scrollableArea->scrollPosition().y()); + + stickyLayer->setNeedsCompositingInputsUpdate(); + EXPECT_TRUE(stickyLayer->needsCompositingInputsUpdate()); + document().view()->updateLifecycleToCompositingCleanPlusScrolling(); + EXPECT_FALSE(stickyLayer->needsCompositingInputsUpdate()); + + constraint = stickyMapping->mainGraphicsLayer() + ->contentLayer() + ->layer() + ->stickyPositionConstraint(); + EXPECT_EQ(IntPoint(0, 10), + IntPoint(constraint.parentRelativeStickyBoxOffset)); +} + +TEST_P(CompositedLayerMappingTest, + StickyPositionEnclosingLayersWithStackingContextContentOffset) { + // Using will-change: transform causes the scroller to become a stacking + // context. This changes how its descendant layers interact with it; they no + // longer have a scrollParent and instead just refer to it only as their + // ancestorOverflowLayer. setBodyInnerHTML( "<style>.composited { will-change: transform; }" "#scroller { overflow: auto; height: 200px; width: 200px; }" @@ -1696,10 +1753,10 @@ TEST_P(CompositedLayerMappingTest, StickyPositionEnclosingLayersContentOffset) { ".innerPadding { height: 10px; }" "#sticky { position: sticky; top: 25px; height: 50px; }</style>" "<div id='scroller' class='composited'>" - "<div class='composited container'>" " <div class='composited container'>" - " <div class='innerPadding'></div>" - " <div id='sticky' class='composited'></div>" + " <div class='composited container'>" + " <div class='innerPadding'></div>" + " <div id='sticky' class='composited'></div>" " </div></div></div>"); PaintLayer* stickyLayer = diff --git a/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp b/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp index b8891670090..929f6763744 100644 --- a/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp +++ b/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp @@ -38,6 +38,7 @@ #include "core/layout/svg/LayoutSVGViewportContainer.h" #include "core/layout/svg/SVGResources.h" #include "core/layout/svg/SVGResourcesCache.h" +#include "core/page/Page.h" #include "core/paint/PaintLayer.h" #include "core/svg/SVGElement.h" #include "platform/geometry/TransformState.h" @@ -520,7 +521,7 @@ SubtreeContentTransformScope::~SubtreeContentTransformScope() { m_savedContentTransformation.copyTransformTo(s_currentContentTransformation); } -float SVGLayoutSupport::calculateScreenFontSizeScalingFactor( +AffineTransform SVGLayoutSupport::deprecatedCalculateTransformToLayer( const LayoutObject* layoutObject) { AffineTransform transform; while (layoutObject) { @@ -529,10 +530,43 @@ float SVGLayoutSupport::calculateScreenFontSizeScalingFactor( break; layoutObject = layoutObject->parent(); } - transform.multiply( - SubtreeContentTransformScope::currentContentTransformation()); - return clampTo<float>( - sqrt((transform.xScaleSquared() + transform.yScaleSquared()) / 2)); + + // Continue walking up the layer tree, accumulating CSS transforms. + // FIXME: this queries layer compositing state - which is not + // supported during layout. Hence, the result may not include all CSS + // transforms. + PaintLayer* layer = layoutObject ? layoutObject->enclosingLayer() : 0; + while (layer && layer->isAllowedToQueryCompositingState()) { + // We can stop at compositing layers, to match the backing resolution. + // FIXME: should we be computing the transform to the nearest composited + // layer, or the nearest composited layer that does not paint into its + // ancestor? I think this is the nearest composited ancestor since we will + // inherit its transforms in the composited layer tree. + if (layer->compositingState() != NotComposited) + break; + + if (TransformationMatrix* layerTransform = layer->transform()) + transform = layerTransform->toAffineTransform() * transform; + + layer = layer->parent(); + } + + return transform; +} + +float SVGLayoutSupport::calculateScreenFontSizeScalingFactor( + const LayoutObject* layoutObject) { + DCHECK(layoutObject); + + // FIXME: trying to compute a device space transform at record time is wrong. + // All clients should be updated to avoid relying on this information, and the + // method should be removed. + AffineTransform ctm = + deprecatedCalculateTransformToLayer(layoutObject) * + SubtreeContentTransformScope::currentContentTransformation(); + ctm.scale(layoutObject->document().page()->deviceScaleFactorDeprecated()); + + return clampTo<float>(sqrt((ctm.xScaleSquared() + ctm.yScaleSquared()) / 2)); } static inline bool compareCandidateDistance(const SearchCandidate& r1, diff --git a/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.h b/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.h index c73d826db96..1d2b6717cee 100644 --- a/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.h +++ b/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.h @@ -145,6 +145,8 @@ class CORE_EXPORT SVGLayoutSupport { static bool computeHasNonIsolatedBlendingDescendants(const LayoutObjectType*); static bool isIsolationRequired(const LayoutObject*); + static AffineTransform deprecatedCalculateTransformToLayer( + const LayoutObject*); static float calculateScreenFontSizeScalingFactor(const LayoutObject*); static LayoutObject* findClosestLayoutSVGText(LayoutObject*, diff --git a/chromium/third_party/WebKit/Source/core/page/PageAnimator.cpp b/chromium/third_party/WebKit/Source/core/page/PageAnimator.cpp index b1a1f1daa2f..d2adf5f0117 100644 --- a/chromium/third_party/WebKit/Source/core/page/PageAnimator.cpp +++ b/chromium/third_party/WebKit/Source/core/page/PageAnimator.cpp @@ -73,10 +73,21 @@ void PageAnimator::serviceScriptedAnimations( } } +void PageAnimator::setSuppressFrameRequestsWorkaroundFor704763Only( + bool suppressFrameRequests) { + // If we are enabling the suppression and it was already enabled then we must + // have missed disabling it at the end of a previous frame. + DCHECK(!m_suppressFrameRequestsWorkaroundFor704763Only || + !suppressFrameRequests); + m_suppressFrameRequestsWorkaroundFor704763Only = suppressFrameRequests; +} + DISABLE_CFI_PERF void PageAnimator::scheduleVisualUpdate(LocalFrame* frame) { - if (m_servicingAnimations || m_updatingLayoutAndStyleForPainting) + if (m_servicingAnimations || m_updatingLayoutAndStyleForPainting || + m_suppressFrameRequestsWorkaroundFor704763Only) { return; + } m_page->chromeClient().scheduleAnimation(frame->view()); } diff --git a/chromium/third_party/WebKit/Source/core/page/PageAnimator.h b/chromium/third_party/WebKit/Source/core/page/PageAnimator.h index c2e62ae89d9..96843efe817 100644 --- a/chromium/third_party/WebKit/Source/core/page/PageAnimator.h +++ b/chromium/third_party/WebKit/Source/core/page/PageAnimator.h @@ -23,6 +23,12 @@ class CORE_EXPORT PageAnimator final : public GarbageCollected<PageAnimator> { bool isServicingAnimations() const { return m_servicingAnimations; } + // TODO(alancutter): Remove the need for this by implementing frame request + // suppression logic at the BeginMainFrame level. This is a temporary + // workaround to fix a perf regression. + // DO NOT use this outside of crbug.com/704763. + void setSuppressFrameRequestsWorkaroundFor704763Only(bool); + // See documents of methods with the same names in FrameView class. void updateAllLifecyclePhases(LocalFrame& rootFrame); AnimationClock& clock() { return m_animationClock; } @@ -33,6 +39,7 @@ class CORE_EXPORT PageAnimator final : public GarbageCollected<PageAnimator> { Member<Page> m_page; bool m_servicingAnimations; bool m_updatingLayoutAndStyleForPainting; + bool m_suppressFrameRequestsWorkaroundFor704763Only = false; AnimationClock m_animationClock; }; diff --git a/chromium/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp b/chromium/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp index a9aaa381dca..1105df408a1 100644 --- a/chromium/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp +++ b/chromium/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp @@ -953,6 +953,13 @@ void PaintLayerPainter::paintFragmentWithPhase( case PaintPhaseMask: // Mask painting will handle clipping to self. clippingRule = LayerClipRecorder::DoNotIncludeSelfForBorderRadius; break; + case PaintPhaseClippingMask: + if (paintFlags & PaintLayerPaintingAncestorClippingMaskPhase) { + // The ancestor is the thing that needs to clip, so do not include + // this layer's clips. + clippingRule = LayerClipRecorder::DoNotIncludeSelfForBorderRadius; + break; + } default: clippingRule = LayerClipRecorder::IncludeSelfForBorderRadius; break; diff --git a/chromium/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp b/chromium/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp index 5c8c403dcda..db8383d778c 100644 --- a/chromium/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp +++ b/chromium/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp @@ -105,7 +105,7 @@ bool NavigatorVibration::vibrate(Navigator& navigator, // static void NavigatorVibration::collectHistogramMetrics(const LocalFrame& frame) { NavigatorVibrationType type; - bool userGesture = UserGestureIndicator::processingUserGesture(); + bool userGesture = frame.hasReceivedUserGesture(); UseCounter::count(&frame, UseCounter::NavigatorVibrate); if (!frame.isMainFrame()) { UseCounter::count(&frame, UseCounter::NavigatorVibrateSubFrame); diff --git a/chromium/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/chromium/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp index aa46ba2ab78..c594194d9be 100644 --- a/chromium/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp +++ b/chromium/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp @@ -5277,17 +5277,9 @@ void WebGLRenderingContextBase::texImageHelperHTMLVideoElement( // Go through the fast path doing a GPU-GPU textures copy without a readback // to system memory if possible. Otherwise, it will fall back to the normal // SW path. - - // Note that neither - // HTMLVideoElement::copyVideoTextureToPlatformTexture nor - // ImageBuffer::copyToPlatformTexture allocate the destination texture - // any more. - texImage2DBase(target, level, internalformat, video->videoWidth(), - video->videoHeight(), 0, format, type, nullptr); - - if (video->copyVideoTextureToPlatformTexture(contextGL(), texture->object(), - m_unpackPremultiplyAlpha, - m_unpackFlipY)) { + if (video->copyVideoTextureToPlatformTexture( + contextGL(), texture->object(), internalformat, type, + m_unpackPremultiplyAlpha, m_unpackFlipY)) { return; } @@ -5311,6 +5303,11 @@ void WebGLRenderingContextBase::texImageHelperHTMLVideoElement( // This is a straight GPU-GPU copy, any necessary color space conversion // was handled in the paintCurrentFrameInContext() call. + // Note that copyToPlatformTexture no longer allocates the destination + // texture. + texImage2DBase(target, level, internalformat, video->videoWidth(), + video->videoHeight(), 0, format, type, nullptr); + if (imageBuffer->copyToPlatformTexture( functionIDToSnapshotReason(functionID), contextGL(), texture->object(), internalformat, type, level, diff --git a/chromium/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h b/chromium/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h index 99c2b5fe823..849fef2d9cc 100644 --- a/chromium/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h +++ b/chromium/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h @@ -31,20 +31,17 @@ #ifndef AudioDestinationConsumer_h #define AudioDestinationConsumer_h +#include <memory> #include "platform/PlatformExport.h" -#include "platform/heap/Handle.h" namespace blink { class AudioBus; -class PLATFORM_EXPORT AudioDestinationConsumer - : public GarbageCollected<AudioDestinationConsumer> { +class PLATFORM_EXPORT AudioDestinationConsumer { public: virtual void setFormat(size_t numberOfChannels, float sampleRate) = 0; virtual void consumeAudio(AudioBus*, size_t numberOfFrames) = 0; - - DEFINE_INLINE_VIRTUAL_TRACE() {} }; } // namespace blink diff --git a/chromium/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp b/chromium/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp index 65681024471..527762a5553 100644 --- a/chromium/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp +++ b/chromium/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp @@ -161,6 +161,8 @@ bool WebMediaStreamSource::requiresAudioConsumer() const { } class ConsumerWrapper final : public AudioDestinationConsumer { + USING_FAST_MALLOC(ConsumerWrapper); + public: static ConsumerWrapper* create(WebAudioDestinationConsumer* consumer) { return new ConsumerWrapper(consumer); @@ -209,12 +211,10 @@ bool WebMediaStreamSource::removeAudioConsumer( ASSERT(isMainThread()); ASSERT(!m_private.isNull() && consumer); - const HeapHashSet<Member<AudioDestinationConsumer>>& consumers = + const HashSet<AudioDestinationConsumer*>& consumers = m_private->audioConsumers(); - for (HeapHashSet<Member<AudioDestinationConsumer>>::const_iterator it = - consumers.begin(); - it != consumers.end(); ++it) { - ConsumerWrapper* wrapper = static_cast<ConsumerWrapper*>(it->get()); + for (AudioDestinationConsumer* it : consumers) { + ConsumerWrapper* wrapper = static_cast<ConsumerWrapper*>(it); if (wrapper->consumer() == consumer) { m_private->removeAudioConsumer(wrapper); return true; diff --git a/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp b/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp index 33c66ce31cf..c7540898759 100644 --- a/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp +++ b/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp @@ -62,10 +62,12 @@ SimpleFontData::SimpleFontData(const FontPlatformData& platformData, : m_maxCharWidth(-1), m_avgCharWidth(-1), m_platformData(platformData), - m_isTextOrientationFallback(isTextOrientationFallback), m_verticalData(nullptr), + m_customFontData(customData), + m_isTextOrientationFallback(isTextOrientationFallback), m_hasVerticalGlyphs(false), - m_customFontData(customData) { + visual_overflow_inflation_for_ascent_(0), + visual_overflow_inflation_for_descent_(0) { platformInit(subpixelAscentDescent); platformGlyphInit(); if (platformData.isVerticalAnyUpright() && !isTextOrientationFallback) { @@ -81,10 +83,12 @@ SimpleFontData::SimpleFontData(PassRefPtr<CustomFontData> customData, bool syntheticItalic) : m_platformData( FontPlatformData(fontSize, syntheticBold, syntheticItalic)), - m_isTextOrientationFallback(false), m_verticalData(nullptr), + m_customFontData(customData), + m_isTextOrientationFallback(false), m_hasVerticalGlyphs(false), - m_customFontData(customData) {} + visual_overflow_inflation_for_ascent_(0), + visual_overflow_inflation_for_descent_(0) {} void SimpleFontData::platformInit(bool subpixelAscentDescent) { if (!m_platformData.size()) { @@ -137,30 +141,37 @@ void SimpleFontData::platformInit(bool subpixelAscentDescent) { if (isVDMXValid) { ascent = vdmxAscent; descent = -vdmxDescent; - } else { + } else if (subpixelAscentDescent && + (-metrics.fAscent < 3 || + -metrics.fAscent + metrics.fDescent < 2)) { // For tiny fonts, the rounding of fAscent and fDescent results in equal // baseline for different types of text baselines (crbug.com/338908). // Please see CanvasRenderingContext2D::getFontBaseline for the heuristic. - if (subpixelAscentDescent && - (-metrics.fAscent < 3 || -metrics.fAscent + metrics.fDescent < 2)) { - ascent = -metrics.fAscent; - descent = metrics.fDescent; - } else { - ascent = SkScalarRoundToScalar(-metrics.fAscent); - descent = SkScalarRoundToScalar(metrics.fDescent); - } + ascent = -metrics.fAscent; + descent = metrics.fDescent; + } else { + ascent = SkScalarRoundToScalar(-metrics.fAscent); + descent = SkScalarRoundToScalar(metrics.fDescent); + + if (ascent < -metrics.fAscent) + visual_overflow_inflation_for_ascent_ = 1; + if (descent < metrics.fDescent) { + visual_overflow_inflation_for_descent_ = 1; #if OS(LINUX) || OS(ANDROID) - // When subpixel positioning is enabled, if the descent is rounded down, the - // descent part of the glyph may be truncated when displayed in a 'overflow: - // hidden' container. To avoid that, borrow 1 unit from the ascent when - // possible. - // FIXME: This can be removed if sub-pixel ascent/descent is supported. - if (platformData().getFontRenderStyle().useSubpixelPositioning && - descent < SkScalarToFloat(metrics.fDescent) && ascent >= 1) { - ++descent; - --ascent; - } + // When subpixel positioning is enabled, if the descent is rounded down, + // the descent part of the glyph may be truncated when displayed in a + // 'overflow: hidden' container. To avoid that, borrow 1 unit from the + // ascent when possible. + if (platformData().getFontRenderStyle().useSubpixelPositioning && + ascent >= 1) { + ++descent; + --ascent; + // We should inflate overflow 1 more pixel for ascent instead. + visual_overflow_inflation_for_descent_ = 0; + ++visual_overflow_inflation_for_ascent_; + } #endif + } } #if OS(MACOSX) diff --git a/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.h b/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.h index 73f6a3ead90..ce0cd74251c 100644 --- a/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.h +++ b/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.h @@ -157,6 +157,13 @@ class PLATFORM_EXPORT SimpleFontData : public FontData { CustomFontData* customFontData() const { return m_customFontData.get(); } + unsigned VisualOverflowInflationForAscent() const { + return visual_overflow_inflation_for_ascent_; + } + unsigned VisualOverflowInflationForDescent() const { + return visual_overflow_inflation_for_descent_; + } + protected: SimpleFontData(const FontPlatformData&, PassRefPtr<CustomFontData> customData, @@ -182,9 +189,7 @@ class PLATFORM_EXPORT SimpleFontData : public FontData { FontPlatformData m_platformData; SkPaint m_paint; - bool m_isTextOrientationFallback; RefPtr<OpenTypeVerticalData> m_verticalData; - bool m_hasVerticalGlyphs; Glyph m_spaceGlyph; float m_spaceWidth; @@ -212,6 +217,15 @@ class PLATFORM_EXPORT SimpleFontData : public FontData { RefPtr<CustomFontData> m_customFontData; + unsigned m_isTextOrientationFallback : 1; + unsigned m_hasVerticalGlyphs : 1; + + // These are set to non-zero when ascent or descent is rounded or shifted + // to be smaller than the actual ascent or descent. When calculating visual + // overflows, we should add the inflations. + unsigned visual_overflow_inflation_for_ascent_ : 2; + unsigned visual_overflow_inflation_for_descent_ : 2; + // See discussion on crbug.com/631032 and Skiaissue // https://bugs.chromium.org/p/skia/issues/detail?id=5328 : // On Mac we're still using path based glyph metrics, and they seem to be diff --git a/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp b/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp index 7be1e65ab51..f6a68cdbff3 100644 --- a/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp +++ b/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp @@ -168,8 +168,8 @@ DrawingBuffer::~DrawingBuffer() { } bool DrawingBuffer::markContentsChanged() { - if (m_contentsChangeCommitted || !m_contentsChanged) { - m_contentsChangeCommitted = false; + if (m_contentsChangeResolved || !m_contentsChanged) { + m_contentsChangeResolved = false; m_contentsChanged = true; return true; } @@ -284,8 +284,7 @@ bool DrawingBuffer::prepareTextureMailboxInternal( (*m_newMailboxCallback)(); // Resolve the multisampled buffer into m_backColorBuffer texture. - if (m_antiAliasingMode != None) - resolveMultisampleFramebufferInternal(); + resolveIfNeeded(); if (m_softwareRendering && !forceGpuResult) { return finishPrepareTextureMailboxSoftware(outMailbox, outReleaseCallback); @@ -695,8 +694,7 @@ bool DrawingBuffer::copyToPlatformTexture(gpu::gles2::GLES2Interface* gl, ScopedStateRestorer scopedStateRestorer(this); if (m_contentsChanged) { - if (m_antiAliasingMode != None) - resolveMultisampleFramebufferInternal(); + resolveIfNeeded(); m_gl->Flush(); } @@ -971,7 +969,7 @@ bool DrawingBuffer::resizeFramebufferInternal(const IntSize& newSize) { void DrawingBuffer::resolveAndBindForReadAndDraw() { { ScopedStateRestorer scopedStateRestorer(this); - resolveMultisampleFramebufferInternal(); + resolveIfNeeded(); } m_gl->BindFramebuffer(GL_FRAMEBUFFER, m_fbo); } @@ -979,7 +977,7 @@ void DrawingBuffer::resolveAndBindForReadAndDraw() { void DrawingBuffer::resolveMultisampleFramebufferInternal() { DCHECK(m_stateRestorer); m_stateRestorer->setFramebufferBindingDirty(); - if (wantExplicitResolve() && !m_contentsChangeCommitted) { + if (wantExplicitResolve() && !m_contentsChangeResolved) { m_stateRestorer->setClearStateDirty(); m_gl->BindFramebuffer(GL_READ_FRAMEBUFFER_ANGLE, m_multisampleFBO); m_gl->BindFramebuffer(GL_DRAW_FRAMEBUFFER_ANGLE, m_fbo); @@ -1009,7 +1007,12 @@ void DrawingBuffer::resolveMultisampleFramebufferInternal() { m_gl->BindFramebuffer(GL_FRAMEBUFFER, m_fbo); if (m_antiAliasingMode == ScreenSpaceAntialiasing) m_gl->ApplyScreenSpaceAntialiasingCHROMIUM(); - m_contentsChangeCommitted = true; +} + +void DrawingBuffer::resolveIfNeeded() { + if (m_antiAliasingMode != None) + resolveMultisampleFramebufferInternal(); + m_contentsChangeResolved = true; } void DrawingBuffer::restoreFramebufferBindings() { diff --git a/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h b/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h index fe1c8b329f3..dbf89a5ac45 100644 --- a/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h +++ b/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h @@ -168,7 +168,7 @@ class PLATFORM_EXPORT DrawingBuffer } // Returns false if the contents had previously been marked as changed and - // have not yet been committed. + // have not yet been resolved. bool markContentsChanged(); void setBufferClearNeeded(bool); bool bufferClearNeeded() const; @@ -342,9 +342,12 @@ class PLATFORM_EXPORT DrawingBuffer // The same as reset(), but leaves GL state dirty. bool resizeFramebufferInternal(const IntSize&); - // The same as commit(), but leaves GL state dirty. + // The same as resolveAndBindForReadAndDraw(), but leaves GL state dirty. void resolveMultisampleFramebufferInternal(); + // Resolves m_multisampleFBO into m_fbo, if multisampling. + void resolveIfNeeded(); + bool prepareTextureMailboxInternal( cc::TextureMailbox* outMailbox, std::unique_ptr<cc::SingleReleaseCallback>* outReleaseCallback, @@ -481,9 +484,9 @@ class PLATFORM_EXPORT DrawingBuffer // buffer. bool m_contentsChanged = true; - // True if commit() has been called since the last time markContentsChanged() - // had been called. - bool m_contentsChangeCommitted = false; + // True if resolveIfNeeded() has been called since the last time + // markContentsChanged() had been called. + bool m_contentsChangeResolved = false; bool m_bufferClearNeeded = false; // Whether the client wants a depth or stencil buffer. diff --git a/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp b/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp index 98a314d3c75..acc83312d97 100644 --- a/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp +++ b/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp @@ -82,8 +82,7 @@ bool MediaStreamSource::removeAudioConsumer( AudioDestinationConsumer* consumer) { ASSERT(m_requiresConsumer); MutexLocker locker(m_audioConsumersLock); - HeapHashSet<Member<AudioDestinationConsumer>>::iterator it = - m_audioConsumers.find(consumer); + auto it = m_audioConsumers.find(consumer); if (it == m_audioConsumers.end()) return false; m_audioConsumers.erase(it); @@ -98,24 +97,19 @@ void MediaStreamSource::setAudioFormat(size_t numberOfChannels, float sampleRate) { ASSERT(m_requiresConsumer); MutexLocker locker(m_audioConsumersLock); - for (HeapHashSet<Member<AudioDestinationConsumer>>::iterator it = - m_audioConsumers.begin(); - it != m_audioConsumers.end(); ++it) - (*it)->setFormat(numberOfChannels, sampleRate); + for (AudioDestinationConsumer* consumer : m_audioConsumers) + consumer->setFormat(numberOfChannels, sampleRate); } void MediaStreamSource::consumeAudio(AudioBus* bus, size_t numberOfFrames) { ASSERT(m_requiresConsumer); MutexLocker locker(m_audioConsumersLock); - for (HeapHashSet<Member<AudioDestinationConsumer>>::iterator it = - m_audioConsumers.begin(); - it != m_audioConsumers.end(); ++it) - (*it)->consumeAudio(bus, numberOfFrames); + for (AudioDestinationConsumer* consumer : m_audioConsumers) + consumer->consumeAudio(bus, numberOfFrames); } DEFINE_TRACE(MediaStreamSource) { visitor->trace(m_observers); - visitor->trace(m_audioConsumers); } } // namespace blink diff --git a/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h b/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h index 8b7586051e1..d3480c9cf3d 100644 --- a/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h +++ b/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h @@ -102,7 +102,7 @@ class PLATFORM_EXPORT MediaStreamSource final bool requiresAudioConsumer() const { return m_requiresConsumer; } void addAudioConsumer(AudioDestinationConsumer*); bool removeAudioConsumer(AudioDestinationConsumer*); - const HeapHashSet<Member<AudioDestinationConsumer>>& audioConsumers() { + const HashSet<AudioDestinationConsumer*>& audioConsumers() { return m_audioConsumers; } @@ -128,7 +128,7 @@ class PLATFORM_EXPORT MediaStreamSource final bool m_requiresConsumer; HeapHashSet<WeakMember<Observer>> m_observers; Mutex m_audioConsumersLock; - HeapHashSet<Member<AudioDestinationConsumer>> m_audioConsumers; + HashSet<AudioDestinationConsumer*> m_audioConsumers; std::unique_ptr<ExtraData> m_extraData; WebMediaConstraints m_constraints; }; diff --git a/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp b/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp index 8a1e33f315a..ebce92cd103 100644 --- a/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp +++ b/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp @@ -197,9 +197,11 @@ void WebFrameWidgetImpl::sendResizeEventAndRepaint() { void WebFrameWidgetImpl::resizeVisualViewport(const WebSize& newSize) { // TODO(alexmos, kenrb): resizing behavior such as this should be changed - // to use Page messages. https://crbug.com/599688. - page()->frameHost().visualViewport().setSize(newSize); - page()->frameHost().visualViewport().clampToBoundaries(); + // to use Page messages. This uses the visual viewport size to set size on + // both the WebViewImpl size and the Page's VisualViewport. If there are + // multiple OOPIFs on a page, this will currently be set redundantly by + // each of them. See https://crbug.com/599688. + view()->resize(newSize); view()->didUpdateFullscreenSize(); } @@ -226,6 +228,11 @@ void WebFrameWidgetImpl::didExitFullscreen() { view()->didExitFullscreen(); } +void WebFrameWidgetImpl::setSuppressFrameRequestsWorkaroundFor704763Only( + bool suppressFrameRequests) { + page()->animator().setSuppressFrameRequestsWorkaroundFor704763Only( + suppressFrameRequests); +} void WebFrameWidgetImpl::beginFrame(double lastFrameTimeMonotonic) { TRACE_EVENT1("blink", "WebFrameWidgetImpl::beginFrame", "frameTime", lastFrameTimeMonotonic); diff --git a/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.h b/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.h index cd6bf97c7bc..05eb41d717d 100644 --- a/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.h +++ b/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.h @@ -80,6 +80,7 @@ class WebFrameWidgetImpl final void resizeVisualViewport(const WebSize&) override; void didEnterFullscreen() override; void didExitFullscreen() override; + void setSuppressFrameRequestsWorkaroundFor704763Only(bool) final; void beginFrame(double lastFrameTimeMonotonic) override; void updateAllLifecyclePhases() override; void paint(WebCanvas*, const WebRect&) override; diff --git a/chromium/third_party/WebKit/Source/web/WebInputEventConversion.cpp b/chromium/third_party/WebKit/Source/web/WebInputEventConversion.cpp index 819d6961170..140af9d4cb7 100644 --- a/chromium/third_party/WebKit/Source/web/WebInputEventConversion.cpp +++ b/chromium/third_party/WebKit/Source/web/WebInputEventConversion.cpp @@ -201,9 +201,17 @@ WebMouseEventBuilder::WebMouseEventBuilder(const FrameViewBase* frameViewBase, if (event.nativeEvent()) { *static_cast<WebMouseEvent*>(this) = event.nativeEvent()->flattenTransform(); - WebFloatPoint absoluteRootFrameLocation = positionInRootFrame(); + WebFloatPoint absoluteLocation = positionInRootFrame(); + + FrameView* view = frameViewBase ? toFrameView(frameViewBase->parent()) : 0; + + // Translate the root frame position to content coordinates. + if (view) { + absoluteLocation = view->rootFrameToContents(absoluteLocation); + } + IntPoint localPoint = roundedIntPoint( - layoutItem.absoluteToLocal(absoluteRootFrameLocation, UseTransforms)); + layoutItem.absoluteToLocal(absoluteLocation, UseTransforms)); x = localPoint.x(); y = localPoint.y(); return; diff --git a/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.cpp b/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.cpp index 2751595e18a..a8f5c09f724 100644 --- a/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.cpp +++ b/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.cpp @@ -406,6 +406,13 @@ void WebPagePopupImpl::setIsAcceleratedCompositingActive(bool enter) { } } +void WebPagePopupImpl::setSuppressFrameRequestsWorkaroundFor704763Only( + bool suppressFrameRequests) { + if (!m_page) + return; + m_page->animator().setSuppressFrameRequestsWorkaroundFor704763Only( + suppressFrameRequests); +} void WebPagePopupImpl::beginFrame(double lastFrameTimeMonotonic) { if (!m_page) return; diff --git a/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.h b/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.h index 1d89868f0dc..011fb9f43df 100644 --- a/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.h +++ b/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.h @@ -76,6 +76,7 @@ class WebPagePopupImpl final : public WebPagePopup, private: // WebWidget functions + void setSuppressFrameRequestsWorkaroundFor704763Only(bool) final; void beginFrame(double lastFrameTimeMonotonic) override; void updateAllLifecyclePhases() override; void willCloseLayerTreeView() override; diff --git a/chromium/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp b/chromium/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp index dfce5182a81..ad9aa19e129 100644 --- a/chromium/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp +++ b/chromium/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp @@ -761,11 +761,16 @@ void WebPluginContainerImpl::handleDragEvent(MouseEvent* event) { } void WebPluginContainerImpl::handleWheelEvent(WheelEvent* event) { - WebFloatPoint absoluteRootFrameLocation = - event->nativeEvent().positionInRootFrame(); + WebFloatPoint absoluteLocation = event->nativeEvent().positionInRootFrame(); + FrameView* view = toFrameView(parent()); + // Translate the root frame position to content coordinates. + if (view) { + absoluteLocation = view->rootFrameToContents(absoluteLocation); + } + IntPoint localPoint = roundedIntPoint(m_element->layoutObject()->absoluteToLocal( - absoluteRootFrameLocation, UseTransforms)); + absoluteLocation, UseTransforms)); WebMouseWheelEvent translatedEvent = event->nativeEvent().flattenTransform(); translatedEvent.x = localPoint.x(); translatedEvent.y = localPoint.y(); @@ -826,12 +831,17 @@ void WebPluginContainerImpl::handleTouchEvent(TouchEvent* event) { WebTouchEvent transformedEvent = event->nativeEvent()->flattenTransform(); + FrameView* view = toFrameView(parent()); + for (unsigned i = 0; i < transformedEvent.touchesLength; ++i) { - WebFloatPoint absoluteRootFrameLocation = - transformedEvent.touches[i].position; + WebFloatPoint absoluteLocation = transformedEvent.touches[i].position; + // Translate the root frame position to content coordinates. + if (view) { + absoluteLocation = view->rootFrameToContents(absoluteLocation); + } IntPoint localPoint = roundedIntPoint(m_element->layoutObject()->absoluteToLocal( - absoluteRootFrameLocation, UseTransforms)); + absoluteLocation, UseTransforms)); transformedEvent.touches[i].position.x = localPoint.x(); transformedEvent.touches[i].position.y = localPoint.y(); } diff --git a/chromium/third_party/WebKit/Source/web/WebSettingsImpl.cpp b/chromium/third_party/WebKit/Source/web/WebSettingsImpl.cpp index ff5ac4d25bd..e081ba3e58e 100644 --- a/chromium/third_party/WebKit/Source/web/WebSettingsImpl.cpp +++ b/chromium/third_party/WebKit/Source/web/WebSettingsImpl.cpp @@ -732,4 +732,9 @@ void WebSettingsImpl::setMediaControlsEnabled(bool enabled) { m_settings->setMediaControlsEnabled(enabled); } +void WebSettingsImpl::setDoNotUpdateSelectionOnMutatingSelectionRange( + bool enabled) { + m_settings->setDoNotUpdateSelectionOnMutatingSelectionRange(enabled); +} + } // namespace blink diff --git a/chromium/third_party/WebKit/Source/web/WebSettingsImpl.h b/chromium/third_party/WebKit/Source/web/WebSettingsImpl.h index 95178e0900a..5d3c858c2ec 100644 --- a/chromium/third_party/WebKit/Source/web/WebSettingsImpl.h +++ b/chromium/third_party/WebKit/Source/web/WebSettingsImpl.h @@ -210,6 +210,7 @@ class WEB_EXPORT WebSettingsImpl final : NON_EXPORTED_BASE(public WebSettings) { void setExpensiveBackgroundThrottlingMaxBudget(float) override; void setExpensiveBackgroundThrottlingMaxDelay(float) override; void setMediaControlsEnabled(bool) override; + void setDoNotUpdateSelectionOnMutatingSelectionRange(bool) override; bool showFPSCounter() const { return m_showFPSCounter; } bool showPaintRects() const { return m_showPaintRects; } diff --git a/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.cpp b/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.cpp index 7b662eba0c9..3cbcc5a2d99 100644 --- a/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.cpp +++ b/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.cpp @@ -57,6 +57,11 @@ void WebViewFrameWidget::didExitFullscreen() { return m_webView->didExitFullscreen(); } +void WebViewFrameWidget::setSuppressFrameRequestsWorkaroundFor704763Only( + bool suppressFrameRequests) { + return m_webView->setSuppressFrameRequestsWorkaroundFor704763Only( + suppressFrameRequests); +} void WebViewFrameWidget::beginFrame(double lastFrameTimeMonotonic) { return m_webView->beginFrame(lastFrameTimeMonotonic); } diff --git a/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.h b/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.h index 381931493de..86c91ad69fb 100644 --- a/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.h +++ b/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.h @@ -48,6 +48,7 @@ class WebViewFrameWidget : public WebFrameWidgetBase { void resizeVisualViewport(const WebSize&) override; void didEnterFullscreen() override; void didExitFullscreen() override; + void setSuppressFrameRequestsWorkaroundFor704763Only(bool) final; void beginFrame(double lastFrameTimeMonotonic) override; void updateAllLifecyclePhases() override; void paint(WebCanvas*, const WebRect& viewPort) override; diff --git a/chromium/third_party/WebKit/Source/web/WebViewImpl.cpp b/chromium/third_party/WebKit/Source/web/WebViewImpl.cpp index 365a716b55f..5b5fef6fd89 100644 --- a/chromium/third_party/WebKit/Source/web/WebViewImpl.cpp +++ b/chromium/third_party/WebKit/Source/web/WebViewImpl.cpp @@ -1949,6 +1949,11 @@ void WebViewImpl::didUpdateFullscreenSize() { m_fullscreenController->updateSize(); } +void WebViewImpl::setSuppressFrameRequestsWorkaroundFor704763Only( + bool suppressFrameRequests) { + m_page->animator().setSuppressFrameRequestsWorkaroundFor704763Only( + suppressFrameRequests); +} void WebViewImpl::beginFrame(double lastFrameTimeMonotonic) { TRACE_EVENT1("blink", "WebViewImpl::beginFrame", "frameTime", lastFrameTimeMonotonic); diff --git a/chromium/third_party/WebKit/Source/web/WebViewImpl.h b/chromium/third_party/WebKit/Source/web/WebViewImpl.h index f94b6956b3e..354e52ec2f5 100644 --- a/chromium/third_party/WebKit/Source/web/WebViewImpl.h +++ b/chromium/third_party/WebKit/Source/web/WebViewImpl.h @@ -129,6 +129,7 @@ class WEB_EXPORT WebViewImpl final void didEnterFullscreen() override; void didExitFullscreen() override; + void setSuppressFrameRequestsWorkaroundFor704763Only(bool) override; void beginFrame(double lastFrameTimeMonotonic) override; void updateAllLifecyclePhases() override; diff --git a/chromium/third_party/WebKit/public/platform/WebMediaPlayer.h b/chromium/third_party/WebKit/public/platform/WebMediaPlayer.h index 85a95762e06..745a53888a2 100644 --- a/chromium/third_party/WebKit/public/platform/WebMediaPlayer.h +++ b/chromium/third_party/WebKit/public/platform/WebMediaPlayer.h @@ -181,21 +181,16 @@ class WebMediaPlayer { virtual void paint(WebCanvas*, const WebRect&, cc::PaintFlags&) = 0; - // TODO(kbr): remove non-|target| version. crbug.com/349871 - // - // Do a GPU-GPU texture copy of the natural size of the current - // video frame to |texture|. Caller is responsible for allocating - // |texture| with the appropriate size. If the copy is impossible or - // fails, it returns false. + // TODO(dshwang): remove non-|target| version. crbug.com/349871 virtual bool copyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface*, unsigned texture, + unsigned internalFormat, + unsigned type, bool premultiplyAlpha, bool flipY) { return false; } - // TODO(kbr): when updating calling code to use this, remove the - // |internalFormat| and |type| parameters. crbug.com/349871 // Do a GPU-GPU textures copy. If the copy is impossible or fails, it returns // false. virtual bool copyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface*, diff --git a/chromium/third_party/WebKit/public/web/WebSettings.h b/chromium/third_party/WebKit/public/web/WebSettings.h index 70fe7252051..adb6ede2d53 100644 --- a/chromium/third_party/WebKit/public/web/WebSettings.h +++ b/chromium/third_party/WebKit/public/web/WebSettings.h @@ -297,6 +297,7 @@ class WebSettings { virtual void setExpensiveBackgroundThrottlingMaxBudget(float) = 0; virtual void setExpensiveBackgroundThrottlingMaxDelay(float) = 0; virtual void setMediaControlsEnabled(bool) = 0; + virtual void setDoNotUpdateSelectionOnMutatingSelectionRange(bool) = 0; protected: ~WebSettings() {} diff --git a/chromium/third_party/WebKit/public/web/WebWidget.h b/chromium/third_party/WebKit/public/web/WebWidget.h index 0fba421e9a3..50ca56f51c0 100644 --- a/chromium/third_party/WebKit/public/web/WebWidget.h +++ b/chromium/third_party/WebKit/public/web/WebWidget.h @@ -76,6 +76,9 @@ class WebWidget { virtual void didEnterFullscreen() {} virtual void didExitFullscreen() {} + // TODO(crbug.com/704763): Remove the need for this. + virtual void setSuppressFrameRequestsWorkaroundFor704763Only(bool) {} + // Called to update imperative animation state. This should be called before // paint, although the client can rate-limit these calls. // |lastFrameTimeMonotonic| is in seconds. diff --git a/chromium/third_party/catapult/tracing/trace_viewer.gypi b/chromium/third_party/catapult/tracing/trace_viewer.gypi index a90fc3ca76d..28f05eacc47 100644 --- a/chromium/third_party/catapult/tracing/trace_viewer.gypi +++ b/chromium/third_party/catapult/tracing/trace_viewer.gypi @@ -32,7 +32,6 @@ '../third_party/polymer/components/polymer/polymer.html', 'tracing/base/base.html', 'tracing/base/base64.html', - 'tracing/base/bbox2.html', 'tracing/base/category_util.html', 'tracing/base/color.html', 'tracing/base/color_scheme.html', @@ -46,26 +45,29 @@ 'tracing/base/guid.html', 'tracing/base/interval_tree.html', 'tracing/base/iteration_helpers.html', - 'tracing/base/math.html', + 'tracing/base/math/bbox2.html', + 'tracing/base/math/math.html', + 'tracing/base/math/piecewise_linear_function.html', + 'tracing/base/math/quad.html', + 'tracing/base/math/range.html', + 'tracing/base/math/range_utils.html', + 'tracing/base/math/rect.html', + 'tracing/base/math/running_statistics.html', + 'tracing/base/math/sorted_array_utils.html', + 'tracing/base/math/statistics.html', 'tracing/base/multi_dimensional_view.html', - 'tracing/base/piecewise_linear_function.html', - 'tracing/base/quad.html', 'tracing/base/raf.html', - 'tracing/base/range.html', - 'tracing/base/range_utils.html', - 'tracing/base/rect.html', - 'tracing/base/running_statistics.html', 'tracing/base/scalar.html', + 'tracing/base/serializable.html', 'tracing/base/settings.html', 'tracing/base/sinebow_color_generator.html', - 'tracing/base/sorted_array_utils.html', - 'tracing/base/statistics.html', 'tracing/base/task.html', 'tracing/base/time_display_modes.html', 'tracing/base/timing.html', 'tracing/base/unit.html', 'tracing/base/unit_scale.html', 'tracing/base/utils.html', + 'tracing/base/view_state.html', 'tracing/core/auditor.html', 'tracing/core/filter.html', 'tracing/core/scripting_controller.html', @@ -92,6 +94,7 @@ 'tracing/extras/chrome/cc/tile_coverage_rect.html', 'tracing/extras/chrome/cc/util.html', 'tracing/extras/chrome/chrome_auditor.html', + 'tracing/extras/chrome/chrome_processes.html', 'tracing/extras/chrome/chrome_user_friendly_category_driver.html', 'tracing/extras/chrome/estimated_input_latency.html', 'tracing/extras/chrome/gpu/gpu_async_slice.html', @@ -178,12 +181,17 @@ 'tracing/importer/proto_expectation.html', 'tracing/importer/simple_line_reader.html', 'tracing/importer/user_model_builder.html', + 'tracing/metrics/all_fixed_color_schemes.html', 'tracing/metrics/all_metrics.html', + 'tracing/metrics/android_systrace_metric.html', 'tracing/metrics/blink/gc_metric.html', 'tracing/metrics/cpu_process_metric.html', 'tracing/metrics/metric_map_function.html', 'tracing/metrics/metric_registry.html', 'tracing/metrics/sample_metric.html', + 'tracing/metrics/spa_navigation_helper.html', + 'tracing/metrics/spa_navigation_metric.html', + 'tracing/metrics/system_health/breakdown_tree_helpers.html', 'tracing/metrics/system_health/clock_sync_latency_metric.html', 'tracing/metrics/system_health/cpu_time_metric.html', 'tracing/metrics/system_health/expected_queueing_time_metric.html', @@ -200,6 +208,7 @@ 'tracing/metrics/v8/runtime_stats_metric.html', 'tracing/metrics/v8/utils.html', 'tracing/metrics/v8/v8_metrics.html', + 'tracing/metrics/webrtc/webrtc_rendering_metric.html', 'tracing/model/activity.html', 'tracing/model/alert.html', 'tracing/model/annotation.html', @@ -233,6 +242,7 @@ 'tracing/model/helpers/chrome_model_helper.html', 'tracing/model/helpers/chrome_process_helper.html', 'tracing/model/helpers/chrome_renderer_helper.html', + 'tracing/model/helpers/chrome_thread_helper.html', 'tracing/model/instant_event.html', 'tracing/model/ir_coverage.html', 'tracing/model/kernel.html', @@ -447,6 +457,7 @@ 'tracing/ui/extras/v8_config.html', 'tracing/ui/find_control.html', 'tracing/ui/find_controller.html', + 'tracing/ui/null_brushing_state_controller.html', 'tracing/ui/scripting_control.html', 'tracing/ui/side_panel/file_size_stats_side_panel.html', 'tracing/ui/side_panel/metrics_side_panel.html', @@ -528,8 +539,9 @@ 'tracing/value/diagnostics/telemetry_info.html', 'tracing/value/diagnostics/unmergeable_diagnostic_set.html', 'tracing/value/histogram.html', + 'tracing/value/histogram_parameter_collector.html', 'tracing/value/histogram_set.html', - 'tracing/value/ui/array_of_numbers_span.html', + 'tracing/value/histogram_set_hierarchy.html', 'tracing/value/ui/breakdown_span.html', 'tracing/value/ui/buildbot_info_span.html', 'tracing/value/ui/collected_related_event_set_span.html', @@ -537,12 +549,13 @@ 'tracing/value/ui/diagnostic_map_table.html', 'tracing/value/ui/diagnostic_span.html', 'tracing/value/ui/generic_diagnostic_span.html', - 'tracing/value/ui/generic_table_view.html', + 'tracing/value/ui/histogram_set_controls.html', 'tracing/value/ui/histogram_set_table.html', 'tracing/value/ui/histogram_set_table_cell.html', 'tracing/value/ui/histogram_set_table_name_cell.html', 'tracing/value/ui/histogram_set_table_row.html', 'tracing/value/ui/histogram_set_view.html', + 'tracing/value/ui/histogram_set_view_state.html', 'tracing/value/ui/histogram_span.html', 'tracing/value/ui/merged_buildbot_info_span.html', 'tracing/value/ui/merged_device_info_span.html', diff --git a/chromium/third_party/icu/android/icudtl.dat b/chromium/third_party/icu/android/icudtl.dat Binary files differindex 83a7b734af0..a3331800173 100644 --- a/chromium/third_party/icu/android/icudtl.dat +++ b/chromium/third_party/icu/android/icudtl.dat diff --git a/chromium/third_party/icu/common/icudtb.dat b/chromium/third_party/icu/common/icudtb.dat Binary files differindex ad94e512aab..230e61f7b95 100644 --- a/chromium/third_party/icu/common/icudtb.dat +++ b/chromium/third_party/icu/common/icudtb.dat diff --git a/chromium/third_party/icu/common/icudtl.dat b/chromium/third_party/icu/common/icudtl.dat Binary files differindex 6f579afc58c..f8c4741cb75 100644 --- a/chromium/third_party/icu/common/icudtl.dat +++ b/chromium/third_party/icu/common/icudtl.dat diff --git a/chromium/third_party/icu/patches/linebrk.patch b/chromium/third_party/icu/patches/linebrk.patch index e38ba4cec07..4229ee47fad 100644 --- a/chromium/third_party/icu/patches/linebrk.patch +++ b/chromium/third_party/icu/patches/linebrk.patch @@ -1,15 +1,3 @@ -diff --git a/source/data/brkitr/brklocal.mk b/source/data/brkitr/brklocal.mk -index 204458c..b5eca75 100644 ---- a/source/data/brkitr/brklocal.mk -+++ b/source/data/brkitr/brklocal.mk -@@ -41,6 +41,7 @@ BRK_DICT_SOURCE = burmesedict.txt cjdict.txt khmerdict.txt laodict.txt\ - # List of break iterator files (brk). - BRK_SOURCE = char.txt line.txt\ - line_normal.txt line_normal_cj.txt line_normal_fi.txt\ -+ line_loose_cj.txt\ - sent.txt sent_el.txt title.txt word.txt - - diff --git a/source/data/brkitr/fi.txt b/source/data/brkitr/fi.txt index 3c07f15..72029ee 100644 --- a/source/data/brkitr/fi.txt diff --git a/chromium/third_party/icu/scripts/data_files_to_preserve.txt b/chromium/third_party/icu/scripts/data_files_to_preserve.txt index 235f35331b2..a116da8c130 100644 --- a/chromium/third_party/icu/scripts/data_files_to_preserve.txt +++ b/chromium/third_party/icu/scripts/data_files_to_preserve.txt @@ -14,8 +14,8 @@ region/reslocal.mk locales/reslocal.mk unit/reslocal.mk sprep/spreplocal.mk -brkitr/khmerdict.txt -brkitr/word_ja.txt +brkitr/dictionaries/khmerdict.txt +brkitr/rules/word_ja.txt locales/an.txt locales/ku.txt locales/tg.txt diff --git a/chromium/third_party/icu/scripts/trim_data.sh b/chromium/third_party/icu/scripts/trim_data.sh index 46be26c88ac..a60bd46bd89 100755 --- a/chromium/third_party/icu/scripts/trim_data.sh +++ b/chromium/third_party/icu/scripts/trim_data.sh @@ -3,6 +3,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +set -e # Remove entries currently not used in Chromium/V8. function filter_locale_data { @@ -184,6 +185,14 @@ function filter_unit_data { /^ \}$/ p d }' ${i} + + # Delete empty units,units{Narrow|Short} block. Otherwise, locale fallback + # fails. See crbug.com/707515. + sed -r -i \ + '/^ units(|Narrow|Short)\{$/ { + N + /^ units(|Narrow|Short)\{\n \}/ d + }' ${i} done } diff --git a/chromium/third_party/icu/scripts/update.sh b/chromium/third_party/icu/scripts/update.sh index ee1f90f6638..a6f2399fc6e 100755 --- a/chromium/third_party/icu/scripts/update.sh +++ b/chromium/third_party/icu/scripts/update.sh @@ -14,7 +14,7 @@ fi version="$1" repoprefix="http://source.icu-project.org/repos/icu/icu/tags/release-" -repo="${repoprefix}${version}" +repo="${repoprefix}${version}/icu4c" treeroot="$(dirname "$0")/.." # Check if the repo for $version is available. diff --git a/chromium/third_party/icu/source/data/misc/metaZones.txt b/chromium/third_party/icu/source/data/misc/metaZones.txt index e63ae3cefa4..5af96ba9152 100644 --- a/chromium/third_party/icu/source/data/misc/metaZones.txt +++ b/chromium/third_party/icu/source/data/misc/metaZones.txt @@ -212,7 +212,6 @@ metaZones:table(nofallback){ } Chile{ 001{"America/Santiago"} - AQ{"Antarctica/Palmer"} } China{ 001{"Asia/Shanghai"} @@ -2245,6 +2244,13 @@ metaZones:table(nofallback){ "Atlantic", } } + "America:Punta_Arenas"{ + { + "Chile", + "1970-01-01 00:00", + "2016-12-03 23:00", + } + } "America:Rainy_River"{ { "America_Central", @@ -2576,7 +2582,7 @@ metaZones:table(nofallback){ { "Chile", "1982-05-01 03:00", - "9999-12-31 23:59", + "2016-12-03 23:00", } } "Antarctica:Rothera"{ @@ -3454,6 +3460,11 @@ metaZones:table(nofallback){ "America_Eastern", } } + "Etc:GMT"{ + { + "GMT", + } + } "Europe:Amsterdam"{ { "Europe_Central", diff --git a/chromium/third_party/icu/source/data/misc/timezoneTypes.txt b/chromium/third_party/icu/source/data/misc/timezoneTypes.txt index 07a4ac4b5c4..92be78c5db3 100644 --- a/chromium/third_party/icu/source/data/misc/timezoneTypes.txt +++ b/chromium/third_party/icu/source/data/misc/timezoneTypes.txt @@ -80,10 +80,9 @@ timezoneTypes:table(nofallback){ "Etc:GMT-0"{"Etc/GMT"} "Etc:GMT0"{"Etc/GMT"} "Etc:Greenwich"{"Etc/GMT"} - "Etc:UCT"{"Etc/GMT"} - "Etc:UTC"{"Etc/GMT"} - "Etc:Universal"{"Etc/GMT"} - "Etc:Zulu"{"Etc/GMT"} + "Etc:UCT"{"Etc/UTC"} + "Etc:Universal"{"Etc/UTC"} + "Etc:Zulu"{"Etc/UTC"} "Europe:Belfast"{"Europe/London"} "Europe:Nicosia"{"Asia/Nicosia"} "Europe:Tiraspol"{"Europe/Chisinau"} @@ -138,11 +137,11 @@ timezoneTypes:table(nofallback){ ROK{"Asia/Seoul"} Singapore{"Asia/Singapore"} Turkey{"Europe/Istanbul"} - UCT{"Etc/GMT"} - UTC{"Etc/GMT"} - Universal{"Etc/GMT"} + UCT{"Etc/UTC"} + UTC{"Etc/UTC"} + Universal{"Etc/UTC"} W-SU{"Europe/Moscow"} - Zulu{"Etc/GMT"} + Zulu{"Etc/UTC"} } } typeMap{ @@ -316,6 +315,7 @@ timezoneTypes:table(nofallback){ "America:Port_of_Spain"{"ttpos"} "America:Porto_Velho"{"brpvh"} "America:Puerto_Rico"{"prsju"} + "America:Punta_Arenas"{"clpuq"} "America:Rainy_River"{"caffs"} "America:Rankin_Inlet"{"cayek"} "America:Recife"{"brrec"} @@ -463,7 +463,7 @@ timezoneTypes:table(nofallback){ "Australia:Melbourne"{"aumel"} "Australia:Perth"{"auper"} "Australia:Sydney"{"ausyd"} - "Etc:GMT"{"utc"} + "Etc:GMT"{"gmt"} "Etc:GMT+1"{"utcw01"} "Etc:GMT+10"{"utcw10"} "Etc:GMT+11"{"utcw11"} @@ -490,6 +490,7 @@ timezoneTypes:table(nofallback){ "Etc:GMT-7"{"utce07"} "Etc:GMT-8"{"utce08"} "Etc:GMT-9"{"utce09"} + "Etc:UTC"{"utc"} "Etc:Unknown"{"unk"} "Europe:Amsterdam"{"nlams"} "Europe:Andorra"{"adalv"} diff --git a/chromium/third_party/icu/source/data/misc/windowsZones.txt b/chromium/third_party/icu/source/data/misc/windowsZones.txt index 4606b168fb7..fdad2a665c8 100644 --- a/chromium/third_party/icu/source/data/misc/windowsZones.txt +++ b/chromium/third_party/icu/source/data/misc/windowsZones.txt @@ -457,7 +457,6 @@ windowsZones:table(nofallback){ } "Pacific SA Standard Time"{ 001{"America/Santiago"} - AQ{"Antarctica/Palmer"} CL{"America/Santiago"} } "Pacific Standard Time (Mexico)"{ @@ -504,11 +503,12 @@ windowsZones:table(nofallback){ } "SA Eastern Standard Time"{ 001{"America/Cayenne"} - AQ{"Antarctica/Rothera"} + AQ{"Antarctica/Rothera Antarctica/Palmer"} BR{ "America/Fortaleza America/Belem America/Maceio America/Recife Americ" "a/Santarem" } + CL{"America/Punta_Arenas"} FK{"Atlantic/Stanley"} GF{"America/Cayenne"} SR{"America/Paramaribo"} @@ -648,6 +648,7 @@ windowsZones:table(nofallback){ } "Turkey Standard Time"{ 001{"Europe/Istanbul"} + CY{"Asia/Famagusta"} TR{"Europe/Istanbul"} } "Turks And Caicos Standard Time"{ @@ -668,7 +669,7 @@ windowsZones:table(nofallback){ "UTC"{ 001{"Etc/GMT"} GL{"America/Danmarkshavn"} - ZZ{"Etc/GMT"} + ZZ{"Etc/GMT Etc/UTC"} } "UTC+12"{ 001{"Etc/GMT-12"} diff --git a/chromium/third_party/icu/source/data/misc/zoneinfo64.txt b/chromium/third_party/icu/source/data/misc/zoneinfo64.txt index ed5bc311ad2..872958f9017 100644 --- a/chromium/third_party/icu/source/data/misc/zoneinfo64.txt +++ b/chromium/third_party/icu/source/data/misc/zoneinfo64.txt @@ -3,20 +3,20 @@ // License & terms of use: http://www.unicode.org/copyright.html#License //--------------------------------------------------------- // Build tool: tz2icu -// Build date: Tue Nov 29 01:50:23 2016 +// Build date: Mon Mar 20 17:49:58 2017 // tz database: ftp://ftp.iana.org/tz/ -// tz version: 2016j -// ICU version: 58.1 +// tz version: 2017b +// ICU version: 59.1 //--------------------------------------------------------- // >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! << // >> !!! >>> DO NOT EDIT <<< !!! << //--------------------------------------------------------- zoneinfo64:table(nofallback) { - TZVersion { "2016j" } + TZVersion { "2017b" } Zones:array { - /* ACT */ :int { 353 } //Z#0 - /* AET */ :int { 365 } //Z#1 + /* ACT */ :int { 354 } //Z#0 + /* AET */ :int { 366 } //Z#1 /* AGT */ :int { 64 } //Z#2 /* ART */ :int { 18 } //Z#3 /* AST */ :int { 60 } //Z#4 @@ -24,7 +24,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1830383032 } typeOffsets:intvector { -968, 0, 0, 0 } typeMap:bin { "01" } - links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 54, 55, 345 } + links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 54, 55, 346 } } //Z#5 /* Africa/Accra */ :table { trans:intvector { -1640995148, -1556841600, -1546388400, -1525305600, -1514852400, -1493769600, -1483316400, -1462233600, -1451780400, -1430611200, -1420158000, -1399075200, -1388622000, -1367539200, -1357086000, -1336003200, -1325550000, -1304380800, -1293927600, -1272844800, -1262391600, -1241308800, -1230855600, -1209772800, -1199319600, -1178150400, -1167697200, -1146614400, -1136161200, -1115078400, -1104625200, -1083542400, -1073089200, -1051920000, -1041466800, -1020384000, -1009930800, -988848000, -978394800, -957312000, -946858800, -925689600, -915236400, -894153600, -883700400, -862617600, -852164400 } @@ -56,7 +56,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -929844000, -923108400, -906170400, -892868400, -875844000, -857790000, -844308000, -825822000, -812685600, -794199600, -779853600, -762663600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -71107200, -52707600, -39484800, -21171600, -7948800, 10364400, 23587200, 41900400, 55123200, 73522800, 86745600, 105058800, 118281600, 136594800, 149817600, 168130800, 181353600, 199753200, 212976000, 231289200, 244512000, 262825200, 276048000, 294361200, 307584000, 325983600, 339206400, 357519600, 370742400, 396399600, 402278400, 426812400, 433814400, 452214000, 465436800, 483750000, 496972800, 515286000, 528508800, 546822000, 560044800, 578444400, 591667200, 610412400, 623203200, 641516400, 654739200, 673052400, 686275200, 704674800, 717897600, 736210800, 749433600, 767746800, 780969600, 799020000, 812322000, 830469600, 843771600, 861919200, 875221200, 893368800, 906670800, 925423200, 938725200, 956872800, 970174800, 988322400, 1001624400, 1019772000, 1033074000, 1051221600, 1064523600, 1083276000, 1096578000, 1114725600, 1128027600, 1146175200, 1158872400, 1177624800, 1189112400, 1209074400, 1219957200, 1240524000, 1250802000, 1272578400, 1281474000, 1284069600, 1285880400, 1400191200, 1403816400, 1406844000, 1411678800 } typeOffsets:intvector { 7509, 0, 7200, 0, 7200, 3600 } typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 3, 18, 399 } + links:intvector { 3, 18, 400 } } //Z#18 /* Africa/Casablanca */ :table { trans:intvector { -1773012580, -956361600, -950490000, -942019200, -761187600, -617241600, -605149200, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 504918000, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 1509242400, 1521943200, 1526176800, 1529200800, 1540692000, 1553997600, 1557021600, 1560045600, 1572141600, 1585447200, 1587261600, 1590285600, 1603591200, 1616896800, 1618106400, 1621130400, 1635645600, 1651975200, 1667095200, 1682215200, 1698544800, 1713060000, 1729994400, 1743904800, 1761444000, 1774749600, 1792893600, 1806199200, 1824948000, 1837648800, 1856397600, 1869098400, 1887847200, 1901152800, 1919296800, 1932602400, 1950746400, 1964052000, 1982800800, 1995501600, 2014250400, 2026951200, 2045700000, 2058400800, 2077149600, 2090455200, 2107994400, 2121904800, 2138234400 } @@ -68,8 +68,8 @@ zoneinfo64:table(nofallback) { finalYear:int { 2039 } } //Z#19 /* Africa/Ceuta */ :table { - transPre32:intvector { -1, 2117515772 } - trans:intvector { -1630112400, -1616810400, -1442451600, -1427677200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } + transPre32:intvector { -1, 2117514496 } + trans:intvector { -1630112400, -1616810400, -1442451600, -1427673600, -1379293200, -1364774400, -1348448400, -1333324800, -1316390400, -1301270400, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -1276, 0, 0, 0, 0, 3600, 3600, 0, 3600, 3600 } typeMap:bin { "0102010201020102010201020102010201020102010304030403040304030403040304030403040304030403" } finalRule { "EU" } @@ -126,13 +126,13 @@ zoneinfo64:table(nofallback) { trans:intvector { -2109291020 } typeOffsets:intvector { 7820, 0, 7200, 0 } typeMap:bin { "01" } - links:intvector { 15, 17, 28, 29, 34, 40, 41, 43, 376 } + links:intvector { 15, 17, 28, 29, 34, 40, 41, 43, 377 } } //Z#43 /* Africa/Maseru */ :int { 30 } //Z#44 /* Africa/Mbabane */ :int { 30 } //Z#45 /* Africa/Mogadishu */ :int { 48 } //Z#46 /* Africa/Monrovia */ :table { - trans:intvector { -1604359012, 73529070 } + trans:intvector { -1604359012, 63593070 } typeOffsets:intvector { -2588, 0, -2670, 0, 0, 0 } typeMap:bin { "0102" } } //Z#47 @@ -140,7 +140,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1309746436, -1262314800, -946780200, -315629100 } typeOffsets:intvector { 8836, 0, 9000, 0, 9900, 0, 10800, 0 } typeMap:bin { "03010203" } - links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 394, 513, 517, 522 } + links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 395, 514, 518, 523 } } //Z#48 /* Africa/Ndjamena */ :table { trans:intvector { -1830387612, 308703600, 321314400 } @@ -157,7 +157,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1577926364, -574902000, -568087200, -512175600, -504928800, -449888400, -441856800, -347158800, 378684000, 386463600, 402271200, 417999600, 433807200, 449622000, 465429600, 481590000, 496965600, 512953200, 528674400, 544230000, 560037600, 575852400, 591660000, 607388400, 623196000, 641775600, 844034400, 860108400, 875916000, 1352505600, 1364515200, 1382659200 } typeOffsets:intvector { 3164, 0, 3600, 0, 3600, 3600, 7200, 0 } typeMap:bin { "0102010201020103010201020102010201020102010201020103010203010203" } - links:intvector { 56, 530 } + links:intvector { 56, 531 } } //Z#56 /* Africa/Tunis */ :table { transPre32:intvector { -1, 1497764852 } @@ -182,7 +182,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -36000 } finalYear:int { 2008 } - links:intvector { 59, 80, 614 } + links:intvector { 59, 80, 615 } } //Z#59 /* America/Anchorage */ :table { transPre32:intvector { -1, 1069604872, -1, 2106016072 } @@ -192,7 +192,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -32400 } finalYear:int { 2008 } - links:intvector { 4, 60, 613 } + links:intvector { 4, 60, 614 } } //Z#60 /* America/Anguilla */ :int { 186 } //Z#61 /* America/Antigua */ :int { 186 } //Z#62 @@ -220,7 +220,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400, 1198983600, 1205632800, 1224385200, 1237082400 } typeOffsets:intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020103040304030403040104030403020304030403" } - links:intvector { 67, 101, 196 } + links:intvector { 67, 101, 197 } } //Z#67 /* America/Argentina/Jujuy */ :table { transPre32:intvector { -1, 1922870968 } @@ -392,7 +392,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -21600 } finalYear:int { 2008 } - links:intvector { 98, 379, 616 } + links:intvector { 98, 380, 617 } } //Z#98 /* America/Chihuahua */ :table { trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, 828864000, 846399600, 860313600, 877849200, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 989139600, 1001836800, 1018170000, 1035705600 } @@ -458,7 +458,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -25200 } finalYear:int { 2008 } - links:intvector { 109, 203, 542, 622 } + links:intvector { 109, 204, 543, 623 } } //Z#109 /* America/Detroit */ :table { trans:intvector { -2051202469, -1724083200, -880218000, -765396000, -684349200, -671047200, -80499600, -68666400, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } @@ -467,7 +467,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -18000 } finalYear:int { 2008 } - links:intvector { 110, 621 } + links:intvector { 110, 622 } } //Z#110 /* America/Dominica */ :int { 186 } //Z#111 /* America/Edmonton */ :table { @@ -477,7 +477,7 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -25200 } finalYear:int { 2008 } - links:intvector { 112, 386 } + links:intvector { 112, 387 } } //Z#112 /* America/Eirunepe */ :table { trans:intvector { -1767208832, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 750834000, 761716800, 1214283600, 1384056000 } @@ -489,7 +489,7 @@ zoneinfo64:table(nofallback) { typeOffsets:intvector { -21408, 0, -21600, 0, -21600, 3600 } typeMap:bin { "0102010201" } } //Z#114 - /* America/Ensenada */ :int { 215 } //Z#115 + /* America/Ensenada */ :int { 216 } //Z#115 /* America/Fort_Nelson */ :table { transPre32:intvector { -1, 1581086343 } trans:intvector { -1632060000, -1615129200, -880207200, -765385200, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800, 1205056800, 1225616400, 1236506400, 1257066000, 1268560800, 1289120400, 1300010400, 1320570000, 1331460000, 1352019600, 1362909600, 1383469200, 1394359200, 1414918800, 1425808800 } @@ -542,9 +542,9 @@ zoneinfo64:table(nofallback) { } //Z#125 /* America/Guayaquil */ :table { transPre32:intvector { -1, 1770464856 } - trans:intvector { -1230749160 } - typeOffsets:intvector { -19160, 0, -18840, 0, -18000, 0 } - typeMap:bin { "0102" } + trans:intvector { -1230749160, 722926800, 728884800 } + typeOffsets:intvector { -19160, 0, -18840, 0, -18000, 0, -18000, 3600 } + typeMap:bin { "01020302" } } //Z#126 /* America/Guyana */ :table { trans:intvector { -1730578040, 176010300, 662698800 } @@ -558,7 +558,7 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -14400 } finalYear:int { 2008 } - links:intvector { 128, 382 } + links:intvector { 128, 383 } } //Z#128 /* America/Havana */ :table { transPre32:intvector { -1, 1770465464 } @@ -568,7 +568,7 @@ zoneinfo64:table(nofallback) { finalRule { "Cuba" } finalRaw:int { -18000 } finalYear:int { 2014 } - links:intvector { 129, 393 } + links:intvector { 129, 394 } } //Z#129 /* America/Hermosillo */ :table { trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -873828000, -661539600, 28800, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400 } @@ -583,7 +583,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -18000 } finalYear:int { 2008 } - links:intvector { 117, 131, 139, 510, 617 } + links:intvector { 117, 131, 139, 511, 618 } } //Z#131 /* America/Indiana/Knox */ :table { transPre32:intvector { -1, 1577320096 } @@ -593,7 +593,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -21600 } finalYear:int { 2008 } - links:intvector { 132, 147, 620 } + links:intvector { 132, 147, 621 } } //Z#132 /* America/Indiana/Marengo */ :table { transPre32:intvector { -1, 1577320096 } @@ -670,7 +670,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1827687169, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600 } typeOffsets:intvector { -18431, 0, -18000, 0, -18000, 3600 } typeMap:bin { "010201020102010201020102010201020102010201" } - links:intvector { 142, 527 } + links:intvector { 142, 528 } } //Z#142 /* America/Jujuy */ :int { 68 } //Z#143 /* America/Juneau */ :table { @@ -722,7 +722,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -28800 } finalYear:int { 2008 } - links:intvector { 151, 547, 623, 624 } + links:intvector { 151, 548, 624, 625 } } //Z#151 /* America/Louisville */ :int { 145 } //Z#152 /* America/Lower_Princes */ :int { 105 } //Z#153 @@ -741,7 +741,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1767211196, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 750830400, 761713200 } typeOffsets:intvector { -14404, 0, -14400, 0, -14400, 3600 } typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 156, 375 } + links:intvector { 156, 376 } } //Z#156 /* America/Marigot */ :int { 186 } //Z#157 /* America/Martinique */ :table { @@ -764,7 +764,7 @@ zoneinfo64:table(nofallback) { finalRule { "Mexico" } finalRaw:int { -25200 } finalYear:int { 2003 } - links:intvector { 160, 536 } + links:intvector { 160, 537 } } //Z#160 /* America/Mendoza */ :int { 70 } //Z#161 /* America/Menominee */ :table { @@ -800,7 +800,7 @@ zoneinfo64:table(nofallback) { finalRule { "Mexico" } finalRaw:int { -21600 } finalYear:int { 2003 } - links:intvector { 165, 537 } + links:intvector { 165, 538 } } //Z#165 /* America/Miquelon */ :table { trans:intvector { -1850328920, 326001600, 544597200, 562132800, 576046800, 594187200, 607496400, 625636800, 638946000, 657086400, 671000400, 688536000, 702450000, 719985600, 733899600, 752040000, 765349200, 783489600, 796798800, 814939200, 828853200, 846388800, 860302800, 877838400, 891752400, 909288000, 923202000, 941342400, 954651600, 972792000, 986101200, 1004241600, 1018155600, 1035691200, 1049605200, 1067140800, 1081054800, 1099195200, 1112504400, 1130644800, 1143954000, 1162094400, 1173589200, 1194148800 } @@ -832,7 +832,7 @@ zoneinfo64:table(nofallback) { typeOffsets:intvector { -13484, 0, -12600, 0, -12600, 1800, -10800, 0, -10800, 1800, -10800, 3600 } typeMap:bin { "0102010201020102010201020102010201020102010201020105030503050305030503050304030403040305030405030503050305030503050305030503050305030503050305030503050305030503050305030503" } } //Z#169 - /* America/Montreal */ :int { 216 } //Z#170 + /* America/Montreal */ :int { 217 } //Z#170 /* America/Montserrat */ :int { 186 } //Z#171 /* America/Nassau */ :table { trans:intvector { -1825095030, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } @@ -850,7 +850,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -18000 } finalYear:int { 2008 } - links:intvector { 173, 618 } + links:intvector { 173, 619 } } //Z#173 /* America/Nipigon */ :table { transPre32:intvector { -1, 1928233280 } @@ -874,7 +874,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1767217820, -1206961200, -1191366000, -1175378400, -1159830000, -633823200, -622072800, -602287200, -591836400, -570751200, -560214000, -539128800, -531356400, -191368800, -184201200, -155167200, -150073200, -128901600, -121129200, -99957600, -89593200, -68421600, -57970800, 499744800, 511232400, 530589600, 540262800, 562125600, 571194000, 592970400, 602038800, 624420000, 634698000, 938916000, 951613200, 970970400, 971571600, 1003024800, 1013907600 } typeOffsets:intvector { -7780, 0, -7200, 0, -7200, 3600 } typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 176, 373 } + links:intvector { 176, 374 } } //Z#176 /* America/North_Dakota/Beulah */ :table { transPre32:intvector { -1, 1577323696 } @@ -936,21 +936,24 @@ zoneinfo64:table(nofallback) { trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -820519140, -812653140, -796845540, -84380400, -68659200 } typeOffsets:intvector { -26898, 0, -25200, 0, -25200, 3600 } typeMap:bin { "0102010201020102010201" } - links:intvector { 184, 544, 615 } + links:intvector { 184, 545, 616 } } //Z#184 /* America/Port-au-Prince */ :table { transPre32:intvector { -1, 1770463056 } - trans:intvector { -1670483460, 421218000, 436334400, 452062800, 467784000, 483512400, 499233600, 514962000, 530683200, 546411600, 562132800, 576050400, 594194400, 607500000, 625644000, 638949600, 657093600, 671004000, 688543200, 702453600, 719992800, 733903200, 752047200, 765352800, 783496800, 796802400, 814946400, 828856800, 846396000, 860306400, 877845600, 1112504400, 1130644800, 1143954000, 1162094400, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600 } + trans:intvector { -1670483460, 421218000, 436334400, 452062800, 467784000, 483512400, 499233600, 514962000, 530683200, 546411600, 562132800, 576050400, 594194400, 607500000, 625644000, 638949600, 657093600, 671004000, 688543200, 702453600, 719992800, 733903200, 752047200, 765352800, 783496800, 796802400, 814946400, 828856800, 846396000, 860306400, 877845600, 1112504400, 1130644800, 1143954000, 1162094400, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600, 1489302000, 1509861600 } typeOffsets:intvector { -17360, 0, -18000, 0, -18000, 3600, -17340, 0 } - typeMap:bin { "0301020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } + typeMap:bin { "03010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } + finalRule { "Haiti" } + finalRaw:int { -18000 } + finalYear:int { 2018 } } //Z#185 /* America/Port_of_Spain */ :table { trans:intvector { -1825098836 } typeOffsets:intvector { -14764, 0, -14400, 0 } typeMap:bin { "01" } - links:intvector { 61, 62, 111, 123, 124, 157, 171, 186, 205, 207, 208, 209, 210, 217, 219 } + links:intvector { 61, 62, 111, 123, 124, 157, 171, 186, 206, 208, 209, 210, 211, 218, 220 } } //Z#186 - /* America/Porto_Acre */ :int { 195 } //Z#187 + /* America/Porto_Acre */ :int { 196 } //Z#187 /* America/Porto_Velho */ :table { trans:intvector { -1767210264, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200 } typeOffsets:intvector { -15336, 0, -14400, 0, -14400, 3600 } @@ -961,8 +964,14 @@ zoneinfo64:table(nofallback) { trans:intvector { -873057600, -765399600 } typeOffsets:intvector { -15865, 0, -14400, 0, -14400, 3600 } typeMap:bin { "010201" } - links:intvector { 189, 546 } + links:intvector { 189, 547 } } //Z#189 + /* America/Punta_Arenas */ :table { + transPre32:intvector { -1, 1770462716 } + trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 } + typeOffsets:intvector { -17020, 0, -18000, 0, -18000, 3600, -16966, 0, -14400, 0, -14400, 3600, -10800, 0 } + typeMap:bin { "0301030403020102010201020102010401040104050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040506" } + } //Z#190 /* America/Rainy_River */ :table { transPre32:intvector { -1, 1928234792 } trans:intvector { -1632067200, -1615136400, -923248800, -765392400, 136368000, 152089200, 167817600, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 } @@ -971,7 +980,7 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -21600 } finalYear:int { 2008 } - } //Z#190 + } //Z#191 /* America/Rankin_Inlet */ :table { trans:intvector { -410227200, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 } typeOffsets:intvector { 0, 0, -21600, 0, -21600, 3600, -21600, 7200, -18000, 0 } @@ -979,18 +988,18 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -21600 } finalYear:int { 2008 } - } //Z#191 + } //Z#192 /* America/Recife */ :table { trans:intvector { -1767217224, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 938919600, 951616800, 970974000, 971575200, 1003028400, 1013911200 } typeOffsets:intvector { -8376, 0, -10800, 0, -10800, 3600 } typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201" } - } //Z#192 + } //Z#193 /* America/Regina */ :table { trans:intvector { -2030202084, -1632063600, -1615132800, -1251651600, -1238349600, -1220202000, -1206900000, -1188752400, -1175450400, -1156698000, -1144000800, -1125248400, -1111946400, -1032714000, -1016992800, -1001264400, -986148000, -969814800, -954093600, -937760400, -922039200, -906310800, -890589600, -880210800, -765388800, -748450800, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -620838000, -608140800, -589388400, -576086400, -557938800, -544636800, -526489200, -513187200, -495039600, -481737600, -463590000, -450288000, -431535600, -418233600, -400086000, -386784000, -337186800, -321465600, -305737200 } typeOffsets:intvector { -25116, 0, -25200, 0, -25200, 3600, -21600, 0 } typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" } - links:intvector { 193, 384, 389 } - } //Z#193 + links:intvector { 194, 385, 390 } + } //Z#194 /* America/Resolute */ :table { trans:intvector { -704937600, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 } typeOffsets:intvector { 0, 0, -21600, 0, -21600, 3600, -21600, 7200, -18000, 0 } @@ -998,20 +1007,20 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -21600 } finalYear:int { 2008 } - } //Z#194 + } //Z#195 /* America/Rio_Branco */ :table { trans:intvector { -1767209328, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 1214283600, 1384056000 } typeOffsets:intvector { -16272, 0, -18000, 0, -18000, 3600, -14400, 0 } typeMap:bin { "01020102010201020102010201020102010201020102010201020102010301" } - links:intvector { 187, 195, 372 } - } //Z#195 - /* America/Rosario */ :int { 67 } //Z#196 - /* America/Santa_Isabel */ :int { 215 } //Z#197 + links:intvector { 187, 196, 373 } + } //Z#196 + /* America/Rosario */ :int { 67 } //Z#197 + /* America/Santa_Isabel */ :int { 216 } //Z#198 /* America/Santarem */ :table { trans:intvector { -1767212472, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 1214280000 } typeOffsets:intvector { -13128, 0, -14400, 0, -14400, 3600, -10800, 0 } typeMap:bin { "010201020102010201020102010201020102010201020102010201020103" } - } //Z#198 + } //Z#199 /* America/Santiago */ :table { trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736376400, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 } typeOffsets:intvector { -16966, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600 } @@ -1019,14 +1028,14 @@ zoneinfo64:table(nofallback) { finalRule { "Chile" } finalRaw:int { -14400 } finalYear:int { 2017 } - links:intvector { 199, 391 } - } //Z#199 + links:intvector { 200, 392 } + } //Z#200 /* America/Santo_Domingo */ :table { transPre32:intvector { -1, 1770462472 } trans:intvector { -1159773600, -100119600, -89668800, -5770800, 4422600, 25678800, 33193800, 57733200, 64816200, 89182800, 96438600, 120632400, 127974600, 152082000, 972799200, 975823200 } typeOffsets:intvector { -16776, 0, -18000, 0, -18000, 1800, -18000, 3600, -16800, 0, -14400, 0 } typeMap:bin { "0401030102010201020102010201050105" } - } //Z#200 + } //Z#201 /* America/Sao_Paulo */ :table { trans:intvector { -1767214412, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -195426000, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1066532400, 1076810400, 1099364400, 1108864800, 1129431600, 1140314400, 1162695600, 1172368800, 1192330800, 1203213600, 1224385200, 1234663200, 1255834800, 1266717600, 1287284400, 1298167200, 1318734000, 1330221600, 1350788400, 1361066400, 1382238000, 1392516000, 1413687600, 1424570400, 1445137200, 1456020000, 1476586800, 1487469600, 1508036400, 1518919200, 1540090800, 1550368800, 1571540400, 1581818400, 1602990000, 1613872800, 1634439600, 1645322400, 1665889200, 1677376800, 1697338800, 1708221600, 1729393200, 1739671200, 1760842800, 1771725600, 1792292400, 1803175200, 1823742000, 1834624800, 1855191600, 1866074400, 1887246000, 1897524000, 1918695600, 1928973600, 1950145200, 1960423200, 1981594800, 1992477600, 2013044400, 2024532000, 2044494000, 2055376800, 2076548400, 2086826400, 2107998000, 2118880800, 2139447600 } transPost32:intvector { 0, -2144636896, 0, -2124070096 } @@ -1035,8 +1044,8 @@ zoneinfo64:table(nofallback) { finalRule { "Brazil" } finalRaw:int { -10800 } finalYear:int { 2039 } - links:intvector { 201, 370, 374 } - } //Z#201 + links:intvector { 202, 371, 375 } + } //Z#202 /* America/Scoresbysund */ :table { trans:intvector { -1686090728, 323841600, 338961600, 354679200, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -5272, 0, -7200, 0, -7200, 3600, -3600, 0, -3600, 3600 } @@ -1044,8 +1053,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { -3600 } finalYear:int { 1997 } - } //Z#202 - /* America/Shiprock */ :int { 109 } //Z#203 + } //Z#203 + /* America/Shiprock */ :int { 109 } //Z#204 /* America/Sitka */ :table { transPre32:intvector { -1, 1069601369, -1, 2106012569 } trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 } @@ -1054,8 +1063,8 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -32400 } finalYear:int { 2008 } - } //Z#204 - /* America/St_Barthelemy */ :int { 186 } //Z#205 + } //Z#205 + /* America/St_Barthelemy */ :int { 186 } //Z#206 /* America/St_Johns */ :table { trans:intvector { -1664130548, -1650137348, -1632076148, -1615145348, -1598650148, -1590100148, -1567286948, -1551565748, -1535837348, -1520116148, -1503782948, -1488666548, -1472333348, -1457216948, -1440883748, -1425767348, -1409434148, -1394317748, -1377984548, -1362263348, -1346534948, -1330813748, -1314480548, -1299364148, -1283030948, -1267914548, -1251581348, -1236464948, -1220131748, -1205015348, -1188682148, -1172960948, -1156627748, -1141511348, -1125178148, -1110061748, -1096921748, -1093728600, -1078612200, -1061670600, -1048973400, -1030221000, -1017523800, -998771400, -986074200, -966717000, -954624600, -935267400, -922570200, -903817800, -891120600, -872368200, -765401400, -746044200, -733347000, -714594600, -701897400, -683145000, -670447800, -651695400, -638998200, -619641000, -606943800, -589401000, -576099000, -557951400, -544649400, -526501800, -513199800, -495052200, -481750200, -463602600, -450300600, -431548200, -418246200, -400098600, -386796600, -368649000, -355347000, -337199400, -323897400, -305749800, -289423800, -273695400, -257974200, -242245800, -226524600, -210796200, -195075000, -179346600, -163625400, -147897000, -131571000, -116447400, -100121400, -84393000, -68671800, -52943400, -37222200, -21493800, -5772600, 9955800, 25677000, 41405400, 57731400, 73459800, 89181000, 104909400, 120630600, 136359000, 152080200, 167808600, 183529800, 199258200, 215584200, 230707800, 247033800, 262762200, 278483400, 294211800, 309933000, 325661400, 341382600, 357111000, 372832200, 388560600, 404886600, 420010200, 436336200, 452064600, 467785800, 483514200, 499235400, 514963800, 530685000, 544591860, 562127460, 576041460, 594178260, 607491060, 625631460, 638940660, 657081060, 670995060, 688530660, 702444660, 719980260, 733894260, 752034660, 765343860, 783484260, 796793460, 814933860, 828847860, 846383460, 860297460, 877833060, 891747060, 909282660, 923196660, 941337060, 954646260, 972786660, 986095860, 1004236260, 1018150260, 1035685860, 1049599860, 1067135460, 1081049460, 1099189860, 1112499060, 1130639460, 1143948660, 1162089060, 1173583860, 1194143460, 1205033460, 1225593060, 1236483060, 1257042660, 1268537460, 1289097060, 1299987060, 1320553800, 1331443800, 1352003400 } typeOffsets:intvector { -12652, 0, -12652, 3600, -12600, 0, -12600, 3600, -12600, 7200 } @@ -1063,22 +1072,22 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -12600 } finalYear:int { 2013 } - links:intvector { 206, 378, 387 } - } //Z#206 - /* America/St_Kitts */ :int { 186 } //Z#207 - /* America/St_Lucia */ :int { 186 } //Z#208 - /* America/St_Thomas */ :int { 186 } //Z#209 - /* America/St_Vincent */ :int { 186 } //Z#210 + links:intvector { 207, 379, 388 } + } //Z#207 + /* America/St_Kitts */ :int { 186 } //Z#208 + /* America/St_Lucia */ :int { 186 } //Z#209 + /* America/St_Thomas */ :int { 186 } //Z#210 + /* America/St_Vincent */ :int { 186 } //Z#211 /* America/Swift_Current */ :table { trans:intvector { -2030201320, -1632063600, -1615132800, -880210800, -765388800, -747241200, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -400086000, -384364800, -337186800, -321465600, -305737200, -292435200, -273682800, -260985600, 73472400 } typeOffsets:intvector { -25880, 0, -25200, 0, -25200, 3600, -21600, 0 } typeMap:bin { "01020102010201020102010201020102010201020103" } - } //Z#211 + } //Z#212 /* America/Tegucigalpa */ :table { trans:intvector { -1538503868, 547020000, 559717200, 578469600, 591166800, 1146981600, 1154926800 } typeOffsets:intvector { -20932, 0, -21600, 0, -21600, 3600 } typeMap:bin { "01020102010201" } - } //Z#212 + } //Z#213 /* America/Thule */ :table { trans:intvector { -1686079492, 670399200, 686120400, 701848800, 717570000, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 } typeOffsets:intvector { -16508, 0, -14400, 0, -14400, 3600 } @@ -1086,7 +1095,7 @@ zoneinfo64:table(nofallback) { finalRule { "Thule" } finalRaw:int { -14400 } finalYear:int { 2008 } - } //Z#213 + } //Z#214 /* America/Thunder_Bay */ :table { transPre32:intvector { -1, 1928233516 } trans:intvector { -1893434400, -880218000, -765396000, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } @@ -1095,7 +1104,7 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -18000 } finalYear:int { 2008 } - } //Z#214 + } //Z#215 /* America/Tijuana */ :table { trans:intvector { -1514736000, -1451667600, -1343062800, -1234803600, -1222963200, -1207242000, -873820800, -761677200, -686073600, -661539600, -495039600, -481734000, -463590000, -450284400, -431535600, -418230000, -400086000, -386780400, -368636400, -355330800, -337186800, -323881200, -305737200, -292431600, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1175421600, 1193562000, 1207476000, 1225011600, 1238925600, 1256461200, 1268560800, 1289120400 } typeOffsets:intvector { -28084, 0, -28800, 0, -28800, 3600, -25200, 0 } @@ -1103,8 +1112,8 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -28800 } finalYear:int { 2011 } - links:intvector { 115, 197, 215, 535 } - } //Z#215 + links:intvector { 115, 198, 216, 536 } + } //Z#216 /* America/Toronto */ :table { transPre32:intvector { -1, 1928231148 } trans:intvector { -1632070800, -1615140000, -1601753400, -1583697600, -1567357200, -1554667200, -1534698000, -1524074400, -1503248400, -1492365600, -1471798800, -1460916000, -1440954000, -1428861600, -1409504400, -1397412000, -1378054800, -1365962400, -1346605200, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1188752400, -1176055200, -1157302800, -1144000800, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -765396000, -747248400, -733946400, -715806000, -702504000, -684356400, -671054400, -652906800, -634161600, -620845200, -602704800, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -450295200, -431542800, -418240800, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } @@ -1113,9 +1122,9 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -18000 } finalYear:int { 2008 } - links:intvector { 170, 216, 385 } - } //Z#216 - /* America/Tortola */ :int { 186 } //Z#217 + links:intvector { 170, 217, 386 } + } //Z#217 + /* America/Tortola */ :int { 186 } //Z#218 /* America/Vancouver */ :table { transPre32:intvector { -1, 1581086444 } trans:intvector { -1632060000, -1615129200, -880207200, -765385200, -747237600, -732726000, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 } @@ -1124,9 +1133,9 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -28800 } finalYear:int { 2008 } - links:intvector { 218, 388 } - } //Z#218 - /* America/Virgin */ :int { 186 } //Z#219 + links:intvector { 219, 389 } + } //Z#219 + /* America/Virgin */ :int { 186 } //Z#220 /* America/Whitehorse */ :table { transPre32:intvector { -1, 2105969308 } trans:intvector { -1632056400, -1615125600, -1596978000, -1583164800, -880203600, -765381600, -147884400, -131554800, -81961200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 } @@ -1135,8 +1144,8 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -28800 } finalYear:int { 2008 } - links:intvector { 220, 390 } - } //Z#220 + links:intvector { 221, 391 } + } //Z#221 /* America/Winnipeg */ :table { transPre32:intvector { -1, 1692709012 } trans:intvector { -1694368800, -1681671600, -1632067200, -1615136400, -1029686400, -1018198800, -880214400, -765392400, -746035200, -732733200, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620755200, -607626000, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -321469200, -305740800, -292438800, -210787200, -198090000, -116438400, -100108800, -84384000, -68659200, -52934400, -37209600, -21484800, -5760000, 9964800, 25689600, 41414400, 57744000, 73468800, 89193600, 104918400, 120643200, 136368000, 152092800, 167817600, 183542400, 199267200, 215596800, 230716800, 247046400, 262771200, 278496000, 294220800, 309945600, 325670400, 341395200, 357120000, 372844800, 388569600, 404899200, 420019200, 436348800, 452073600, 467798400, 483523200, 499248000, 514972800, 530697600, 544608000, 562147200, 576057600, 594201600, 607507200, 625651200, 638956800, 657100800, 671011200, 688550400, 702460800, 720000000, 733910400, 752054400, 765360000, 783504000, 796809600, 814953600, 828864000, 846403200, 860313600, 877852800, 891763200, 909302400, 923212800, 941356800, 954662400, 972806400, 986112000, 1004256000, 1018166400, 1035705600, 1049616000, 1067155200, 1081065600, 1099209600, 1112515200, 1130659200, 1143964800, 1162105200, 1173600000, 1194159600 } @@ -1145,8 +1154,8 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -21600 } finalYear:int { 2008 } - links:intvector { 221, 383 } - } //Z#221 + links:intvector { 222, 384 } + } //Z#222 /* America/Yakutat */ :table { transPre32:intvector { -1, 1069602431, -1, 2106013631 } trans:intvector { -880203600, -765381600, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 152100000, 162385200, 183549600, 199278000, 215604000, 230727600, 247053600, 262782000, 278503200, 294231600, 309952800, 325681200, 341402400, 357130800, 372852000, 388580400, 404906400, 420030000, 436356000, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 } @@ -1155,7 +1164,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -32400 } finalYear:int { 2008 } - } //Z#222 + } //Z#223 /* America/Yellowknife */ :table { trans:intvector { -1104537600, -880210800, -765388800, -147891600, -131562000, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 } typeOffsets:intvector { 0, 0, -25200, 0, -25200, 3600, -25200, 7200 } @@ -1163,53 +1172,50 @@ zoneinfo64:table(nofallback) { finalRule { "Canada" } finalRaw:int { -25200 } finalYear:int { 2008 } - } //Z#223 + } //Z#224 /* Antarctica/Casey */ :table { trans:intvector { -31536000, 1255802400, 1267714800, 1319738400, 1329843600, 1477065600 } typeOffsets:intvector { 0, 0, 28800, 0, 39600, 0 } typeMap:bin { "010201020102" } - } //Z#224 + } //Z#225 /* Antarctica/Davis */ :table { trans:intvector { -409190400, -163062000, -28857600, 1255806000, 1268251200, 1319742000, 1329854400 } typeOffsets:intvector { 0, 0, 18000, 0, 25200, 0 } typeMap:bin { "02000201020102" } - } //Z#225 + } //Z#226 /* Antarctica/DumontDUrville */ :table { trans:intvector { -725846400, -566992800, -415497600 } typeOffsets:intvector { 0, 0, 36000, 0 } typeMap:bin { "010001" } - } //Z#226 + } //Z#227 /* Antarctica/Macquarie */ :table { transPre32:intvector { -1, 2080708096 } trans:intvector { -1680508800, -1665392400, -1601719200, -687052800, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000, 1238860800, 1254585600, 1270310400 } typeOffsets:intvector { 0, 0, 36000, 0, 36000, 3600, 39600, 0 } typeMap:bin { "01020100010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" } - } //Z#227 + } //Z#228 /* Antarctica/Mawson */ :table { trans:intvector { -501206400, 1255809600 } typeOffsets:intvector { 0, 0, 18000, 0, 21600, 0 } typeMap:bin { "0201" } - } //Z#228 - /* Antarctica/McMurdo */ :int { 550 } //Z#229 + } //Z#229 + /* Antarctica/McMurdo */ :int { 551 } //Z#230 /* Antarctica/Palmer */ :table { - trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 } + trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 } typeOffsets:intvector { 0, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } - typeMap:bin { "020102010201020102010304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" } - finalRule { "Chile" } - finalRaw:int { -14400 } - finalYear:int { 2017 } - } //Z#230 + typeMap:bin { "02010201020102010201030403010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" } + } //Z#231 /* Antarctica/Rothera */ :table { trans:intvector { 218246400 } typeOffsets:intvector { 0, 0, -10800, 0 } typeMap:bin { "01" } - } //Z#231 - /* Antarctica/South_Pole */ :int { 550 } //Z#232 + } //Z#232 + /* Antarctica/South_Pole */ :int { 551 } //Z#233 /* Antarctica/Syowa */ :table { trans:intvector { -407808000 } typeOffsets:intvector { 0, 0, 10800, 0 } typeMap:bin { "01" } - } //Z#233 + } //Z#234 /* Antarctica/Troll */ :table { trans:intvector { 1111885200, 1130634000 } typeOffsets:intvector { 0, 0, 0, 7200 } @@ -1217,19 +1223,19 @@ zoneinfo64:table(nofallback) { finalRule { "Troll" } finalRaw:int { 0 } finalYear:int { 2006 } - } //Z#234 + } //Z#235 /* Antarctica/Vostok */ :table { trans:intvector { -380073600 } typeOffsets:intvector { 0, 0, 21600, 0 } typeMap:bin { "01" } - } //Z#235 - /* Arctic/Longyearbyen */ :int { 472 } //Z#236 - /* Asia/Aden */ :int { 307 } //Z#237 + } //Z#236 + /* Arctic/Longyearbyen */ :int { 473 } //Z#237 + /* Asia/Aden */ :int { 308 } //Z#238 /* Asia/Almaty */ :table { trans:intvector { -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400 } typeOffsets:intvector { 18468, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403" } - } //Z#238 + } //Z#239 /* Asia/Amman */ :table { trans:intvector { -1230776624, 108165600, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 215643600, 231285600, 244501200, 262735200, 275950800, 481154400, 496962000, 512949600, 528670800, 544399200, 560120400, 575848800, 592174800, 610581600, 623624400, 641167200, 655074000, 671839200, 685918800, 702856800, 717973200, 733701600, 749422800, 765151200, 779662800, 797205600, 811116000, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 930780000, 938124000, 954367200, 970178400, 985816800, 1001628000, 1017352800, 1033077600, 1048802400, 1066946400, 1080252000, 1097791200, 1112306400, 1128031200, 1143756000, 1161900000, 1175205600, 1193349600, 1206655200, 1225404000, 1238104800, 1256853600, 1269554400, 1288303200, 1301608800, 1319752800, 1333058400, 1387486800, 1395957600, 1414706400 } typeOffsets:intvector { 8624, 0, 7200, 0, 7200, 3600 } @@ -1237,57 +1243,57 @@ zoneinfo64:table(nofallback) { finalRule { "Jordan" } finalRaw:int { 7200 } finalYear:int { 2015 } - } //Z#239 + } //Z#240 /* Asia/Anadyr */ :table { trans:intvector { -1441194596, -1247572800, 354884400, 370692000, 386420400, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701791200, 717516000, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800, 828194400, 846338400, 859644000, 877788000, 891093600, 909237600, 922543200, 941292000, 953992800, 972741600, 985442400, 1004191200, 1017496800, 1035640800, 1048946400, 1067090400, 1080396000, 1099144800, 1111845600, 1130594400, 1143295200, 1162044000, 1174744800, 1193493600, 1206799200, 1224943200, 1238248800, 1256392800, 1269698400, 1288450800, 1301151600 } typeOffsets:intvector { 42596, 0, 39600, 0, 39600, 3600, 43200, 0, 43200, 3600, 46800, 0, 46800, 3600 } typeMap:bin { "03050605040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" } - } //Z#240 + } //Z#241 /* Asia/Aqtau */ :table { trans:intvector { -1441164064, -1247544000, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 } typeOffsets:intvector { 12064, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } typeMap:bin { "0103050403040304030403040304030403040304030201030403040304010201020102010201020102010201020102010203" } - } //Z#241 + } //Z#242 /* Asia/Aqtobe */ :table { trans:intvector { -1441165720, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 } typeOffsets:intvector { 13720, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } typeMap:bin { "010304050403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403" } - } //Z#242 + } //Z#243 /* Asia/Ashgabat */ :table { trans:intvector { -1441166012, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000 } typeOffsets:intvector { 14012, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103" } - links:intvector { 243, 244 } - } //Z#243 - /* Asia/Ashkhabad */ :int { 243 } //Z#244 + links:intvector { 244, 245 } + } //Z#244 + /* Asia/Ashkhabad */ :int { 244 } //Z#245 /* Asia/Atyrau */ :table { - trans:intvector { -1441164464, -1247544000, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 } - typeOffsets:intvector { 12464, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } - typeMap:bin { "0103050403040304030403040304030403040304030201030403040304030403040304030403020102010201020102010203" } - } //Z#245 + trans:intvector { -1441164464, -1247540400, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 } + typeOffsets:intvector { 12464, 0, 10800, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } + typeMap:bin { "0104060504050405040504050405040504050405040302040504050405040504050405040504030203020302030203020304" } + } //Z#246 /* Asia/Baghdad */ :table { transPre32:intvector { -1, 1770435036 } trans:intvector { -1641005856, 389048400, 402264000, 417906000, 433800000, 449614800, 465422400, 481150800, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670464000, 686275200, 702086400, 717897600, 733622400, 749433600, 765158400, 780969600, 796694400, 812505600, 828316800, 844128000, 859852800, 875664000, 891388800, 907200000, 922924800, 938736000, 954547200, 970358400, 986083200, 1001894400, 1017619200, 1033430400, 1049155200, 1064966400, 1080777600, 1096588800, 1112313600, 1128124800, 1143849600, 1159660800, 1175385600, 1191196800 } typeOffsets:intvector { 10660, 0, 10656, 0, 10800, 0, 10800, 3600 } typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } - } //Z#246 - /* Asia/Bahrain */ :int { 304 } //Z#247 + } //Z#247 + /* Asia/Bahrain */ :int { 305 } //Z#248 /* Asia/Baku */ :table { trans:intvector { -1441163964, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701823600, 717548400, 828234000, 846378000, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000, 1319932800, 1332633600, 1351382400, 1364688000, 1382832000, 1396137600, 1414281600, 1427587200, 1445731200 } typeOffsets:intvector { 11964, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "010304030403040304030403040304030403040304030201020304030403040304030403040304030403040304030403040304030403040304030403040304030403" } - } //Z#248 + } //Z#249 /* Asia/Bangkok */ :table { trans:intvector { -1570084924 } typeOffsets:intvector { 24124, 0, 25200, 0 } typeMap:bin { "01" } - links:intvector { 249, 301, 329 } - } //Z#249 + links:intvector { 250, 302, 330 } + } //Z#250 /* Asia/Barnaul */ :table { trans:intvector { -1579844100, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 801590400, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1459022400 } typeOffsets:intvector { 20100, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040201020102010201020102010201020102010201020102010201020102010201030103" } - } //Z#250 + } //Z#251 /* Asia/Beirut */ :table { transPre32:intvector { -1, 1454817976 } trans:intvector { -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1473645600, -1460948400, -399866400, -386650800, -368330400, -355114800, -336794400, -323578800, -305172000, -291956400, -273636000, -260420400, 78012000, 86734800, 105055200, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 212965200, 231285600, 244501200, 262735200, 275950800, 452210400, 466722000, 483746400, 498258000, 515282400, 529794000, 546818400, 561330000, 581119200, 592952400, 610754400, 624488400, 641512800, 656024400, 673048800, 687560400, 704671200, 718146000, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 906843600, 922572000, 941317200 } @@ -1296,40 +1302,37 @@ zoneinfo64:table(nofallback) { finalRule { "Lebanon" } finalRaw:int { 7200 } finalYear:int { 2000 } - } //Z#251 + } //Z#252 /* Asia/Bishkek */ :table { trans:intvector { -1441169904, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 683582400, 703018800, 717530400, 734468400, 748980000, 765918000, 780429600, 797367600, 811879200, 828817200, 843933600, 859671000, 877811400, 891120600, 909261000, 922570200, 941315400, 954019800, 972765000, 985469400, 1004214600, 1017523800, 1035664200, 1048973400, 1067113800, 1080423000, 1099168200, 1111872600, 1123783200 } typeOffsets:intvector { 17904, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020102010201020102010201020102010201020102010201020102010203" } - } //Z#252 + } //Z#253 /* Asia/Brunei */ :table { trans:intvector { -1383464380, -1167636600 } typeOffsets:intvector { 27580, 0, 27000, 0, 28800, 0 } typeMap:bin { "0102" } - } //Z#253 - /* Asia/Calcutta */ :int { 285 } //Z#254 + } //Z#254 + /* Asia/Calcutta */ :int { 286 } //Z#255 /* Asia/Chita */ :table { trans:intvector { -1579419232, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1080406800, 1099155600, 1111856400, 1130605200, 1143306000, 1162054800, 1174755600, 1193504400, 1206810000, 1224954000, 1238259600, 1256403600, 1269709200, 1288458000, 1301158800, 1414252800, 1459015200 } typeOffsets:intvector { 27232, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0 } typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050103" } - } //Z#255 + } //Z#256 /* Asia/Choibalsan */ :table { - trans:intvector { -2032933080, 252435600, 417974400, 433778400, 449593200, 465314400, 481042800, 496764000, 512492400, 528213600, 543942000, 559663200, 575391600, 591112800, 606841200, 622562400, 638290800, 654616800, 670345200, 686066400, 701794800, 717516000, 733244400, 748965600, 764694000, 780415200, 796143600, 811864800, 828198000, 843919200, 859647600, 875368800, 891097200, 906818400, 988390800, 1001692800, 1017421200, 1033142400, 1048870800, 1064592000, 1080320400, 1096041600, 1111770000, 1127491200, 1143219600, 1159545600, 1206889200, 1427479200, 1443193200 } + trans:intvector { -2032933080, 252435600, 417974400, 433778400, 449593200, 465314400, 481042800, 496764000, 512492400, 528213600, 543942000, 559663200, 575391600, 591112800, 606841200, 622562400, 638290800, 654616800, 670345200, 686066400, 701794800, 717516000, 733244400, 748965600, 764694000, 780415200, 796143600, 811864800, 828198000, 843919200, 859647600, 875368800, 891097200, 906818400, 988390800, 1001692800, 1017421200, 1033142400, 1048870800, 1064592000, 1080320400, 1096041600, 1111770000, 1127491200, 1143219600, 1159545600, 1206889200, 1427479200, 1443193200, 1458928800, 1474642800 } typeOffsets:intvector { 27480, 0, 25200, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600 } - typeMap:bin { "01020504050405040504050405040504050405040504050405040504050405040504050405040504050405040504020302" } - finalRule { "Mongol" } - finalRaw:int { 28800 } - finalYear:int { 2016 } - } //Z#256 - /* Asia/Chongqing */ :int { 312 } //Z#257 - /* Asia/Chungking */ :int { 312 } //Z#258 + typeMap:bin { "010205040504050405040504050405040504050405040504050405040504050405040504050405040504050405040203020302" } + } //Z#257 + /* Asia/Chongqing */ :int { 313 } //Z#258 + /* Asia/Chungking */ :int { 313 } //Z#259 /* Asia/Colombo */ :table { transPre32:intvector { -1, 1454807332 } trans:intvector { -2019705572, -883287000, -862639200, -764051400, 832962600, 846266400, 1145039400 } typeOffsets:intvector { 19164, 0, 19172, 0, 19800, 0, 19800, 1800, 19800, 3600, 21600, 0, 23400, 0 } typeMap:bin { "0102030402060502" } - } //Z#259 - /* Asia/Dacca */ :int { 262 } //Z#260 + } //Z#260 + /* Asia/Dacca */ :int { 263 } //Z#261 /* Asia/Damascus */ :table { trans:intvector { -1577931912, -1568592000, -1554080400, -1537142400, -1522630800, -1505692800, -1491181200, -1474243200, -1459126800, -242265600, -228877200, -210556800, -197427600, -178934400, -165718800, -147398400, -134269200, -116467200, -102646800, -84326400, -71110800, -52704000, -39488400, -21168000, -7952400, 10368000, 23583600, 41904000, 55119600, 73526400, 86742000, 105062400, 118278000, 136598400, 149814000, 168134400, 181350000, 199756800, 212972400, 231292800, 241916400, 262828800, 273452400, 418694400, 433810800, 450316800, 465433200, 508896000, 529196400, 541555200, 562633200, 574387200, 594255600, 607305600, 623199600, 638928000, 654649200, 670456800, 686264400, 702684000, 717886800, 733096800, 748904400, 765151200, 780958800, 796687200, 812494800, 828309600, 844117200, 859759200, 875653200, 891208800, 907189200, 922917600, 938725200, 954540000, 970347600, 986076000, 1001883600, 1017612000, 1033419600, 1049148000, 1064955600, 1080770400, 1096578000, 1112306400, 1128114000, 1143842400, 1158872400, 1175205600, 1193950800, 1207260000, 1225486800, 1238104800, 1256850000, 1270159200, 1288299600, 1301608800, 1319749200, 1333058400, 1351198800 } typeOffsets:intvector { 8712, 0, 7200, 0, 7200, 3600 } @@ -1337,35 +1340,35 @@ zoneinfo64:table(nofallback) { finalRule { "Syria" } finalRaw:int { 7200 } finalYear:int { 2013 } - } //Z#261 + } //Z#262 /* Asia/Dhaka */ :table { transPre32:intvector { -1, 1770423996 } trans:intvector { -891582800, -872058600, -862637400, -576138600, 1245430800, 1262278800 } typeOffsets:intvector { 21700, 0, 19800, 0, 21200, 0, 21600, 0, 21600, 3600, 23400, 0 } typeMap:bin { "02050105030403" } - links:intvector { 260, 262, 371 } - } //Z#262 + links:intvector { 261, 263, 372 } + } //Z#263 /* Asia/Dili */ :table { trans:intvector { -1830414140, -879152400, 199897200, 969120000 } typeOffsets:intvector { 30140, 0, 28800, 0, 32400, 0 } typeMap:bin { "01020102" } - } //Z#263 + } //Z#264 /* Asia/Dubai */ :table { trans:intvector { -1577936472 } typeOffsets:intvector { 13272, 0, 14400, 0 } typeMap:bin { "01" } - links:intvector { 264, 295 } - } //Z#264 + links:intvector { 265, 296 } + } //Z#265 /* Asia/Dushanbe */ :table { trans:intvector { -1441168512, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 684363600 } typeOffsets:intvector { 16512, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } typeMap:bin { "010304030403040304030403040304030403040304030201" } - } //Z#265 + } //Z#266 /* Asia/Famagusta */ :table { trans:intvector { -1518920148, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396141200, 1414285200, 1427590800, 1445734800, 1459040400, 1473282000 } typeOffsets:intvector { 8148, 0, 7200, 0, 7200, 3600, 10800, 0 } typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" } - } //Z#266 + } //Z#267 /* Asia/Gaza */ :table { transPre32:intvector { -1, 2109557424 } trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 } @@ -1374,8 +1377,8 @@ zoneinfo64:table(nofallback) { finalRule { "Palestine" } finalRaw:int { 7200 } finalYear:int { 2017 } - } //Z#267 - /* Asia/Harbin */ :int { 312 } //Z#268 + } //Z#268 + /* Asia/Harbin */ :int { 313 } //Z#269 /* Asia/Hebron */ :table { transPre32:intvector { -1, 2109557273 } trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 } @@ -1384,43 +1387,40 @@ zoneinfo64:table(nofallback) { finalRule { "Palestine" } finalRaw:int { 7200 } finalYear:int { 2017 } - } //Z#269 + } //Z#270 /* Asia/Ho_Chi_Minh */ :table { trans:intvector { -2004073600, -1851577590, -852105600, -782643600, -767869200, -718095600, -457776000, -315648000, 171820800 } typeOffsets:intvector { 25600, 0, 25200, 0, 25590, 0, 28800, 0, 32400, 0 } typeMap:bin { "020103040103010301" } - links:intvector { 270, 308, 628 } - } //Z#270 + links:intvector { 271, 309, 629 } + } //Z#271 /* Asia/Hong_Kong */ :table { trans:intvector { -2056693002, -907389000, -891667800, -884246400, -766746000, -747981000, -728544600, -717049800, -694503000, -683785800, -668064600, -654755400, -636615000, -623305800, -605165400, -591856200, -573715800, -559801800, -542352600, -528352200, -510211800, -498112200, -478762200, -466662600, -446707800, -435213000, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132816600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 126041400, 151439400, 167167800, 182889000, 198617400, 214338600, 295385400, 309292200 } typeOffsets:intvector { 27402, 0, 28800, 0, 28800, 3600, 32400, 0 } typeMap:bin { "010201030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 271, 509 } - } //Z#271 + links:intvector { 272, 510 } + } //Z#272 /* Asia/Hovd */ :table { - trans:intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800, 1427482800, 1443196800 } + trans:intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800, 1427482800, 1443196800, 1458932400, 1474646400 } typeOffsets:intvector { 21996, 0, 21600, 0, 25200, 0, 25200, 3600 } - typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } - finalRule { "Mongol" } - finalRaw:int { 25200 } - finalYear:int { 2016 } - } //Z#272 + typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } + } //Z#273 /* Asia/Irkutsk */ :table { trans:intvector { -1575874625, -1247554800, 354902400, 370710000, 386438400, 402246000, 417974400, 433782000, 449596800, 465328800, 481053600, 496778400, 512503200, 528228000, 543952800, 559677600, 575402400, 591127200, 606852000, 622576800, 638301600, 654631200, 670356000, 686084400, 695761200, 701805600, 717530400, 733255200, 748980000, 764704800, 780429600, 796154400, 811879200, 828208800, 846352800, 859658400, 877802400, 891108000, 909252000, 922557600, 941306400, 954007200, 972756000, 985456800, 1004205600, 1017511200, 1035655200, 1048960800, 1067104800, 1080410400, 1099159200, 1111860000, 1130608800, 1143309600, 1162058400, 1174759200, 1193508000, 1206813600, 1224957600, 1238263200, 1256407200, 1269712800, 1288461600, 1301162400, 1414256400 } typeOffsets:intvector { 25025, 0, 25200, 0, 25200, 3600, 28800, 0, 28800, 3600, 32400, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#273 - /* Asia/Istanbul */ :int { 456 } //Z#274 + } //Z#274 + /* Asia/Istanbul */ :int { 457 } //Z#275 /* Asia/Jakarta */ :table { trans:intvector { -1451719200, -1172906400, -876641400, -766054800, -683883000, -620812800, -189415800 } typeOffsets:intvector { 25632, 0, 25200, 0, 26400, 0, 27000, 0, 28800, 0, 32400, 0 } typeMap:bin { "02030503040301" } - } //Z#275 + } //Z#276 /* Asia/Jayapura */ :table { trans:intvector { -1172913768, -799491600, -189423000 } typeOffsets:intvector { 33768, 0, 32400, 0, 34200, 0 } typeMap:bin { "010201" } - } //Z#276 + } //Z#277 /* Asia/Jerusalem */ :table { transPre32:intvector { -1, 1454818042 } trans:intvector { -1641003640, -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -681962400, -673243200, -667962000, -652327200, -636426000, -622087200, -608947200, -591847200, -572486400, -558576000, -542851200, -527731200, -514425600, -490845600, -482986800, -459475200, -451537200, -428551200, -418262400, -400032000, -387428400, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 826840800, 842821200, 858895200, 874184400, 890344800, 905029200, 923011200, 936313200, 955670400, 970783200, 986770800, 1001282400, 1017356400, 1033941600, 1048806000, 1065132000, 1081292400, 1095804000, 1112313600, 1128812400, 1143763200, 1159657200, 1175212800, 1189897200, 1206662400, 1223161200, 1238112000, 1254006000, 1269561600, 1284246000, 1301616000, 1317510000, 1333065600, 1348354800, 1364515200, 1382828400 } @@ -1429,87 +1429,87 @@ zoneinfo64:table(nofallback) { finalRule { "Zion" } finalRaw:int { 7200 } finalYear:int { 2014 } - links:intvector { 277, 319, 525 } - } //Z#277 + links:intvector { 278, 320, 526 } + } //Z#278 /* Asia/Kabul */ :table { transPre32:intvector { -1, 1770429088 } trans:intvector { -788932800 } typeOffsets:intvector { 16608, 0, 14400, 0, 16200, 0 } typeMap:bin { "0102" } - } //Z#278 + } //Z#279 /* Asia/Kamchatka */ :table { trans:intvector { -1487759676, -1247569200, 354888000, 370695600, 386424000, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701791200, 717516000, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800, 828194400, 846338400, 859644000, 877788000, 891093600, 909237600, 922543200, 941292000, 953992800, 972741600, 985442400, 1004191200, 1017496800, 1035640800, 1048946400, 1067090400, 1080396000, 1099144800, 1111845600, 1130594400, 1143295200, 1162044000, 1174744800, 1193493600, 1206799200, 1224943200, 1238248800, 1256392800, 1269698400, 1288450800, 1301151600 } typeOffsets:intvector { 38076, 0, 39600, 0, 39600, 3600, 43200, 0, 43200, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" } - } //Z#279 + } //Z#280 /* Asia/Karachi */ :table { trans:intvector { -1988166492, -862637400, -764145000, -576135000, 1018119600, 1033840800, 1212260400, 1225476000, 1239735600, 1257012000 } typeOffsets:intvector { 16092, 0, 18000, 0, 18000, 3600, 19800, 0, 19800, 3600 } typeMap:bin { "03040301020102010201" } - links:intvector { 280, 543 } - } //Z#280 - /* Asia/Kashgar */ :int { 327 } //Z#281 + links:intvector { 281, 544 } + } //Z#281 + /* Asia/Kashgar */ :int { 328 } //Z#282 /* Asia/Kathmandu */ :table { trans:intvector { -1577943676, 504901800 } typeOffsets:intvector { 20476, 0, 19800, 0, 20700, 0 } typeMap:bin { "0102" } - links:intvector { 282, 283 } - } //Z#282 - /* Asia/Katmandu */ :int { 282 } //Z#283 + links:intvector { 283, 284 } + } //Z#283 + /* Asia/Katmandu */ :int { 283 } //Z#284 /* Asia/Khandyga */ :table { trans:intvector { -1579424533, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1072882800, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1315832400, 1414252800 } typeOffsets:intvector { 32533, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0, 36000, 3600, 39600, 0 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403050605060506050605060506050605070503" } - } //Z#284 + } //Z#285 /* Asia/Kolkata */ :table { transPre32:intvector { -1, 1454805288 } trans:intvector { -891582800, -872058600, -862637400, -764145000 } typeOffsets:intvector { 21208, 0, 19800, 0, 19800, 3600, 21200, 0, 23400, 0 } typeMap:bin { "0304010201" } - links:intvector { 254, 285, 511 } - } //Z#285 + links:intvector { 255, 286, 512 } + } //Z#286 /* Asia/Krasnoyarsk */ :table { trans:intvector { -1577513486, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288465200, 1301166000, 1414260000 } typeOffsets:intvector { 22286, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600, 28800, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#286 + } //Z#287 /* Asia/Kuala_Lumpur */ :table { transPre32:intvector { -1, 2117490090 } trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 } typeOffsets:intvector { 24406, 0, 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 } typeMap:bin { "0102030405070506" } - } //Z#287 + } //Z#288 /* Asia/Kuching */ :table { trans:intvector { -1383463280, -1167636600, -1082448000, -1074586800, -1050825600, -1042964400, -1019289600, -1011428400, -987753600, -979892400, -956217600, -948356400, -924595200, -916734000, -893059200, -885198000, -879667200, -767005200 } typeOffsets:intvector { 26480, 0, 27000, 0, 28800, 0, 28800, 1200, 32400, 0 } typeMap:bin { "010203020302030203020302030203020402" } - } //Z#288 - /* Asia/Kuwait */ :int { 307 } //Z#289 - /* Asia/Macao */ :int { 291 } //Z#290 + } //Z#289 + /* Asia/Kuwait */ :int { 308 } //Z#290 + /* Asia/Macao */ :int { 292 } //Z#291 /* Asia/Macau */ :table { trans:intvector { -1830411260, -277360200, -257405400, -245910600, -225955800, -214473600, -194506200, -182406600, -163056600, -150969600, -131619600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72201600, 87922800, 103651200, 119977200, 135705600, 151439400, 167167800, 182889000, 198617400, 214338600, 230067000, 245788200, 261504000, 277225200, 292953600, 309279600, 325008000, 340729200 } typeOffsets:intvector { 27260, 0, 28800, 0, 28800, 3600 } typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 290, 291 } - } //Z#291 + links:intvector { 291, 292 } + } //Z#292 /* Asia/Magadan */ :table { trans:intvector { -1441188192, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1414245600, 1461427200 } typeOffsets:intvector { 36192, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 } typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050103" } - } //Z#292 + } //Z#293 /* Asia/Makassar */ :table { trans:intvector { -1172908656, -880272000, -766054800 } typeOffsets:intvector { 28656, 0, 28800, 0, 32400, 0 } typeMap:bin { "010201" } - links:intvector { 293, 324 } - } //Z#293 + links:intvector { 294, 325 } + } //Z#294 /* Asia/Manila */ :table { transPre32:intvector { -1, 350346256, -1, 2065645456 } trans:intvector { -1046678400, -1038733200, -873273600, -794221200, -496224000, -489315600, 259344000, 275151600 } typeOffsets:intvector { -57360, 0, 28800, 0, 28800, 3600, 29040, 0, 32400, 0 } typeMap:bin { "03010201040102010201" } - } //Z#294 - /* Asia/Muscat */ :int { 264 } //Z#295 + } //Z#295 + /* Asia/Muscat */ :int { 265 } //Z#296 /* Asia/Nicosia */ :table { trans:intvector { -1518920008, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600 } typeOffsets:intvector { 8008, 0, 7200, 0, 7200, 3600 } @@ -1517,109 +1517,109 @@ zoneinfo64:table(nofallback) { finalRule { "EUAsia" } finalRaw:int { 7200 } finalYear:int { 2000 } - links:intvector { 296, 471 } - } //Z#296 + links:intvector { 297, 472 } + } //Z#297 /* Asia/Novokuznetsk */ :table { trans:intvector { -1441259328, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288468800, 1301169600 } typeOffsets:intvector { 20928, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" } - } //Z#297 + } //Z#298 /* Asia/Novosibirsk */ :table { trans:intvector { -1579476700, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 738086400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1469304000 } typeOffsets:intvector { 19900, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304020102010201020102010201020102010201020102010201020102010201020102010201030103" } - } //Z#298 + } //Z#299 /* Asia/Omsk */ :table { trans:intvector { -1582088010, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600 } typeOffsets:intvector { 17610, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600, 25200, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#299 - /* Asia/Oral */ :table { - trans:intvector { -1441164324, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622591200, 638316000, 654645600, 670370400, 686095200, 695772000, 701816400, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 } - typeOffsets:intvector { 12324, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } - typeMap:bin { "010304050403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010203" } } //Z#300 - /* Asia/Phnom_Penh */ :int { 249 } //Z#301 + /* Asia/Oral */ :table { + trans:intvector { -1441164324, -1247540400, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622591200, 638316000, 654645600, 670370400, 686095200, 695772000, 701816400, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 } + typeOffsets:intvector { 12324, 0, 10800, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } + typeMap:bin { "010405060504050405040504050405040504030203020302040302030203020302030203020302030203020302030203020304" } + } //Z#301 + /* Asia/Phnom_Penh */ :int { 250 } //Z#302 /* Asia/Pontianak */ :table { trans:intvector { -1172906240, -881220600, -766054800, -683883000, -620812800, -189415800, 567964800 } typeOffsets:intvector { 26240, 0, 25200, 0, 27000, 0, 28800, 0, 32400, 0 } typeMap:bin { "02040203020301" } - } //Z#302 + } //Z#303 /* Asia/Pyongyang */ :table { trans:intvector { -1948782180, -1830414600, 1439564400 } typeOffsets:intvector { 30180, 0, 30600, 0, 32400, 0 } typeMap:bin { "010201" } - } //Z#303 + } //Z#304 /* Asia/Qatar */ :table { trans:intvector { -1577935568, 76190400 } typeOffsets:intvector { 12368, 0, 10800, 0, 14400, 0 } typeMap:bin { "0201" } - links:intvector { 247, 304 } - } //Z#304 + links:intvector { 248, 305 } + } //Z#305 /* Asia/Qyzylorda */ :table { trans:intvector { -1441167712, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695768400, 701812800, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 } typeOffsets:intvector { 15712, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } typeMap:bin { "010304050403040304030403040304030403040304030203050403040304030403040304030403040304030403040304030405" } - } //Z#305 - /* Asia/Rangoon */ :int { 332 } //Z#306 + } //Z#306 + /* Asia/Rangoon */ :int { 333 } //Z#307 /* Asia/Riyadh */ :table { trans:intvector { -719636812 } typeOffsets:intvector { 11212, 0, 10800, 0 } typeMap:bin { "01" } - links:intvector { 237, 289, 307 } - } //Z#307 - /* Asia/Saigon */ :int { 270 } //Z#308 + links:intvector { 238, 290, 308 } + } //Z#308 + /* Asia/Saigon */ :int { 271 } //Z#309 /* Asia/Sakhalin */ :table { trans:intvector { -2031039048, -768560400, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 972748800, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1414249200, 1459008000 } typeOffsets:intvector { 34248, 0, 32400, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600 } typeMap:bin { "010405040504050405040504050405040504050405040302040504050405040504050403020302030203020302030203020302030203020302030203020302040204" } - } //Z#309 + } //Z#310 /* Asia/Samarkand */ :table { trans:intvector { -1441168073, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686091600 } typeOffsets:intvector { 16073, 0, 14400, 0, 18000, 0, 18000, 3600, 21600, 0 } typeMap:bin { "010203040302030203020302030203020302030203020302" } - } //Z#310 + } //Z#311 /* Asia/Seoul */ :table { trans:intvector { -1948782472, -1830414600, -498128400, -462702600, -451733400, -429784200, -418296600, -399544200, -387451800, -368094600, -356002200, -336645000, -324552600, -305195400, -293103000, -264933000, 547578000, 560883600, 579027600, 592333200 } typeOffsets:intvector { 30472, 0, 30600, 0, 30600, 3600, 32400, 0, 32400, 3600 } typeMap:bin { "0103010201020102010201020102010304030403" } - links:intvector { 311, 595 } - } //Z#311 + links:intvector { 312, 596 } + } //Z#312 /* Asia/Shanghai */ :table { transPre32:intvector { -1, 2117485353 } trans:intvector { -933494400, -923130000, -908784000, -891594000, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 } typeOffsets:intvector { 29143, 0, 28800, 0, 28800, 3600 } typeMap:bin { "0102010201020102010201020102010201" } - links:intvector { 257, 258, 268, 312, 381, 545 } - } //Z#312 + links:intvector { 258, 259, 269, 313, 382, 546 } + } //Z#313 /* Asia/Singapore */ :table { trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 } typeOffsets:intvector { 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 } typeMap:bin { "01020304060405" } - links:intvector { 313, 597 } - } //Z#313 + links:intvector { 314, 598 } + } //Z#314 /* Asia/Srednekolymsk */ :table { trans:intvector { -1441188892, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1414245600 } typeOffsets:intvector { 36892, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#314 + } //Z#315 /* Asia/Taipei */ :table { transPre32:intvector { -1, 1959718936 } trans:intvector { -1017820800, -766224000, -745833600, -733827600, -716889600, -699613200, -683884800, -670669200, -652348800, -639133200, -620812800, -607597200, -589276800, -576061200, -562924800, -541760400, -528710400, -510224400, -497174400, -478688400, -465638400, -449830800, -434016000, -418208400, -402480000, -386672400, -370944000, -355136400, -339408000, -323600400, -302515200, -291978000, -270979200, -260442000, 133977600, 149785200, 165513600, 181321200, 299606400, 307551600 } typeOffsets:intvector { 29160, 0, 28800, 0, 28800, 3600, 32400, 0 } typeMap:bin { "0103010201020102010201020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 315, 594 } - } //Z#315 + links:intvector { 316, 595 } + } //Z#316 /* Asia/Tashkent */ :table { trans:intvector { -1441168631, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600 } typeOffsets:intvector { 16631, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } typeMap:bin { "010304030403040304030403040304030403040304030201" } - } //Z#316 + } //Z#317 /* Asia/Tbilisi */ :table { trans:intvector { -1441162751, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701816400, 717537600, 733266000, 748987200, 764715600, 780436800, 796161600, 811882800, 828216000, 877806000, 891115200, 909255600, 922564800, 941310000, 954014400, 972759600, 985464000, 1004209200, 1017518400, 1035658800, 1048968000, 1067108400, 1080417600, 1088276400, 1099177200, 1111878000 } typeOffsets:intvector { 10751, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "0103040304030403040304030403040304030403040302010201020102030403040304030403040304030403040304020103" } - } //Z#317 + } //Z#318 /* Asia/Tehran */ :table { trans:intvector { -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667400, 1253561400, 1269203400, 1285097400, 1300739400, 1316633400, 1332275400, 1348169400, 1363897800, 1379791800, 1395433800, 1411327800, 1426969800, 1442863800, 1458505800, 1474399800, 1490128200, 1506022200, 1521664200, 1537558200, 1553200200, 1569094200, 1584736200, 1600630200, 1616358600, 1632252600, 1647894600, 1663788600, 1679430600, 1695324600, 1710966600, 1726860600, 1742589000, 1758483000, 1774125000, 1790019000, 1805661000, 1821555000, 1837197000, 1853091000, 1868733000, 1884627000, 1900355400, 1916249400, 1931891400, 1947785400, 1963427400, 1979321400, 1994963400, 2010857400, 2026585800, 2042479800, 2058121800, 2074015800, 2089657800, 2105551800 } typeOffsets:intvector { 12344, 0, 12600, 0, 12600, 3600, 14400, 0, 14400, 3600 } @@ -1627,78 +1627,75 @@ zoneinfo64:table(nofallback) { finalRule { "Iran" } finalRaw:int { 12600 } finalYear:int { 2037 } - links:intvector { 318, 524 } - } //Z#318 - /* Asia/Tel_Aviv */ :int { 277 } //Z#319 - /* Asia/Thimbu */ :int { 321 } //Z#320 + links:intvector { 319, 525 } + } //Z#319 + /* Asia/Tel_Aviv */ :int { 278 } //Z#320 + /* Asia/Thimbu */ :int { 322 } //Z#321 /* Asia/Thimphu */ :table { trans:intvector { -706341516, 560025000 } typeOffsets:intvector { 21516, 0, 19800, 0, 21600, 0 } typeMap:bin { "0102" } - links:intvector { 320, 321 } - } //Z#321 + links:intvector { 321, 322 } + } //Z#322 /* Asia/Tokyo */ :table { transPre32:intvector { -1, 1707254896 } trans:intvector { -683794800, -672393600, -654764400, -640944000, -620290800, -609494400, -588841200, -578044800 } typeOffsets:intvector { 33539, 0, 32400, 0, 32400, 3600 } typeMap:bin { "010201020102010201" } - links:intvector { 322, 526, 528 } - } //Z#322 + links:intvector { 323, 527, 529 } + } //Z#323 /* Asia/Tomsk */ :table { trans:intvector { -1578807591, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1020193200, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1464465600 } typeOffsets:intvector { 20391, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304020102010201020102010201020102010201030103" } - } //Z#323 - /* Asia/Ujung_Pandang */ :int { 293 } //Z#324 + } //Z#324 + /* Asia/Ujung_Pandang */ :int { 294 } //Z#325 /* Asia/Ulaanbaatar */ :table { - trans:intvector { -2032931252, 252435600, 417974400, 433782000, 449596800, 465318000, 481046400, 496767600, 512496000, 528217200, 543945600, 559666800, 575395200, 591116400, 606844800, 622566000, 638294400, 654620400, 670348800, 686070000, 701798400, 717519600, 733248000, 748969200, 764697600, 780418800, 796147200, 811868400, 828201600, 843922800, 859651200, 875372400, 891100800, 906822000, 988394400, 1001696400, 1017424800, 1033146000, 1048874400, 1064595600, 1080324000, 1096045200, 1111773600, 1127494800, 1143223200, 1159549200, 1427479200, 1443193200 } + trans:intvector { -2032931252, 252435600, 417974400, 433782000, 449596800, 465318000, 481046400, 496767600, 512496000, 528217200, 543945600, 559666800, 575395200, 591116400, 606844800, 622566000, 638294400, 654620400, 670348800, 686070000, 701798400, 717519600, 733248000, 748969200, 764697600, 780418800, 796147200, 811868400, 828201600, 843922800, 859651200, 875372400, 891100800, 906822000, 988394400, 1001696400, 1017424800, 1033146000, 1048874400, 1064595600, 1080324000, 1096045200, 1111773600, 1127494800, 1143223200, 1159549200, 1427479200, 1443193200, 1458928800, 1474642800 } typeOffsets:intvector { 25652, 0, 25200, 0, 28800, 0, 28800, 3600 } - typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } - finalRule { "Mongol" } - finalRaw:int { 28800 } - finalYear:int { 2016 } - links:intvector { 325, 326 } - } //Z#325 - /* Asia/Ulan_Bator */ :int { 325 } //Z#326 + typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } + links:intvector { 326, 327 } + } //Z#326 + /* Asia/Ulan_Bator */ :int { 326 } //Z#327 /* Asia/Urumqi */ :table { trans:intvector { -1325483420 } typeOffsets:intvector { 21020, 0, 21600, 0 } typeMap:bin { "01" } - links:intvector { 281, 327 } - } //Z#327 + links:intvector { 282, 328 } + } //Z#328 /* Asia/Ust-Nera */ :table { trans:intvector { -1579426374, -1247558400, 354898800, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1315828800, 1414249200 } typeOffsets:intvector { 34374, 0, 28800, 0, 32400, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 } typeMap:bin { "010206050605060506050605060506050605060506050403050605060506050605060506050605060506050605060506050605060506050605060506050605070503" } - } //Z#328 - /* Asia/Vientiane */ :int { 249 } //Z#329 + } //Z#329 + /* Asia/Vientiane */ :int { 250 } //Z#330 /* Asia/Vladivostok */ :table { trans:intvector { -1487321251, -1247562000, 354895200, 370702800, 386431200, 402238800, 417967200, 433774800, 449589600, 465321600, 481046400, 496771200, 512496000, 528220800, 543945600, 559670400, 575395200, 591120000, 606844800, 622569600, 638294400, 654624000, 670348800, 686077200, 695754000, 701798400, 717523200, 733248000, 748972800, 764697600, 780422400, 796147200, 811872000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 972748800, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1414249200 } typeOffsets:intvector { 31651, 0, 32400, 0, 32400, 3600, 36000, 0, 36000, 3600, 39600, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#330 + } //Z#331 /* Asia/Yakutsk */ :table { trans:intvector { -1579423138, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1080406800, 1099155600, 1111856400, 1130605200, 1143306000, 1162054800, 1174755600, 1193504400, 1206810000, 1224954000, 1238259600, 1256403600, 1269709200, 1288458000, 1301158800, 1414252800 } typeOffsets:intvector { 31138, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#331 + } //Z#332 /* Asia/Yangon */ :table { trans:intvector { -1577946280, -873268200, -778410000 } typeOffsets:intvector { 23080, 0, 23400, 0, 32400, 0 } typeMap:bin { "010201" } - links:intvector { 306, 332 } - } //Z#332 + links:intvector { 307, 333 } + } //Z#333 /* Asia/Yekaterinburg */ :table { trans:intvector { -1688270553, -1592610305, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1111870800, 1130619600, 1143320400, 1162069200, 1174770000, 1193518800, 1206824400, 1224968400, 1238274000, 1256418000, 1269723600, 1288472400, 1301173200, 1414267200 } typeOffsets:intvector { 14553, 0, 13505, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } typeMap:bin { "010204050405040504050405040504050405040504050403020405040504050405040504050405040504050405040504050405040504050405040504050405040604" } - } //Z#333 + } //Z#334 /* Asia/Yerevan */ :table { trans:intvector { -1441162680, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288476000, 1301176800, 1319925600 } typeOffsets:intvector { 10680, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "0103040304030403040304030403040304030403040302010201020102010203040304030403040304030403040304030403040304030403040304030403" } - links:intvector { 334, 538 } - } //Z#334 + links:intvector { 335, 539 } + } //Z#335 /* Atlantic/Azores */ :table { transPre32:intvector { -1, 1581063056 } trans:intvector { -1830377128, -1689548400, -1677794400, -1667430000, -1647730800, -1635807600, -1616194800, -1604358000, -1584658800, -1572735600, -1553036400, -1541199600, -1521500400, -1442444400, -1426806000, -1379286000, -1364770800, -1348441200, -1333321200, -1316386800, -1301266800, -1284332400, -1269817200, -1221433200, -1206918000, -1191193200, -1175468400, -1127689200, -1111964400, -1096844400, -1080514800, -1063580400, -1049065200, -1033340400, -1017615600, -1002495600, -986166000, -969231600, -950482800, -942015600, -922662000, -906937200, -891126000, -877302000, -873676800, -864000000, -857948400, -845852400, -842832000, -831340800, -825894000, -814402800, -810777600, -799891200, -794444400, -782953200, -779328000, -768441600, -762994800, -749084400, -733359600, -717624000, -701899200, -686174400, -670449600, -654724800, -639000000, -591825600, -575496000, -559771200, -544046400, -528321600, -512596800, -496872000, -481147200, -465422400, -449697600, -433972800, -417643200, -401918400, -386193600, -370468800, -354744000, -339019200, -323294400, -307569600, -291844800, -276120000, -260395200, -244670400, -228340800, -212616000, -196891200, -181166400, -165441600, -149716800, -133992000, -118267200, 228272400, 243997200, 260326800, 276051600, 291776400, 307504800, 323226000, 338954400, 354679200, 370404000, 386128800, 401853600, 417582000, 433303200, 449028000, 465357600, 481082400, 496807200, 512532000, 528256800, 543981600, 559706400, 575431200, 591156000, 606880800, 622605600, 638330400, 654660000, 670384800, 686109600, 701834400, 717559200, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -1707,7 +1704,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { -3600 } finalYear:int { 1997 } - } //Z#335 + } //Z#336 /* Atlantic/Bermuda */ :table { trans:intvector { -1262281242, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 } typeOffsets:intvector { -15558, 0, -14400, 0, -14400, 3600 } @@ -1715,7 +1712,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -14400 } finalYear:int { 2008 } - } //Z#336 + } //Z#337 /* Atlantic/Canary */ :table { trans:intvector { -1509663504, -733874400, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -3696, 0, -3600, 0, 0, 0, 0, 3600 } @@ -1723,13 +1720,13 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - } //Z#337 + } //Z#338 /* Atlantic/Cape_Verde */ :table { trans:intvector { -1988144756, -862610400, -764118000, 186120000 } typeOffsets:intvector { -5644, 0, -7200, 0, -7200, 3600, -3600, 0 } typeMap:bin { "01020103" } - } //Z#338 - /* Atlantic/Faeroe */ :int { 340 } //Z#339 + } //Z#339 + /* Atlantic/Faeroe */ :int { 341 } //Z#340 /* Atlantic/Faroe */ :table { trans:intvector { -1955748776, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -1624, 0, 0, 0, 0, 3600 } @@ -1737,9 +1734,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - links:intvector { 339, 340 } - } //Z#340 - /* Atlantic/Jan_Mayen */ :int { 472 } //Z#341 + links:intvector { 340, 341 } + } //Z#341 + /* Atlantic/Jan_Mayen */ :int { 473 } //Z#342 /* Atlantic/Madeira */ :table { trans:intvector { -1830379944, -1689552000, -1677798000, -1667433600, -1647734400, -1635811200, -1616198400, -1604361600, -1584662400, -1572739200, -1553040000, -1541203200, -1521504000, -1442448000, -1426809600, -1379289600, -1364774400, -1348444800, -1333324800, -1316390400, -1301270400, -1284336000, -1269820800, -1221436800, -1206921600, -1191196800, -1175472000, -1127692800, -1111968000, -1096848000, -1080518400, -1063584000, -1049068800, -1033344000, -1017619200, -1002499200, -986169600, -969235200, -950486400, -942019200, -922665600, -906940800, -891129600, -877305600, -873680400, -864003600, -857952000, -845856000, -842835600, -831344400, -825897600, -814406400, -810781200, -799894800, -794448000, -782956800, -779331600, -768445200, -762998400, -749088000, -733363200, -717627600, -701902800, -686178000, -670453200, -654728400, -639003600, -591829200, -575499600, -559774800, -544050000, -528325200, -512600400, -496875600, -481150800, -465426000, -449701200, -433976400, -417646800, -401922000, -386197200, -370472400, -354747600, -339022800, -323298000, -307573200, -291848400, -276123600, -260398800, -244674000, -228344400, -212619600, -196894800, -181170000, -165445200, -149720400, -133995600, -118270800, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -4056, 0, -3600, 0, -3600, 3600, -3600, 7200, 0, 0, 0, 3600 } @@ -1747,25 +1744,25 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - } //Z#342 + } //Z#343 /* Atlantic/Reykjavik */ :table { trans:intvector { -1956609120, -1668211200, -1647212400, -1636675200, -1613430000, -1605139200, -1581894000, -1539561600, -1531350000, -968025600, -952293600, -942008400, -920239200, -909957600, -888789600, -877903200, -857944800, -846453600, -826495200, -815004000, -795045600, -783554400, -762991200, -752104800, -731541600, -717631200, -700092000, -686181600, -668642400, -654732000, -636588000, -623282400, -605743200, -591832800, -573688800, -559778400, -542239200, -528328800, -510789600, -496879200, -479340000, -465429600, -447890400, -433980000, -415836000, -401925600, -384386400, -370476000, -352936800, -339026400, -321487200, -307576800, -290037600, -276127200, -258588000, -244677600, -226533600, -212623200, -195084000, -181173600, -163634400, -149724000, -132184800, -118274400, -100735200, -86824800, -68680800, -54770400 } typeOffsets:intvector { -5280, 0, -3600, 0, -3600, 3600, 0, 0 } typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" } - links:intvector { 343, 512 } - } //Z#343 + links:intvector { 344, 513 } + } //Z#344 /* Atlantic/South_Georgia */ :table { transPre32:intvector { -1, 1770454464 } typeOffsets:intvector { -8768, 0, -7200, 0 } typeMap:bin { "01" } - } //Z#344 - /* Atlantic/St_Helena */ :int { 5 } //Z#345 + } //Z#345 + /* Atlantic/St_Helena */ :int { 5 } //Z#346 /* Atlantic/Stanley */ :table { trans:intvector { -1824235716, -1018209600, -1003093200, -986760000, -971643600, -954705600, -939589200, -923256000, -908139600, -891806400, -876690000, -860356800, -852066000, 420609600, 433306800, 452052000, 464151600, 483501600, 495601200, 514350000, 527054400, 545799600, 558504000, 577249200, 589953600, 608698800, 621403200, 640753200, 652852800, 672202800, 684907200, 703652400, 716356800, 735102000, 747806400, 766551600, 779256000, 798001200, 810705600, 830055600, 842760000, 861505200, 874209600, 892954800, 905659200, 924404400, 937108800, 955854000, 968558400, 987310800, 999410400, 1019365200, 1030860000, 1050814800, 1062914400, 1082264400, 1094364000, 1113714000, 1125813600, 1145163600, 1157263200, 1176613200, 1188712800, 1208667600, 1220767200, 1240117200, 1252216800, 1271566800, 1283666400 } typeOffsets:intvector { -13884, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } typeMap:bin { "010201020102010201020102010304030403020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" } - } //Z#346 - /* Australia/ACT */ :int { 365 } //Z#347 + } //Z#347 + /* Australia/ACT */ :int { 366 } //Z#348 /* Australia/Adelaide */ :table { transPre32:intvector { -1, 1930857236, -1, 2064778096 } trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 384280200, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 637691400, 657045000, 667931400, 688494600, 701195400, 719944200, 731435400, 751998600, 764094600, 783448200, 796149000, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 } @@ -1774,15 +1771,15 @@ zoneinfo64:table(nofallback) { finalRule { "AS" } finalRaw:int { 34200 } finalYear:int { 2009 } - links:intvector { 348, 364 } - } //Z#348 + links:intvector { 349, 365 } + } //Z#349 /* Australia/Brisbane */ :table { transPre32:intvector { -1, 1928175368 } trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200 } typeOffsets:intvector { 36728, 0, 36000, 0, 36000, 3600 } typeMap:bin { "0102010201020102010201020102010201" } - links:intvector { 349, 363 } - } //Z#349 + links:intvector { 350, 364 } + } //Z#350 /* Australia/Broken_Hill */ :table { transPre32:intvector { -1, 1930856548, -1, 1980016096, -1, 2064778096 } trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 386699400, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 636481800, 657045000, 667931400, 688494600, 699381000, 719944200, 731435400, 751998600, 762885000, 783448200, 794334600, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 } @@ -1791,9 +1788,9 @@ zoneinfo64:table(nofallback) { finalRule { "AS" } finalRaw:int { 34200 } finalYear:int { 2009 } - links:intvector { 350, 369 } - } //Z#350 - /* Australia/Canberra */ :int { 365 } //Z#351 + links:intvector { 351, 370 } + } //Z#351 + /* Australia/Canberra */ :int { 366 } //Z#352 /* Australia/Currie */ :table { transPre32:intvector { -1, 1949172768 } trans:intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 } @@ -1802,20 +1799,20 @@ zoneinfo64:table(nofallback) { finalRule { "AT" } finalRaw:int { 36000 } finalYear:int { 2009 } - } //Z#352 + } //Z#353 /* Australia/Darwin */ :table { transPre32:intvector { -1, 1930859096, -1, 2064778096 } trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400 } typeOffsets:intvector { 31400, 0, 32400, 0, 34200, 0, 34200, 3600 } typeMap:bin { "01020302030203020302" } - links:intvector { 0, 353, 361 } - } //Z#353 + links:intvector { 0, 354, 362 } + } //Z#354 /* Australia/Eucla */ :table { transPre32:intvector { -1, 1957038768 } trans:intvector { -1672562640, -1665387900, -883637100, -876123900, -860395500, -844674300, 152039700, 162926100, 436295700, 447182100, 690311700, 699383700, 1165079700, 1174756500, 1193505300, 1206810900, 1224954900, 1238260500 } typeOffsets:intvector { 30928, 0, 31500, 0, 31500, 3600 } typeMap:bin { "01020102010201020102010201020102010201" } - } //Z#354 + } //Z#355 /* Australia/Hobart */ :table { transPre32:intvector { -1, 1949171940 } trans:intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 } @@ -1824,15 +1821,15 @@ zoneinfo64:table(nofallback) { finalRule { "AT" } finalRaw:int { 36000 } finalYear:int { 2009 } - links:intvector { 355, 366 } - } //Z#355 - /* Australia/LHI */ :int { 358 } //Z#356 + links:intvector { 356, 367 } + } //Z#356 + /* Australia/LHI */ :int { 359 } //Z#357 /* Australia/Lindeman */ :table { transPre32:intvector { -1, 1928176340 } trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200 } typeOffsets:intvector { 35756, 0, 36000, 0, 36000, 3600 } typeMap:bin { "010201020102010201020102010201020102010201" } - } //Z#357 + } //Z#358 /* Australia/Lord_Howe */ :table { transPre32:intvector { -1, 1930852316 } trans:intvector { 352216800, 372785400, 384273000, 404839800, 415722600, 436289400, 447172200, 467739000, 478621800, 499188600, 511282800, 530033400, 542732400, 562087800, 574786800, 594142200, 606236400, 625591800, 636476400, 657041400, 667926000, 688491000, 699375600, 719940600, 731430000, 751995000, 762879600, 783444600, 794329200, 814894200, 828198000, 846343800, 859647600, 877793400, 891097200, 909243000, 922546800, 941297400, 953996400, 967303800, 985446000, 1004196600, 1017500400, 1035646200, 1048950000, 1067095800, 1080399600, 1099150200, 1111849200, 1130599800, 1143903600, 1162049400, 1174748400, 1193499000, 1207407600, 1223134200 } @@ -1841,8 +1838,8 @@ zoneinfo64:table(nofallback) { finalRule { "LH" } finalRaw:int { 37800 } finalYear:int { 2009 } - links:intvector { 356, 358 } - } //Z#358 + links:intvector { 357, 359 } + } //Z#359 /* Australia/Melbourne */ :table { transPre32:intvector { -1, 1930855704 } trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 384278400, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 561484800, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 796147200, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 } @@ -1851,19 +1848,19 @@ zoneinfo64:table(nofallback) { finalRule { "AV" } finalRaw:int { 36000 } finalYear:int { 2009 } - links:intvector { 359, 367 } - } //Z#359 - /* Australia/NSW */ :int { 365 } //Z#360 - /* Australia/North */ :int { 353 } //Z#361 + links:intvector { 360, 368 } + } //Z#360 + /* Australia/NSW */ :int { 366 } //Z#361 + /* Australia/North */ :int { 354 } //Z#362 /* Australia/Perth */ :table { transPre32:intvector { -1, 1957041892 } trans:intvector { -1672559940, -1665385200, -883634400, -876121200, -860392800, -844671600, 152042400, 162928800, 436298400, 447184800, 690314400, 699386400, 1165082400, 1174759200, 1193508000, 1206813600, 1224957600, 1238263200 } typeOffsets:intvector { 27804, 0, 28800, 0, 28800, 3600 } typeMap:bin { "01020102010201020102010201020102010201" } - links:intvector { 362, 368 } - } //Z#362 - /* Australia/Queensland */ :int { 349 } //Z#363 - /* Australia/South */ :int { 348 } //Z#364 + links:intvector { 363, 369 } + } //Z#363 + /* Australia/Queensland */ :int { 350 } //Z#364 + /* Australia/South */ :int { 349 } //Z#365 /* Australia/Sydney */ :table { transPre32:intvector { -1, 1930854204 } trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386697600, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 794332800, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 } @@ -1872,19 +1869,19 @@ zoneinfo64:table(nofallback) { finalRule { "AN" } finalRaw:int { 36000 } finalYear:int { 2009 } - links:intvector { 1, 347, 351, 360, 365 } - } //Z#365 - /* Australia/Tasmania */ :int { 355 } //Z#366 - /* Australia/Victoria */ :int { 359 } //Z#367 - /* Australia/West */ :int { 362 } //Z#368 - /* Australia/Yancowinna */ :int { 350 } //Z#369 - /* BET */ :int { 201 } //Z#370 - /* BST */ :int { 262 } //Z#371 - /* Brazil/Acre */ :int { 195 } //Z#372 - /* Brazil/DeNoronha */ :int { 176 } //Z#373 - /* Brazil/East */ :int { 201 } //Z#374 - /* Brazil/West */ :int { 156 } //Z#375 - /* CAT */ :int { 43 } //Z#376 + links:intvector { 1, 348, 352, 361, 366 } + } //Z#366 + /* Australia/Tasmania */ :int { 356 } //Z#367 + /* Australia/Victoria */ :int { 360 } //Z#368 + /* Australia/West */ :int { 363 } //Z#369 + /* Australia/Yancowinna */ :int { 351 } //Z#370 + /* BET */ :int { 202 } //Z#371 + /* BST */ :int { 263 } //Z#372 + /* Brazil/Acre */ :int { 196 } //Z#373 + /* Brazil/DeNoronha */ :int { 176 } //Z#374 + /* Brazil/East */ :int { 202 } //Z#375 + /* Brazil/West */ :int { 156 } //Z#376 + /* CAT */ :int { 43 } //Z#377 /* CET */ :table { trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 3600, 0, 3600, 3600 } @@ -1892,9 +1889,9 @@ zoneinfo64:table(nofallback) { finalRule { "C-Eur" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#377 - /* CNT */ :int { 206 } //Z#378 - /* CST */ :int { 98 } //Z#379 + } //Z#378 + /* CNT */ :int { 207 } //Z#379 + /* CST */ :int { 98 } //Z#380 /* CST6CDT */ :table { trans:intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -765392400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 } typeOffsets:intvector { -21600, 0, -21600, 3600 } @@ -1902,22 +1899,22 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -21600 } finalYear:int { 2008 } - } //Z#380 - /* CTT */ :int { 312 } //Z#381 - /* Canada/Atlantic */ :int { 128 } //Z#382 - /* Canada/Central */ :int { 221 } //Z#383 - /* Canada/East-Saskatchewan */ :int { 193 } //Z#384 - /* Canada/Eastern */ :int { 216 } //Z#385 - /* Canada/Mountain */ :int { 112 } //Z#386 - /* Canada/Newfoundland */ :int { 206 } //Z#387 - /* Canada/Pacific */ :int { 218 } //Z#388 - /* Canada/Saskatchewan */ :int { 193 } //Z#389 - /* Canada/Yukon */ :int { 220 } //Z#390 - /* Chile/Continental */ :int { 199 } //Z#391 - /* Chile/EasterIsland */ :int { 554 } //Z#392 - /* Cuba */ :int { 129 } //Z#393 - /* EAT */ :int { 48 } //Z#394 - /* ECT */ :int { 473 } //Z#395 + } //Z#381 + /* CTT */ :int { 313 } //Z#382 + /* Canada/Atlantic */ :int { 128 } //Z#383 + /* Canada/Central */ :int { 222 } //Z#384 + /* Canada/East-Saskatchewan */ :int { 194 } //Z#385 + /* Canada/Eastern */ :int { 217 } //Z#386 + /* Canada/Mountain */ :int { 112 } //Z#387 + /* Canada/Newfoundland */ :int { 207 } //Z#388 + /* Canada/Pacific */ :int { 219 } //Z#389 + /* Canada/Saskatchewan */ :int { 194 } //Z#390 + /* Canada/Yukon */ :int { 221 } //Z#391 + /* Chile/Continental */ :int { 200 } //Z#392 + /* Chile/EasterIsland */ :int { 555 } //Z#393 + /* Cuba */ :int { 129 } //Z#394 + /* EAT */ :int { 48 } //Z#395 + /* ECT */ :int { 474 } //Z#396 /* EET */ :table { trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 7200, 0, 7200, 3600 } @@ -1925,10 +1922,10 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - } //Z#396 + } //Z#397 /* EST */ :table { typeOffsets:intvector { -18000, 0 } - } //Z#397 + } //Z#398 /* EST5EDT */ :table { trans:intvector { -1633280400, -1615140000, -1601830800, -1583690400, -880218000, -765396000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } typeOffsets:intvector { -18000, 0, -18000, 3600 } @@ -1936,108 +1933,108 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -18000 } finalYear:int { 2008 } - } //Z#398 - /* Egypt */ :int { 18 } //Z#399 - /* Eire */ :int { 451 } //Z#400 + } //Z#399 + /* Egypt */ :int { 18 } //Z#400 + /* Eire */ :int { 452 } //Z#401 /* Etc/GMT */ :table { typeOffsets:intvector { 0, 0 } - links:intvector { 401, 402, 415, 430, 431, 503, 504, 505, 506, 507 } - } //Z#401 - /* Etc/GMT+0 */ :int { 401 } //Z#402 + links:intvector { 402, 403, 416, 431, 432, 504, 505, 506, 507, 508 } + } //Z#402 + /* Etc/GMT+0 */ :int { 402 } //Z#403 /* Etc/GMT+1 */ :table { typeOffsets:intvector { -3600, 0 } - } //Z#403 + } //Z#404 /* Etc/GMT+10 */ :table { typeOffsets:intvector { -36000, 0 } - } //Z#404 + } //Z#405 /* Etc/GMT+11 */ :table { typeOffsets:intvector { -39600, 0 } - } //Z#405 + } //Z#406 /* Etc/GMT+12 */ :table { typeOffsets:intvector { -43200, 0 } - } //Z#406 + } //Z#407 /* Etc/GMT+2 */ :table { typeOffsets:intvector { -7200, 0 } - } //Z#407 + } //Z#408 /* Etc/GMT+3 */ :table { typeOffsets:intvector { -10800, 0 } - } //Z#408 + } //Z#409 /* Etc/GMT+4 */ :table { typeOffsets:intvector { -14400, 0 } - } //Z#409 + } //Z#410 /* Etc/GMT+5 */ :table { typeOffsets:intvector { -18000, 0 } - } //Z#410 + } //Z#411 /* Etc/GMT+6 */ :table { typeOffsets:intvector { -21600, 0 } - } //Z#411 + } //Z#412 /* Etc/GMT+7 */ :table { typeOffsets:intvector { -25200, 0 } - } //Z#412 + } //Z#413 /* Etc/GMT+8 */ :table { typeOffsets:intvector { -28800, 0 } - } //Z#413 + } //Z#414 /* Etc/GMT+9 */ :table { typeOffsets:intvector { -32400, 0 } - } //Z#414 - /* Etc/GMT-0 */ :int { 401 } //Z#415 + } //Z#415 + /* Etc/GMT-0 */ :int { 402 } //Z#416 /* Etc/GMT-1 */ :table { typeOffsets:intvector { 3600, 0 } - } //Z#416 + } //Z#417 /* Etc/GMT-10 */ :table { typeOffsets:intvector { 36000, 0 } - } //Z#417 + } //Z#418 /* Etc/GMT-11 */ :table { typeOffsets:intvector { 39600, 0 } - } //Z#418 + } //Z#419 /* Etc/GMT-12 */ :table { typeOffsets:intvector { 43200, 0 } - } //Z#419 + } //Z#420 /* Etc/GMT-13 */ :table { typeOffsets:intvector { 46800, 0 } - } //Z#420 + } //Z#421 /* Etc/GMT-14 */ :table { typeOffsets:intvector { 50400, 0 } - } //Z#421 + } //Z#422 /* Etc/GMT-2 */ :table { typeOffsets:intvector { 7200, 0 } - } //Z#422 + } //Z#423 /* Etc/GMT-3 */ :table { typeOffsets:intvector { 10800, 0 } - } //Z#423 + } //Z#424 /* Etc/GMT-4 */ :table { typeOffsets:intvector { 14400, 0 } - } //Z#424 + } //Z#425 /* Etc/GMT-5 */ :table { typeOffsets:intvector { 18000, 0 } - } //Z#425 + } //Z#426 /* Etc/GMT-6 */ :table { typeOffsets:intvector { 21600, 0 } - } //Z#426 + } //Z#427 /* Etc/GMT-7 */ :table { typeOffsets:intvector { 25200, 0 } - } //Z#427 + } //Z#428 /* Etc/GMT-8 */ :table { typeOffsets:intvector { 28800, 0 } - } //Z#428 + } //Z#429 /* Etc/GMT-9 */ :table { typeOffsets:intvector { 32400, 0 } - } //Z#429 - /* Etc/GMT0 */ :int { 401 } //Z#430 - /* Etc/Greenwich */ :int { 401 } //Z#431 + } //Z#430 + /* Etc/GMT0 */ :int { 402 } //Z#431 + /* Etc/Greenwich */ :int { 402 } //Z#432 /* Etc/UCT */ :table { typeOffsets:intvector { 0, 0 } - links:intvector { 432, 612 } - } //Z#432 + links:intvector { 433, 613 } + } //Z#433 /* Etc/UTC */ :table { typeOffsets:intvector { 0, 0 } - links:intvector { 433, 434, 436, 626, 627, 631 } - } //Z#433 - /* Etc/Universal */ :int { 433 } //Z#434 + links:intvector { 434, 435, 437, 627, 628, 632 } + } //Z#434 + /* Etc/Universal */ :int { 434 } //Z#435 /* Etc/Unknown */ :table { typeOffsets:intvector { 0, 0 } - } //Z#435 - /* Etc/Zulu */ :int { 433 } //Z#436 + } //Z#436 + /* Etc/Zulu */ :int { 434 } //Z#437 /* Europe/Amsterdam */ :table { trans:intvector { -1693700372, -1680484772, -1663453172, -1650147572, -1633213172, -1617488372, -1601158772, -1586038772, -1569709172, -1554589172, -1538259572, -1523139572, -1507501172, -1490566772, -1470176372, -1459117172, -1443997172, -1427667572, -1406672372, -1396217972, -1376950772, -1364768372, -1345414772, -1333318772, -1313792372, -1301264372, -1282256372, -1269814772, -1250720372, -1238365172, -1219184372, -1206915572, -1186957172, -1175465972, -1156025972, -1143411572, -1124489972, -1111961972, -1092953972, -1080512372, -1061331572, -1049062772, -1029190772, -1025745572, -1017613200, -998259600, -986163600, -966723600, -954109200, -935022000, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 1172, 0, 1172, 3600, 1200, 0, 1200, 3600, 3600, 0, 3600, 3600 } @@ -2045,7 +2042,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#437 + } //Z#438 /* Europe/Andorra */ :table { transPre32:intvector { -1, 2117514132 } trans:intvector { -733881600, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2054,12 +2051,12 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#438 + } //Z#439 /* Europe/Astrakhan */ :table { trans:intvector { -1441249932, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1459033200 } typeOffsets:intvector { 11532, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "01030403040304030403040304030403040302010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" } - } //Z#439 + } //Z#440 /* Europe/Athens */ :table { trans:intvector { -1686101632, -1182996000, -1178161200, -906861600, -904878000, -857257200, -844477200, -828237600, -812422800, -552362400, -541652400, 166485600, 186184800, 198028800, 213753600, 228873600, 244080000, 260323200, 275446800, 291798000, 307407600, 323388000, 338936400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 5692, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 } @@ -2067,8 +2064,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - } //Z#440 - /* Europe/Belfast */ :int { 463 } //Z#441 + } //Z#441 + /* Europe/Belfast */ :int { 464 } //Z#442 /* Europe/Belgrade */ :table { transPre32:intvector { -1, 1581051976 } trans:intvector { -905824800, -857257200, -844556400, -828226800, -812502000, -796777200, -777942000, -766623600, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2077,8 +2074,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 442, 462, 474, 480, 483, 497 } - } //Z#442 + links:intvector { 443, 463, 475, 481, 484, 498 } + } //Z#443 /* Europe/Berlin */ :table { transPre32:intvector { -1, 1872912888 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -776563200, -765936000, -761180400, -748479600, -733273200, -717631200, -714610800, -710380800, -701910000, -684975600, -670460400, -654130800, -639010800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2087,8 +2084,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#443 - /* Europe/Bratislava */ :int { 475 } //Z#444 + } //Z#444 + /* Europe/Bratislava */ :int { 476 } //Z#445 /* Europe/Brussels */ :table { transPre32:intvector { -1, 1844014246 } trans:intvector { -1740355200, -1693702800, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1613826000, -1604278800, -1585530000, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1473642000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -934668000, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2097,7 +2094,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#445 + } //Z#446 /* Europe/Bucharest */ :table { trans:intvector { -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, 296604000, 307486800, 323816400, 338940000, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686095200, 701820000, 717544800, 733269600, 748994400, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 } typeOffsets:intvector { 6264, 0, 7200, 0, 7200, 3600 } @@ -2105,7 +2102,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1998 } - } //Z#446 + } //Z#447 /* Europe/Budapest */ :table { transPre32:intvector { -1, 1794028316 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1633212000, -1618700400, -1600466400, -1581202800, -906771600, -857257200, -844556400, -828226800, -812502000, -796777200, -778471200, -762660000, -749689200, -733359600, -717634800, -701910000, -686185200, -670460400, -654130800, -639010800, -621990000, -605660400, -492656400, -481168800, -461120400, -449632800, -428547600, -418269600, -397094400, -386809200, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2114,8 +2111,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#447 - /* Europe/Busingen */ :int { 499 } //Z#448 + } //Z#448 + /* Europe/Busingen */ :int { 500 } //Z#449 /* Europe/Chisinau */ :table { transPre32:intvector { -1, 1454819576 } trans:intvector { -1637114100, -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, -927165600, -898138800, -857257200, -844556400, -828226800, -812502000, -800157600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 641944800, 654652800, 670377600, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859680000, 877824000 } @@ -2124,8 +2121,8 @@ zoneinfo64:table(nofallback) { finalRule { "Moldova" } finalRaw:int { 7200 } finalYear:int { 1998 } - links:intvector { 449, 488 } - } //Z#449 + links:intvector { 450, 489 } + } //Z#450 /* Europe/Copenhagen */ :table { transPre32:intvector { -1, 1896673076 } trans:intvector { -1692496800, -1680490800, -935110800, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -769388400, -747010800, -736383600, -715215600, -706748400, -683161200, -675298800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2134,7 +2131,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#450 + } //Z#451 /* Europe/Dublin */ :table { transPre32:intvector { -1, 1473317596 } trans:intvector { -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -733359600, -719445600, -699490800, -684972000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 } @@ -2143,8 +2140,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - links:intvector { 400, 451 } - } //Z#451 + links:intvector { 401, 452 } + } //Z#452 /* Europe/Gibraltar */ :table { transPre32:intvector { -1, 1473317380 } trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2153,8 +2150,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#452 - /* Europe/Guernsey */ :int { 463 } //Z#453 + } //Z#453 + /* Europe/Guernsey */ :int { 464 } //Z#454 /* Europe/Helsinki */ :table { trans:intvector { -1535938789, -875671200, -859773600, 354672000, 370396800, 386121600, 401846400, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 5989, 0, 7200, 0, 7200, 3600 } @@ -2162,23 +2159,23 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - links:intvector { 454, 467 } - } //Z#454 - /* Europe/Isle_of_Man */ :int { 463 } //Z#455 + links:intvector { 455, 468 } + } //Z#455 + /* Europe/Isle_of_Man */ :int { 464 } //Z#456 /* Europe/Istanbul */ :table { transPre32:intvector { -1, 1454819544 } trans:intvector { -1869875816, -1693706400, -1680490800, -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1440208800, -1428030000, -1409709600, -1396494000, -931140000, -922762800, -917834400, -892436400, -875844000, -857358000, -781063200, -764737200, -744343200, -733806000, -716436000, -701924400, -684986400, -670474800, -654141600, -639025200, -621828000, -606970800, -590032800, -575434800, -235620000, -228279600, -177732000, -165726000, 10533600, 23835600, 41983200, 55285200, 74037600, 87339600, 107910000, 121219200, 133920000, 152676000, 165362400, 183502800, 202428000, 215557200, 228866400, 245797200, 260316000, 277246800, 308779200, 323827200, 340228800, 354672000, 371678400, 386121600, 403128000, 428446800, 433886400, 482792400, 496702800, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686098800, 701823600, 717548400, 733273200, 748998000, 764118000, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301274000, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396227600, 1414285200, 1427590800, 1446944400, 1459040400, 1473195600 } typeOffsets:intvector { 6952, 0, 7016, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030504050405040504050403020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020304" } - links:intvector { 274, 456, 611 } - } //Z#456 - /* Europe/Jersey */ :int { 463 } //Z#457 + links:intvector { 275, 457, 612 } + } //Z#457 + /* Europe/Jersey */ :int { 464 } //Z#458 /* Europe/Kaliningrad */ :table { transPre32:intvector { -1, 1872911176 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -788922000, -778730400, -762663600, -757389600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000, 1414278000 } typeOffsets:intvector { 4920, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } typeMap:bin { "01020102010201020102010201030403050605060506050605060506050605060504030403040304030403040304030403040304030403040304030403040304030403040304030403040304030503" } - } //Z#458 + } //Z#459 /* Europe/Kiev */ :table { trans:intvector { -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 646783200, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 7324, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } @@ -2186,12 +2183,12 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - } //Z#459 + } //Z#460 /* Europe/Kirov */ :table { trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 } typeOffsets:intvector { 11928, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "010304030403040304030403040304030403020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" } - } //Z#460 + } //Z#461 /* Europe/Lisbon */ :table { trans:intvector { -1830381795, -1689555600, -1677801600, -1667437200, -1647738000, -1635814800, -1616202000, -1604365200, -1584666000, -1572742800, -1553043600, -1541206800, -1521507600, -1442451600, -1426813200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1221440400, -1206925200, -1191200400, -1175475600, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942022800, -922669200, -906944400, -891133200, -877309200, -873684000, -864007200, -857955600, -845859600, -842839200, -831348000, -825901200, -814410000, -810784800, -799898400, -794451600, -782960400, -779335200, -768448800, -763002000, -749091600, -733366800, -717631200, -701906400, -686181600, -670456800, -654732000, -639007200, -591832800, -575503200, -559778400, -544053600, -528328800, -512604000, -496879200, -481154400, -465429600, -449704800, -433980000, -417650400, -401925600, -386200800, -370476000, -354751200, -339026400, -323301600, -307576800, -291852000, -276127200, -260402400, -244677600, -228348000, -212623200, -196898400, -181173600, -165448800, -149724000, -133999200, -118274400, 212544000, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -2205, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } @@ -2199,9 +2196,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - links:intvector { 461, 593 } - } //Z#461 - /* Europe/Ljubljana */ :int { 442 } //Z#462 + links:intvector { 462, 594 } + } //Z#462 + /* Europe/Ljubljana */ :int { 443 } //Z#463 /* Europe/London */ :table { transPre32:intvector { -1, 442304971 } trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 } @@ -2210,8 +2207,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - links:intvector { 441, 453, 455, 457, 463, 501, 502 } - } //Z#463 + links:intvector { 442, 454, 456, 458, 464, 502, 503 } + } //Z#464 /* Europe/Luxembourg */ :table { trans:intvector { -2069713476, -1692496800, -1680483600, -1662343200, -1650157200, -1632006000, -1618700400, -1612659600, -1604278800, -1585519200, -1574038800, -1552258800, -1539997200, -1520550000, -1507510800, -1490572800, -1473642000, -1459119600, -1444006800, -1427673600, -1411866000, -1396224000, -1379293200, -1364774400, -1348448400, -1333324800, -1316394000, -1301270400, -1284339600, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -935186400, -857257200, -844556400, -828226800, -812502000, -797986800, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 1476, 0, 0, 0, 0, 3600, 3600, 0, 3600, 3600 } @@ -2219,16 +2216,16 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#464 + } //Z#465 /* Europe/Madrid */ :table { - transPre32:intvector { -1, 2117515380 } - trans:intvector { -1661734800, -1648429200, -1631926800, -1616893200, -1601254800, -1585357200, -1442451600, -1427677200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1029114000, -1017622800, -1002848400, -986173200, -969238800, -954118800, -940208400, -873079200, -862538400, -842839200, -828237600, -811389600, -796010400, -779940000, -765421200, -748490400, -733888800, -652327200, -639190800, 135122400, 150246000, 167176800, 181695600, 196812000, 212540400, 228866400, 243990000, 260402400, 276044400, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } + transPre32:intvector { -1, 2117514496 } + trans:intvector { -1631926800, -1616889600, -1601168400, -1585353600, -1442451600, -1427673600, -1379293200, -1364774400, -1348448400, -1333324800, -1316390400, -1301270400, -1284339600, -1269820800, -1026954000, -1017619200, -1001898000, -999482400, -986090400, -954115200, -940208400, -873079200, -862621200, -842839200, -828320400, -811389600, -796870800, -779940000, -765421200, -748490400, -733971600, -652327200, -639018000, 135122400, 150246000, 166572000, 181695600, 196812000, 212540400, 228866400, 243990000, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { -884, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } - typeMap:bin { "01020102010201020102010201020102010201020102010203020302030203020304050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" } + typeMap:bin { "0102010201020102010201020102010201020302010405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" } finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#465 + } //Z#466 /* Europe/Malta */ :table { transPre32:intvector { -1, 1891488612 } trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812588400, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 102380400, 118105200, 135730800, 148518000, 167187600, 180489600, 198637200, 211939200, 230086800, 243388800, 261536400, 274838400, 292986000, 306288000, 323312400, 338342400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2237,14 +2234,14 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#466 - /* Europe/Mariehamn */ :int { 454 } //Z#467 + } //Z#467 + /* Europe/Mariehamn */ :int { 455 } //Z#468 /* Europe/Minsk */ :table { transPre32:intvector { -1, 1454819880 } trans:intvector { -1441158600, -1247536800, -899780400, -857257200, -844556400, -828226800, -812502000, -804650400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 670374000, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000 } typeOffsets:intvector { 6616, 0, 3600, 0, 3600, 3600, 6600, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } typeMap:bin { "0304060201020102060706070607060706070607060706070607060504050405040504050405040504050405040504050405040504050405040504050405040504050406" } - } //Z#468 + } //Z#469 /* Europe/Monaco */ :table { transPre32:intvector { -1, 1808287124 } trans:intvector { -1855958961, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -904438800, -891136800, -877827600, -857257200, -844556400, -828226800, -812502000, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2253,14 +2250,14 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#469 + } //Z#470 /* Europe/Moscow */ :table { trans:intvector { -1688265017, -1656819079, -1641353479, -1627965079, -1618716679, -1596429079, -1593820800, -1589860800, -1542427200, -1539493200, -1525323600, -1522728000, -1491188400, -1247536800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 } typeOffsets:intvector { 9017, 0, 7200, 0, 7200, 3600, 9079, 0, 9079, 3600, 9079, 7200, 10800, 0, 10800, 3600, 10800, 7200, 14400, 0 } typeMap:bin { "0304030504050706070807060106070607060706070607060706070607060706070602010607060706070607060706070607060706070607060706070607060706070607060706070607060906" } - links:intvector { 470, 629 } - } //Z#470 - /* Europe/Nicosia */ :int { 296 } //Z#471 + links:intvector { 471, 630 } + } //Z#471 + /* Europe/Nicosia */ :int { 297 } //Z#472 /* Europe/Oslo */ :table { transPre32:intvector { -1, 1928209516 } trans:intvector { -1691884800, -1680573600, -927511200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -340844400, -324514800, -308790000, -293065200, -277340400, -261615600, -245890800, -230166000, -214441200, -198716400, -182991600, -166662000, -147913200, -135212400, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2269,8 +2266,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 236, 341, 472 } - } //Z#472 + links:intvector { 237, 342, 473 } + } //Z#473 /* Europe/Paris */ :table { trans:intvector { -1855958901, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -932436000, -857257200, -844556400, -828226800, -812502000, -800071200, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 561, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } @@ -2278,9 +2275,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 395, 473 } - } //Z#473 - /* Europe/Podgorica */ :int { 442 } //Z#474 + links:intvector { 396, 474 } + } //Z#474 + /* Europe/Podgorica */ :int { 443 } //Z#475 /* Europe/Prague */ :table { transPre32:intvector { -1, 1825565432 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -798073200, -780534000, -761180400, -746578800, -733359600, -716425200, -701910000, -684975600, -670460400, -654217200, -639010800, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2289,8 +2286,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 444, 475 } - } //Z#475 + links:intvector { 445, 476 } + } //Z#476 /* Europe/Riga */ :table { trans:intvector { -1632008194, -1618702594, -1601681794, -1597275394, -1377308194, -928029600, -899521200, -857257200, -844556400, -828226800, -812502000, -796777200, -795834000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 843955200, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 985482000, 1004230800 } typeOffsets:intvector { 5794, 0, 3600, 0, 3600, 3600, 5794, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } @@ -2298,7 +2295,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 2002 } - } //Z#476 + } //Z#477 /* Europe/Rome */ :table { transPre32:intvector { -1, 1891402096 } trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 107910000, 118191600, 138754800, 149641200, 170809200, 181090800, 202258800, 212540400, 233103600, 243990000, 265158000, 276044400, 296607600, 307494000, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2307,27 +2304,27 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 477, 479, 492 } - } //Z#477 + links:intvector { 478, 480, 493 } + } //Z#478 /* Europe/Samara */ :table { trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 687916800, 701820000, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288479600, 1301180400 } typeOffsets:intvector { 12020, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "02040504050405040504050405040504050403020302010204050405040504050405040504050405040504050405040504050405040504050405040504030204" } - } //Z#478 - /* Europe/San_Marino */ :int { 477 } //Z#479 - /* Europe/Sarajevo */ :int { 442 } //Z#480 + } //Z#479 + /* Europe/San_Marino */ :int { 478 } //Z#480 + /* Europe/Sarajevo */ :int { 443 } //Z#481 /* Europe/Saratov */ :table { trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1480806000 } typeOffsets:intvector { 11058, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "01030403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" } - } //Z#481 + } //Z#482 /* Europe/Simferopol */ :table { transPre32:intvector { -1, 1454818312 } trans:intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 701820000, 717541200, 733269600, 748990800, 764719200, 767739600, 780436800, 796165200, 811886400, 828219600, 846374400, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396137600, 1414274400 } typeOffsets:intvector { 8184, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8160, 0, 10800, 0, 10800, 3600, 14400, 0 } typeMap:bin { "050306020102010206070607060706070607060706070607060706030403040304070607060706040304030403040304030403040304030403040304030403040304030403040304030806" } - } //Z#482 - /* Europe/Skopje */ :int { 442 } //Z#483 + } //Z#483 + /* Europe/Skopje */ :int { 443 } //Z#484 /* Europe/Sofia */ :table { transPre32:intvector { -1, 1454820900, -1, 1925440280 } trans:intvector { -857257200, -844556400, -828226800, -812502000, -796777200, -781048800, 291762000, 307576800, 323816400, 339026400, 355266000, 370393200, 386715600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 } @@ -2336,7 +2333,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1998 } - } //Z#484 + } //Z#485 /* Europe/Stockholm */ :table { transPre32:intvector { -1, 1423286164, -1, 2085974882 } trans:intvector { -1692496800, -1680483600, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2345,7 +2342,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#485 + } //Z#486 /* Europe/Tallinn */ :table { trans:intvector { -1638322740, -1632006000, -1618700400, -1593824400, -1535938740, -927943200, -892954800, -857257200, -844556400, -828226800, -812502000, -797652000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909277200, 922582800, 941331600, 1017536400, 1035680400 } typeOffsets:intvector { 5940, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } @@ -2353,7 +2350,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 2003 } - } //Z#486 + } //Z#487 /* Europe/Tirane */ :table { trans:intvector { -1767230360, -932346000, -857257200, -844556400, -843519600, 136854000, 149896800, 168130800, 181432800, 199839600, 213141600, 231894000, 244591200, 263257200, 276040800, 294706800, 307490400, 326156400, 339458400, 357087600, 370389600, 389142000, 402444000, 419468400, 433807200, 449622000, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 4760, 0, 3600, 0, 3600, 3600 } @@ -2361,13 +2358,13 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#487 - /* Europe/Tiraspol */ :int { 449 } //Z#488 + } //Z#488 + /* Europe/Tiraspol */ :int { 450 } //Z#489 /* Europe/Ulyanovsk */ :table { trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1459033200 } typeOffsets:intvector { 11616, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "030506050605060506050605060506050605040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050305" } - } //Z#489 + } //Z#490 /* Europe/Uzhgorod */ :table { transPre32:intvector { -1, 1794027544 } trans:intvector { -938905200, -857257200, -844556400, -828226800, -812502000, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 670384800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 } @@ -2376,9 +2373,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - } //Z#490 - /* Europe/Vaduz */ :int { 499 } //Z#491 - /* Europe/Vatican */ :int { 477 } //Z#492 + } //Z#491 + /* Europe/Vaduz */ :int { 500 } //Z#492 + /* Europe/Vatican */ :int { 478 } //Z#493 /* Europe/Vienna */ :table { transPre32:intvector { -1, 1872912175 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1569711600, -1555801200, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -780188400, -748479600, -733359600, -717634800, -701910000, -684975600, -670460400, 323823600, 338940000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2387,7 +2384,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#493 + } //Z#494 /* Europe/Vilnius */ :table { transPre32:intvector { -1, 1454820420 } trans:intvector { -1672536240, -1585100136, -1561251600, -1553565600, -928198800, -900126000, -857257200, -844556400, -828226800, -812502000, -802144800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891133200, 909277200, 922582800, 941331600, 1048986000, 1067130000 } @@ -2396,12 +2393,12 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 2004 } - } //Z#494 + } //Z#495 /* Europe/Volgograd */ :table { trans:intvector { -1577761060, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 } typeOffsets:intvector { 10660, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "010304030403040304030403040304030201020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" } - } //Z#495 + } //Z#496 /* Europe/Warsaw */ :table { trans:intvector { -1717032240, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1600473600, -1587168000, -1501725600, -931734000, -857257200, -844556400, -828226800, -812502000, -796608000, -778726800, -762660000, -748486800, -733273200, -715215600, -701910000, -684975600, -670460400, -654130800, -639010800, -397094400, -386812800, -371088000, -355363200, -334195200, -323308800, -307584000, -291859200, -271296000, -260409600, -239846400, -228960000, -208396800, -197510400, -176342400, -166060800, 228873600, 243993600, 260323200, 276048000, 291772800, 307497600, 323827200, 338947200, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 5040, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 } @@ -2409,9 +2406,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 496, 592 } - } //Z#496 - /* Europe/Zagreb */ :int { 442 } //Z#497 + links:intvector { 497, 593 } + } //Z#497 + /* Europe/Zagreb */ :int { 443 } //Z#498 /* Europe/Zaporozhye */ :table { transPre32:intvector { -1, 1454818056 } trans:intvector { -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 } @@ -2420,7 +2417,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - } //Z#498 + } //Z#499 /* Europe/Zurich */ :table { transPre32:intvector { -1, 619768448, -1, 1909720710 } trans:intvector { -904435200, -891129600, -872985600, -859680000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2429,75 +2426,75 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 448, 491, 499 } - } //Z#499 + links:intvector { 449, 492, 500 } + } //Z#500 /* Factory */ :table { typeOffsets:intvector { 0, 0 } - } //Z#500 - /* GB */ :int { 463 } //Z#501 - /* GB-Eire */ :int { 463 } //Z#502 - /* GMT */ :int { 401 } //Z#503 - /* GMT+0 */ :int { 401 } //Z#504 - /* GMT-0 */ :int { 401 } //Z#505 - /* GMT0 */ :int { 401 } //Z#506 - /* Greenwich */ :int { 401 } //Z#507 + } //Z#501 + /* GB */ :int { 464 } //Z#502 + /* GB-Eire */ :int { 464 } //Z#503 + /* GMT */ :int { 402 } //Z#504 + /* GMT+0 */ :int { 402 } //Z#505 + /* GMT-0 */ :int { 402 } //Z#506 + /* GMT0 */ :int { 402 } //Z#507 + /* Greenwich */ :int { 402 } //Z#508 /* HST */ :table { typeOffsets:intvector { -36000, 0 } - } //Z#508 - /* Hongkong */ :int { 271 } //Z#509 - /* IET */ :int { 131 } //Z#510 - /* IST */ :int { 285 } //Z#511 - /* Iceland */ :int { 343 } //Z#512 - /* Indian/Antananarivo */ :int { 48 } //Z#513 + } //Z#509 + /* Hongkong */ :int { 272 } //Z#510 + /* IET */ :int { 131 } //Z#511 + /* IST */ :int { 286 } //Z#512 + /* Iceland */ :int { 344 } //Z#513 + /* Indian/Antananarivo */ :int { 48 } //Z#514 /* Indian/Chagos */ :table { trans:intvector { -1988167780, 820436400 } typeOffsets:intvector { 17380, 0, 18000, 0, 21600, 0 } typeMap:bin { "0102" } - } //Z#514 + } //Z#515 /* Indian/Christmas */ :table { transPre32:intvector { -1, 1930865124 } typeOffsets:intvector { 25372, 0, 25200, 0 } typeMap:bin { "01" } - } //Z#515 + } //Z#516 /* Indian/Cocos */ :table { transPre32:intvector { -1, 2085955236 } typeOffsets:intvector { 23260, 0, 23400, 0 } typeMap:bin { "01" } - } //Z#516 - /* Indian/Comoro */ :int { 48 } //Z#517 + } //Z#517 + /* Indian/Comoro */ :int { 48 } //Z#518 /* Indian/Kerguelen */ :table { trans:intvector { -631152000 } typeOffsets:intvector { 0, 0, 18000, 0 } typeMap:bin { "01" } - } //Z#518 + } //Z#519 /* Indian/Mahe */ :table { trans:intvector { -2006653308 } typeOffsets:intvector { 13308, 0, 14400, 0 } typeMap:bin { "01" } - } //Z#519 + } //Z#520 /* Indian/Maldives */ :table { trans:intvector { -315636840 } typeOffsets:intvector { 17640, 0, 18000, 0 } typeMap:bin { "01" } - } //Z#520 + } //Z#521 /* Indian/Mauritius */ :table { trans:intvector { -1988164200, 403041600, 417034800, 1224972000, 1238274000 } typeOffsets:intvector { 13800, 0, 14400, 0, 14400, 3600 } typeMap:bin { "0102010201" } - } //Z#521 - /* Indian/Mayotte */ :int { 48 } //Z#522 + } //Z#522 + /* Indian/Mayotte */ :int { 48 } //Z#523 /* Indian/Reunion */ :table { trans:intvector { -1848886912 } typeOffsets:intvector { 13312, 0, 14400, 0 } typeMap:bin { "01" } - } //Z#523 - /* Iran */ :int { 318 } //Z#524 - /* Israel */ :int { 277 } //Z#525 - /* JST */ :int { 322 } //Z#526 - /* Jamaica */ :int { 142 } //Z#527 - /* Japan */ :int { 322 } //Z#528 - /* Kwajalein */ :int { 568 } //Z#529 - /* Libya */ :int { 56 } //Z#530 + } //Z#524 + /* Iran */ :int { 319 } //Z#525 + /* Israel */ :int { 278 } //Z#526 + /* JST */ :int { 323 } //Z#527 + /* Jamaica */ :int { 142 } //Z#528 + /* Japan */ :int { 323 } //Z#529 + /* Kwajalein */ :int { 569 } //Z#530 + /* Libya */ :int { 56 } //Z#531 /* MET */ :table { trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 3600, 0, 3600, 3600 } @@ -2505,11 +2502,11 @@ zoneinfo64:table(nofallback) { finalRule { "C-Eur" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#531 - /* MIT */ :int { 549 } //Z#532 + } //Z#532 + /* MIT */ :int { 550 } //Z#533 /* MST */ :table { typeOffsets:intvector { -25200, 0 } - } //Z#533 + } //Z#534 /* MST7MDT */ :table { trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 } typeOffsets:intvector { -25200, 0, -25200, 3600 } @@ -2517,20 +2514,20 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -25200 } finalYear:int { 2008 } - } //Z#534 - /* Mexico/BajaNorte */ :int { 215 } //Z#535 - /* Mexico/BajaSur */ :int { 160 } //Z#536 - /* Mexico/General */ :int { 165 } //Z#537 - /* NET */ :int { 334 } //Z#538 - /* NST */ :int { 550 } //Z#539 - /* NZ */ :int { 550 } //Z#540 - /* NZ-CHAT */ :int { 552 } //Z#541 - /* Navajo */ :int { 109 } //Z#542 - /* PLT */ :int { 280 } //Z#543 - /* PNT */ :int { 184 } //Z#544 - /* PRC */ :int { 312 } //Z#545 - /* PRT */ :int { 189 } //Z#546 - /* PST */ :int { 151 } //Z#547 + } //Z#535 + /* Mexico/BajaNorte */ :int { 216 } //Z#536 + /* Mexico/BajaSur */ :int { 160 } //Z#537 + /* Mexico/General */ :int { 165 } //Z#538 + /* NET */ :int { 335 } //Z#539 + /* NST */ :int { 551 } //Z#540 + /* NZ */ :int { 551 } //Z#541 + /* NZ-CHAT */ :int { 553 } //Z#542 + /* Navajo */ :int { 109 } //Z#543 + /* PLT */ :int { 281 } //Z#544 + /* PNT */ :int { 184 } //Z#545 + /* PRC */ :int { 313 } //Z#546 + /* PRT */ :int { 189 } //Z#547 + /* PST */ :int { 151 } //Z#548 /* PST8PDT */ :table { trans:intvector { -1633269600, -1615129200, -1601820000, -1583679600, -880207200, -765385200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 } typeOffsets:intvector { -28800, 0, -28800, 3600 } @@ -2538,7 +2535,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -28800 } finalYear:int { 2008 } - } //Z#548 + } //Z#549 /* Pacific/Apia */ :table { transPre32:intvector { -1, 1439229312 } trans:intvector { -1861878784, -631110600, 1285498800, 1301752800, 1316872800, 1325239200, 1333202400, 1348927200 } @@ -2547,8 +2544,8 @@ zoneinfo64:table(nofallback) { finalRule { "WS" } finalRaw:int { 46800 } finalYear:int { 2013 } - links:intvector { 532, 549 } - } //Z#549 + links:intvector { 533, 550 } + } //Z#550 /* Pacific/Auckland */ :table { transPre32:intvector { -1, 1102531752 } trans:intvector { -1330335000, -1320057000, -1300699800, -1287396000, -1269250200, -1255946400, -1237800600, -1224496800, -1206351000, -1192442400, -1174901400, -1160992800, -1143451800, -1125914400, -1112607000, -1094464800, -1081157400, -1063015200, -1049707800, -1031565600, -1018258200, -1000116000, -986808600, -968061600, -955359000, -936612000, -923304600, -757425600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 } @@ -2557,14 +2554,14 @@ zoneinfo64:table(nofallback) { finalRule { "NZ" } finalRaw:int { 43200 } finalYear:int { 2009 } - links:intvector { 229, 232, 539, 540, 550 } - } //Z#550 + links:intvector { 230, 233, 540, 541, 551 } + } //Z#551 /* Pacific/Bougainville */ :table { transPre32:intvector { -1, 1454789160, -1, 1928176784 } trans:intvector { -868010400, -768906000, 1419696000 } typeOffsets:intvector { 37336, 0, 32400, 0, 35312, 0, 36000, 0, 39600, 0 } typeMap:bin { "0203010304" } - } //Z#551 + } //Z#552 /* Pacific/Chatham */ :table { transPre32:intvector { -1, 1102529668 } trans:intvector { -757426500, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 } @@ -2573,14 +2570,14 @@ zoneinfo64:table(nofallback) { finalRule { "Chatham" } finalRaw:int { 45900 } finalYear:int { 2009 } - links:intvector { 541, 552 } - } //Z#552 + links:intvector { 542, 553 } + } //Z#553 /* Pacific/Chuuk */ :table { transPre32:intvector { -1, 2117478068 } typeOffsets:intvector { 36428, 0, 36000, 0 } typeMap:bin { "01" } - links:intvector { 553, 588, 591 } - } //Z#553 + links:intvector { 554, 589, 592 } + } //Z#554 /* Pacific/Easter */ :table { trans:intvector { -1178124152, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 } typeOffsets:intvector { -26248, 0, -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 } @@ -2588,25 +2585,25 @@ zoneinfo64:table(nofallback) { finalRule { "Chile" } finalRaw:int { -21600 } finalYear:int { 2017 } - links:intvector { 392, 554 } - } //Z#554 + links:intvector { 393, 555 } + } //Z#555 /* Pacific/Efate */ :table { trans:intvector { -1829387596, 433256400, 448977600, 467298000, 480427200, 496760400, 511876800, 528210000, 543931200, 559659600, 575380800, 591109200, 606830400, 622558800, 638280000, 654008400, 669729600, 686062800, 696340800, 719931600, 727790400 } typeOffsets:intvector { 40396, 0, 39600, 0, 39600, 3600 } typeMap:bin { "010201020102010201020102010201020102010201" } - } //Z#555 + } //Z#556 /* Pacific/Enderbury */ :table { transPre32:intvector { -1, 2117555556 } trans:intvector { 307627200, 788958000 } typeOffsets:intvector { -41060, 0, -43200, 0, -39600, 0, 46800, 0 } typeMap:bin { "010203" } - } //Z#556 + } //Z#557 /* Pacific/Fakaofo */ :table { transPre32:intvector { -1, 2117555592 } trans:intvector { 1325242800 } typeOffsets:intvector { -41096, 0, -39600, 0, 46800, 0 } typeMap:bin { "0102" } - } //Z#557 + } //Z#558 /* Pacific/Fiji */ :table { trans:intvector { -1709985344, 909842400, 920124000, 941896800, 951573600, 1259416800, 1269698400, 1287842400, 1299333600, 1319292000, 1327154400, 1350741600, 1358604000, 1382796000, 1390050000, 1414850400, 1421503200, 1446300000 } typeOffsets:intvector { 42944, 0, 43200, 0, 43200, 3600 } @@ -2614,143 +2611,143 @@ zoneinfo64:table(nofallback) { finalRule { "Fiji" } finalRaw:int { 43200 } finalYear:int { 2016 } - } //Z#558 + } //Z#559 /* Pacific/Funafuti */ :table { transPre32:intvector { -1, 2117471484 } typeOffsets:intvector { 43012, 0, 43200, 0 } typeMap:bin { "01" } - } //Z#559 - /* Pacific/Galapagos */ :table { - trans:intvector { -1230746496, 504939600 } - typeOffsets:intvector { -21504, 0, -21600, 0, -18000, 0 } - typeMap:bin { "0201" } } //Z#560 + /* Pacific/Galapagos */ :table { + trans:intvector { -1230746496, 504939600, 722930400, 728888400 } + typeOffsets:intvector { -21504, 0, -21600, 0, -21600, 3600, -18000, 0 } + typeMap:bin { "03010201" } + } //Z#561 /* Pacific/Gambier */ :table { trans:intvector { -1806678012 } typeOffsets:intvector { -32388, 0, -32400, 0 } typeMap:bin { "01" } - } //Z#561 + } //Z#562 /* Pacific/Guadalcanal */ :table { trans:intvector { -1806748788 } typeOffsets:intvector { 38388, 0, 39600, 0 } typeMap:bin { "01" } - links:intvector { 562, 596 } - } //Z#562 + links:intvector { 563, 597 } + } //Z#563 /* Pacific/Guam */ :table { transPre32:intvector { -1, 350340556, -1, 2117479756 } typeOffsets:intvector { -51660, 0, 34740, 0, 36000, 0 } typeMap:bin { "0102" } - links:intvector { 563, 583 } - } //Z#563 + links:intvector { 564, 584 } + } //Z#564 /* Pacific/Honolulu */ :table { transPre32:intvector { -1, 1960865982 } trans:intvector { -1157283000, -1155436200, -880198200, -765376200, -712150200 } typeOffsets:intvector { -37886, 0, -37800, 0, -37800, 3600, -36000, 0 } typeMap:bin { "010201020103" } - links:intvector { 564, 565, 619 } - } //Z#564 - /* Pacific/Johnston */ :int { 564 } //Z#565 + links:intvector { 565, 566, 620 } + } //Z#565 + /* Pacific/Johnston */ :int { 565 } //Z#566 /* Pacific/Kiritimati */ :table { transPre32:intvector { -1, 2117552256 } trans:intvector { 307622400, 788954400 } typeOffsets:intvector { -37760, 0, -38400, 0, -36000, 0, 50400, 0 } typeMap:bin { "010203" } - } //Z#566 + } //Z#567 /* Pacific/Kosrae */ :table { transPre32:intvector { -1, 2117475380 } trans:intvector { -7988400, 915105600 } typeOffsets:intvector { 39116, 0, 39600, 0, 43200, 0 } typeMap:bin { "010201" } - } //Z#567 + } //Z#568 /* Pacific/Kwajalein */ :table { transPre32:intvector { -1, 2117474336 } trans:intvector { -7988400, 745848000 } typeOffsets:intvector { 40160, 0, -43200, 0, 39600, 0, 43200, 0 } typeMap:bin { "020103" } - links:intvector { 529, 568 } - } //Z#568 + links:intvector { 530, 569 } + } //Z#569 /* Pacific/Majuro */ :table { transPre32:intvector { -1, 2117473408 } trans:intvector { -7988400 } typeOffsets:intvector { 41088, 0, 39600, 0, 43200, 0 } typeMap:bin { "0102" } - } //Z#569 + } //Z#570 /* Pacific/Marquesas */ :table { trans:intvector { -1806676920 } typeOffsets:intvector { -33480, 0, -34200, 0 } typeMap:bin { "01" } - } //Z#570 - /* Pacific/Midway */ :int { 576 } //Z#571 + } //Z#571 + /* Pacific/Midway */ :int { 577 } //Z#572 /* Pacific/Nauru */ :table { trans:intvector { -1545131260, -877347000, -800960400, 294323400 } typeOffsets:intvector { 40060, 0, 32400, 0, 41400, 0, 43200, 0 } typeMap:bin { "02010203" } - } //Z#572 + } //Z#573 /* Pacific/Niue */ :table { transPre32:intvector { -1, 2117555276 } trans:intvector { -599575200, 276089400 } typeOffsets:intvector { -40780, 0, -41400, 0, -40800, 0, -39600, 0 } typeMap:bin { "020103" } - } //Z#573 + } //Z#574 /* Pacific/Norfolk */ :table { transPre32:intvector { -1, 2117474184 } trans:intvector { -599656320, 152029800, 162912600, 1443882600 } typeOffsets:intvector { 40312, 0, 39600, 0, 40320, 0, 41400, 0, 41400, 3600 } typeMap:bin { "0203040301" } - } //Z#574 + } //Z#575 /* Pacific/Noumea */ :table { trans:intvector { -1829387148, 250002000, 257342400, 281451600, 288878400, 849366000, 857228400 } typeOffsets:intvector { 39948, 0, 39600, 0, 39600, 3600 } typeMap:bin { "01020102010201" } - } //Z#575 + } //Z#576 /* Pacific/Pago_Pago */ :table { transPre32:intvector { -1, 1439229064 } trans:intvector { -1861879032 } typeOffsets:intvector { 45432, 0, -40968, 0, -39600, 0 } typeMap:bin { "0102" } - links:intvector { 571, 576, 584, 625 } - } //Z#576 + links:intvector { 572, 577, 585, 626 } + } //Z#577 /* Pacific/Palau */ :table { transPre32:intvector { -1, 2117482220 } typeOffsets:intvector { 32276, 0, 32400, 0 } typeMap:bin { "01" } - } //Z#577 + } //Z#578 /* Pacific/Pitcairn */ :table { transPre32:intvector { -1, 2117545716 } trans:intvector { 893665800 } typeOffsets:intvector { -31220, 0, -30600, 0, -28800, 0 } typeMap:bin { "0102" } - } //Z#578 + } //Z#579 /* Pacific/Pohnpei */ :table { transPre32:intvector { -1, 2117476524 } typeOffsets:intvector { 37972, 0, 39600, 0 } typeMap:bin { "01" } - links:intvector { 579, 580 } - } //Z#579 - /* Pacific/Ponape */ :int { 579 } //Z#580 + links:intvector { 580, 581 } + } //Z#580 + /* Pacific/Ponape */ :int { 580 } //Z#581 /* Pacific/Port_Moresby */ :table { transPre32:intvector { -1, 1454791176, -1, 1928176784 } typeOffsets:intvector { 35320, 0, 35312, 0, 36000, 0 } typeMap:bin { "0102" } - } //Z#581 + } //Z#582 /* Pacific/Rarotonga */ :table { transPre32:intvector { -1, 2117552840 } trans:intvector { 279714600, 289387800, 309952800, 320837400, 341402400, 352287000, 372852000, 384341400, 404906400, 415791000, 436356000, 447240600, 467805600, 478690200, 499255200, 510139800, 530704800, 541589400, 562154400, 573643800, 594208800, 605093400, 625658400, 636543000, 657108000, 667992600 } typeOffsets:intvector { -38344, 0, -37800, 0, -36000, 0, -36000, 1800 } typeMap:bin { "010302030203020302030203020302030203020302030203020302" } - } //Z#582 - /* Pacific/Saipan */ :int { 563 } //Z#583 - /* Pacific/Samoa */ :int { 576 } //Z#584 + } //Z#583 + /* Pacific/Saipan */ :int { 564 } //Z#584 + /* Pacific/Samoa */ :int { 577 } //Z#585 /* Pacific/Tahiti */ :table { trans:intvector { -1806674504 } typeOffsets:intvector { -35896, 0, -36000, 0 } typeMap:bin { "01" } - } //Z#585 + } //Z#586 /* Pacific/Tarawa */ :table { transPre32:intvector { -1, 2117472972 } typeOffsets:intvector { 41524, 0, 43200, 0 } typeMap:bin { "01" } - } //Z#586 + } //Z#587 /* Pacific/Tongatapu */ :table { transPre32:intvector { -1, 2117470136 } trans:intvector { -915193200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400, 1478350800, 1484398800, 1509800400 } @@ -2759,28 +2756,28 @@ zoneinfo64:table(nofallback) { finalRule { "Tonga" } finalRaw:int { 46800 } finalYear:int { 2018 } - } //Z#587 - /* Pacific/Truk */ :int { 553 } //Z#588 + } //Z#588 + /* Pacific/Truk */ :int { 554 } //Z#589 /* Pacific/Wake */ :table { transPre32:intvector { -1, 2117474508 } typeOffsets:intvector { 39988, 0, 43200, 0 } typeMap:bin { "01" } - } //Z#589 + } //Z#590 /* Pacific/Wallis */ :table { transPre32:intvector { -1, 2117470376 } typeOffsets:intvector { 44120, 0, 43200, 0 } typeMap:bin { "01" } - } //Z#590 - /* Pacific/Yap */ :int { 553 } //Z#591 - /* Poland */ :int { 496 } //Z#592 - /* Portugal */ :int { 461 } //Z#593 - /* ROC */ :int { 315 } //Z#594 - /* ROK */ :int { 311 } //Z#595 - /* SST */ :int { 562 } //Z#596 - /* Singapore */ :int { 313 } //Z#597 + } //Z#591 + /* Pacific/Yap */ :int { 554 } //Z#592 + /* Poland */ :int { 497 } //Z#593 + /* Portugal */ :int { 462 } //Z#594 + /* ROC */ :int { 316 } //Z#595 + /* ROK */ :int { 312 } //Z#596 + /* SST */ :int { 563 } //Z#597 + /* Singapore */ :int { 314 } //Z#598 /* SystemV/AST4 */ :table { typeOffsets:intvector { -14400, 0 } - } //Z#598 + } //Z#599 /* SystemV/AST4ADT */ :table { transPre32:intvector { -1, 2096195296, -1, 2111916496, -1, 2127644896, -1, 2143366096 } trans:intvector { -2135872800, -2120151600, -2104423200, -2088702000, -2072973600, -2056647600, -2040919200, -2025198000, -2009469600, -1993748400, -1978020000, -1962298800, -1946570400, -1930849200, -1915120800, -1898794800, -1883671200, -1867345200, -1851616800, -1835895600, -1820167200, -1804446000, -1788717600, -1772996400, -1757268000, -1741546800, -1725818400, -1709492400, -1693764000, -1678042800, -1662314400, -1646593200, -1630864800, -1615143600, -1599415200, -1583694000, -1567965600, -1551639600, -1536516000, -1520190000, -1504461600, -1488740400, -1473012000, -1457290800, -1441562400, -1425841200, -1410112800, -1394391600, -1378663200, -1362337200, -1347213600, -1330887600, -1315159200, -1299438000, -1283709600, -1267988400, -1252260000, -1236538800, -1220810400, -1205089200, -1189360800, -1173034800, -1157306400, -1141585200, -1125856800, -1110135600, -1094407200, -1078686000, -1062957600, -1047236400, -1031508000, -1015182000, -1000058400, -983732400, -968004000, -952282800, -936554400, -920833200, -905104800, -889383600, -873655200, -857934000, -842205600, -825879600, -810151200, -794430000, -778701600, -762980400, -747252000, -731530800, -715802400, -700081200, -684352800, -668026800, -652903200, -636577200, -620848800, -605127600, -589399200, -573678000, -557949600, -542228400, -526500000, -510778800, -495050400, -478724400, -463600800, -447274800, -431546400, -415825200, -400096800, -384375600, -368647200, -352926000, -337197600, -321476400, -305748000, -289422000, -273693600, -257972400, -242244000, -226522800, -210794400, -195073200, -179344800, -163623600, -147895200, -131569200, -116445600, -100119600, -84391200, -68670000, -52941600, -37220400, -21492000, -5770800, 9957600, 25678800, 41407200, 57733200, 73461600, 89182800, 104911200, 120632400, 126684000, 154501200, 162367200, 183531600, 199260000, 215586000 } @@ -2789,10 +2786,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -14400 } finalYear:int { 1977 } - } //Z#599 + } //Z#600 /* SystemV/CST6 */ :table { typeOffsets:intvector { -21600, 0 } - } //Z#600 + } //Z#601 /* SystemV/CST6CDT */ :table { transPre32:intvector { -1, 2096202496, -1, 2111923696, -1, 2127652096, -1, 2143373296 } trans:intvector { -2135865600, -2120144400, -2104416000, -2088694800, -2072966400, -2056640400, -2040912000, -2025190800, -2009462400, -1993741200, -1978012800, -1962291600, -1946563200, -1930842000, -1915113600, -1898787600, -1883664000, -1867338000, -1851609600, -1835888400, -1820160000, -1804438800, -1788710400, -1772989200, -1757260800, -1741539600, -1725811200, -1709485200, -1693756800, -1678035600, -1662307200, -1646586000, -1630857600, -1615136400, -1599408000, -1583686800, -1567958400, -1551632400, -1536508800, -1520182800, -1504454400, -1488733200, -1473004800, -1457283600, -1441555200, -1425834000, -1410105600, -1394384400, -1378656000, -1362330000, -1347206400, -1330880400, -1315152000, -1299430800, -1283702400, -1267981200, -1252252800, -1236531600, -1220803200, -1205082000, -1189353600, -1173027600, -1157299200, -1141578000, -1125849600, -1110128400, -1094400000, -1078678800, -1062950400, -1047229200, -1031500800, -1015174800, -1000051200, -983725200, -967996800, -952275600, -936547200, -920826000, -905097600, -889376400, -873648000, -857926800, -842198400, -825872400, -810144000, -794422800, -778694400, -762973200, -747244800, -731523600, -715795200, -700074000, -684345600, -668019600, -652896000, -636570000, -620841600, -605120400, -589392000, -573670800, -557942400, -542221200, -526492800, -510771600, -495043200, -478717200, -463593600, -447267600, -431539200, -415818000, -400089600, -384368400, -368640000, -352918800, -337190400, -321469200, -305740800, -289414800, -273686400, -257965200, -242236800, -226515600, -210787200, -195066000, -179337600, -163616400, -147888000, -131562000, -116438400, -100112400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 154508400, 162374400, 183538800, 199267200, 215593200 } @@ -2801,10 +2798,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -21600 } finalYear:int { 1977 } - } //Z#601 + } //Z#602 /* SystemV/EST5 */ :table { typeOffsets:intvector { -18000, 0 } - } //Z#602 + } //Z#603 /* SystemV/EST5EDT */ :table { transPre32:intvector { -1, 2096198896, -1, 2111920096, -1, 2127648496, -1, 2143369696 } trans:intvector { -2135869200, -2120148000, -2104419600, -2088698400, -2072970000, -2056644000, -2040915600, -2025194400, -2009466000, -1993744800, -1978016400, -1962295200, -1946566800, -1930845600, -1915117200, -1898791200, -1883667600, -1867341600, -1851613200, -1835892000, -1820163600, -1804442400, -1788714000, -1772992800, -1757264400, -1741543200, -1725814800, -1709488800, -1693760400, -1678039200, -1662310800, -1646589600, -1630861200, -1615140000, -1599411600, -1583690400, -1567962000, -1551636000, -1536512400, -1520186400, -1504458000, -1488736800, -1473008400, -1457287200, -1441558800, -1425837600, -1410109200, -1394388000, -1378659600, -1362333600, -1347210000, -1330884000, -1315155600, -1299434400, -1283706000, -1267984800, -1252256400, -1236535200, -1220806800, -1205085600, -1189357200, -1173031200, -1157302800, -1141581600, -1125853200, -1110132000, -1094403600, -1078682400, -1062954000, -1047232800, -1031504400, -1015178400, -1000054800, -983728800, -968000400, -952279200, -936550800, -920829600, -905101200, -889380000, -873651600, -857930400, -842202000, -825876000, -810147600, -794426400, -778698000, -762976800, -747248400, -731527200, -715798800, -700077600, -684349200, -668023200, -652899600, -636573600, -620845200, -605124000, -589395600, -573674400, -557946000, -542224800, -526496400, -510775200, -495046800, -478720800, -463597200, -447271200, -431542800, -415821600, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 154504800, 162370800, 183535200, 199263600, 215589600 } @@ -2813,13 +2810,13 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -18000 } finalYear:int { 1977 } - } //Z#603 + } //Z#604 /* SystemV/HST10 */ :table { typeOffsets:intvector { -36000, 0 } - } //Z#604 + } //Z#605 /* SystemV/MST7 */ :table { typeOffsets:intvector { -25200, 0 } - } //Z#605 + } //Z#606 /* SystemV/MST7MDT */ :table { transPre32:intvector { -1, 2096206096, -1, 2111927296, -1, 2127655696, -1, 2143376896 } trans:intvector { -2135862000, -2120140800, -2104412400, -2088691200, -2072962800, -2056636800, -2040908400, -2025187200, -2009458800, -1993737600, -1978009200, -1962288000, -1946559600, -1930838400, -1915110000, -1898784000, -1883660400, -1867334400, -1851606000, -1835884800, -1820156400, -1804435200, -1788706800, -1772985600, -1757257200, -1741536000, -1725807600, -1709481600, -1693753200, -1678032000, -1662303600, -1646582400, -1630854000, -1615132800, -1599404400, -1583683200, -1567954800, -1551628800, -1536505200, -1520179200, -1504450800, -1488729600, -1473001200, -1457280000, -1441551600, -1425830400, -1410102000, -1394380800, -1378652400, -1362326400, -1347202800, -1330876800, -1315148400, -1299427200, -1283698800, -1267977600, -1252249200, -1236528000, -1220799600, -1205078400, -1189350000, -1173024000, -1157295600, -1141574400, -1125846000, -1110124800, -1094396400, -1078675200, -1062946800, -1047225600, -1031497200, -1015171200, -1000047600, -983721600, -967993200, -952272000, -936543600, -920822400, -905094000, -889372800, -873644400, -857923200, -842194800, -825868800, -810140400, -794419200, -778690800, -762969600, -747241200, -731520000, -715791600, -700070400, -684342000, -668016000, -652892400, -636566400, -620838000, -605116800, -589388400, -573667200, -557938800, -542217600, -526489200, -510768000, -495039600, -478713600, -463590000, -447264000, -431535600, -415814400, -400086000, -384364800, -368636400, -352915200, -337186800, -321465600, -305737200, -289411200, -273682800, -257961600, -242233200, -226512000, -210783600, -195062400, -179334000, -163612800, -147884400, -131558400, -116434800, -100108800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 154512000, 162378000, 183542400, 199270800, 215596800 } @@ -2828,10 +2825,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -25200 } finalYear:int { 1977 } - } //Z#606 + } //Z#607 /* SystemV/PST8 */ :table { typeOffsets:intvector { -28800, 0 } - } //Z#607 + } //Z#608 /* SystemV/PST8PDT */ :table { transPre32:intvector { -1, 2096209696, -1, 2111930896, -1, 2127659296, -1, 2143380496 } trans:intvector { -2135858400, -2120137200, -2104408800, -2088687600, -2072959200, -2056633200, -2040904800, -2025183600, -2009455200, -1993734000, -1978005600, -1962284400, -1946556000, -1930834800, -1915106400, -1898780400, -1883656800, -1867330800, -1851602400, -1835881200, -1820152800, -1804431600, -1788703200, -1772982000, -1757253600, -1741532400, -1725804000, -1709478000, -1693749600, -1678028400, -1662300000, -1646578800, -1630850400, -1615129200, -1599400800, -1583679600, -1567951200, -1551625200, -1536501600, -1520175600, -1504447200, -1488726000, -1472997600, -1457276400, -1441548000, -1425826800, -1410098400, -1394377200, -1378648800, -1362322800, -1347199200, -1330873200, -1315144800, -1299423600, -1283695200, -1267974000, -1252245600, -1236524400, -1220796000, -1205074800, -1189346400, -1173020400, -1157292000, -1141570800, -1125842400, -1110121200, -1094392800, -1078671600, -1062943200, -1047222000, -1031493600, -1015167600, -1000044000, -983718000, -967989600, -952268400, -936540000, -920818800, -905090400, -889369200, -873640800, -857919600, -842191200, -825865200, -810136800, -794415600, -778687200, -762966000, -747237600, -731516400, -715788000, -700066800, -684338400, -668012400, -652888800, -636562800, -620834400, -605113200, -589384800, -573663600, -557935200, -542214000, -526485600, -510764400, -495036000, -478710000, -463586400, -447260400, -431532000, -415810800, -400082400, -384361200, -368632800, -352911600, -337183200, -321462000, -305733600, -289407600, -273679200, -257958000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 154515600, 162381600, 183546000, 199274400, 215600400 } @@ -2840,10 +2837,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -28800 } finalYear:int { 1977 } - } //Z#608 + } //Z#609 /* SystemV/YST9 */ :table { typeOffsets:intvector { -32400, 0 } - } //Z#609 + } //Z#610 /* SystemV/YST9YDT */ :table { transPre32:intvector { -1, 2096213296, -1, 2111934496, -1, 2127662896, -1, 2143384096 } trans:intvector { -2135854800, -2120133600, -2104405200, -2088684000, -2072955600, -2056629600, -2040901200, -2025180000, -2009451600, -1993730400, -1978002000, -1962280800, -1946552400, -1930831200, -1915102800, -1898776800, -1883653200, -1867327200, -1851598800, -1835877600, -1820149200, -1804428000, -1788699600, -1772978400, -1757250000, -1741528800, -1725800400, -1709474400, -1693746000, -1678024800, -1662296400, -1646575200, -1630846800, -1615125600, -1599397200, -1583676000, -1567947600, -1551621600, -1536498000, -1520172000, -1504443600, -1488722400, -1472994000, -1457272800, -1441544400, -1425823200, -1410094800, -1394373600, -1378645200, -1362319200, -1347195600, -1330869600, -1315141200, -1299420000, -1283691600, -1267970400, -1252242000, -1236520800, -1220792400, -1205071200, -1189342800, -1173016800, -1157288400, -1141567200, -1125838800, -1110117600, -1094389200, -1078668000, -1062939600, -1047218400, -1031490000, -1015164000, -1000040400, -983714400, -967986000, -952264800, -936536400, -920815200, -905086800, -889365600, -873637200, -857916000, -842187600, -825861600, -810133200, -794412000, -778683600, -762962400, -747234000, -731512800, -715784400, -700063200, -684334800, -668008800, -652885200, -636559200, -620830800, -605109600, -589381200, -573660000, -557931600, -542210400, -526482000, -510760800, -495032400, -478706400, -463582800, -447256800, -431528400, -415807200, -400078800, -384357600, -368629200, -352908000, -337179600, -321458400, -305730000, -289404000, -273675600, -257954400, -242226000, -226504800, -210776400, -195055200, -179326800, -163605600, -147877200, -131551200, -116427600, -100101600, -84373200, -68652000, -52923600, -37202400, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 154519200, 162385200, 183549600, 199278000, 215604000 } @@ -2852,26 +2849,26 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -32400 } finalYear:int { 1977 } - } //Z#610 - /* Turkey */ :int { 456 } //Z#611 - /* UCT */ :int { 432 } //Z#612 - /* US/Alaska */ :int { 60 } //Z#613 - /* US/Aleutian */ :int { 59 } //Z#614 - /* US/Arizona */ :int { 184 } //Z#615 - /* US/Central */ :int { 98 } //Z#616 - /* US/East-Indiana */ :int { 131 } //Z#617 - /* US/Eastern */ :int { 173 } //Z#618 - /* US/Hawaii */ :int { 564 } //Z#619 - /* US/Indiana-Starke */ :int { 132 } //Z#620 - /* US/Michigan */ :int { 110 } //Z#621 - /* US/Mountain */ :int { 109 } //Z#622 - /* US/Pacific */ :int { 151 } //Z#623 - /* US/Pacific-New */ :int { 151 } //Z#624 - /* US/Samoa */ :int { 576 } //Z#625 - /* UTC */ :int { 433 } //Z#626 - /* Universal */ :int { 433 } //Z#627 - /* VST */ :int { 270 } //Z#628 - /* W-SU */ :int { 470 } //Z#629 + } //Z#611 + /* Turkey */ :int { 457 } //Z#612 + /* UCT */ :int { 433 } //Z#613 + /* US/Alaska */ :int { 60 } //Z#614 + /* US/Aleutian */ :int { 59 } //Z#615 + /* US/Arizona */ :int { 184 } //Z#616 + /* US/Central */ :int { 98 } //Z#617 + /* US/East-Indiana */ :int { 131 } //Z#618 + /* US/Eastern */ :int { 173 } //Z#619 + /* US/Hawaii */ :int { 565 } //Z#620 + /* US/Indiana-Starke */ :int { 132 } //Z#621 + /* US/Michigan */ :int { 110 } //Z#622 + /* US/Mountain */ :int { 109 } //Z#623 + /* US/Pacific */ :int { 151 } //Z#624 + /* US/Pacific-New */ :int { 151 } //Z#625 + /* US/Samoa */ :int { 577 } //Z#626 + /* UTC */ :int { 434 } //Z#627 + /* Universal */ :int { 434 } //Z#628 + /* VST */ :int { 271 } //Z#629 + /* W-SU */ :int { 471 } //Z#630 /* WET */ :table { trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 0, 0, 0, 3600 } @@ -2879,8 +2876,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - } //Z#630 - /* Zulu */ :int { 433 } //Z#631 + } //Z#631 + /* Zulu */ :int { 434 } //Z#632 } Names { "ACT","AET","AGT","ART","AST","Africa/Abidjan","Africa/Accra" // 6 @@ -2948,126 +2945,126 @@ zoneinfo64:table(nofallback) { ,"America/Panama","America/Pangnirtung","America/Paramaribo" // 183 ,"America/Phoenix","America/Port-au-Prince","America/Port_of_Spain" // 186 ,"America/Porto_Acre","America/Porto_Velho","America/Puerto_Rico" // 189 - ,"America/Rainy_River","America/Rankin_Inlet","America/Recife" // 192 - ,"America/Regina","America/Resolute","America/Rio_Branco" // 195 - ,"America/Rosario","America/Santa_Isabel","America/Santarem" // 198 - ,"America/Santiago","America/Santo_Domingo","America/Sao_Paulo" // 201 - ,"America/Scoresbysund","America/Shiprock","America/Sitka" // 204 - ,"America/St_Barthelemy","America/St_Johns","America/St_Kitts" // 207 - ,"America/St_Lucia","America/St_Thomas","America/St_Vincent" // 210 - ,"America/Swift_Current","America/Tegucigalpa","America/Thule" // 213 - ,"America/Thunder_Bay","America/Tijuana","America/Toronto" // 216 - ,"America/Tortola","America/Vancouver","America/Virgin" // 219 - ,"America/Whitehorse","America/Winnipeg","America/Yakutat" // 222 - ,"America/Yellowknife","Antarctica/Casey","Antarctica/Davis" // 225 - ,"Antarctica/DumontDUrville","Antarctica/Macquarie" // 227 - ,"Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer" // 230 - ,"Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa" // 233 - ,"Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen" // 236 - ,"Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr" // 240 - ,"Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad" // 244 - ,"Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku" // 248 - ,"Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek" // 252 - ,"Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan" // 256 - ,"Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca" // 260 - ,"Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai" // 264 - ,"Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin" // 268 - ,"Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong" // 271 - ,"Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta" // 275 - ,"Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka" // 279 - ,"Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu" // 283 - ,"Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk" // 286 - ,"Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao" // 290 - ,"Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila" // 294 - ,"Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk" // 298 - ,"Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak" // 302 - ,"Asia/Pyongyang","Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon" // 306 - ,"Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand" // 310 - ,"Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk" // 314 - ,"Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran" // 318 - ,"Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo" // 322 - ,"Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar" // 325 - ,"Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane" // 329 - ,"Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg" // 333 - ,"Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda" // 336 - ,"Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe" // 339 - ,"Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira" // 342 - ,"Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena" // 345 - ,"Atlantic/Stanley","Australia/ACT","Australia/Adelaide" // 348 - ,"Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra" // 351 - ,"Australia/Currie","Australia/Darwin","Australia/Eucla" // 354 - ,"Australia/Hobart","Australia/LHI","Australia/Lindeman" // 357 - ,"Australia/Lord_Howe","Australia/Melbourne","Australia/NSW" // 360 - ,"Australia/North","Australia/Perth","Australia/Queensland" // 363 - ,"Australia/South","Australia/Sydney","Australia/Tasmania" // 366 - ,"Australia/Victoria","Australia/West","Australia/Yancowinna" // 369 - ,"BET","BST","Brazil/Acre","Brazil/DeNoronha","Brazil/East" // 374 - ,"Brazil/West","CAT","CET","CNT","CST","CST6CDT","CTT" // 381 - ,"Canada/Atlantic","Canada/Central","Canada/East-Saskatchewan" // 384 - ,"Canada/Eastern","Canada/Mountain","Canada/Newfoundland" // 387 - ,"Canada/Pacific","Canada/Saskatchewan","Canada/Yukon" // 390 - ,"Chile/Continental","Chile/EasterIsland","Cuba","EAT" // 394 - ,"ECT","EET","EST","EST5EDT","Egypt","Eire","Etc/GMT" // 401 - ,"Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11" // 405 - ,"Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5" // 410 - ,"Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-0" // 415 - ,"Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12" // 419 - ,"Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3" // 423 - ,"Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8" // 428 - ,"Etc/GMT-9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/UTC" // 433 - ,"Etc/Universal","Etc/Unknown","Etc/Zulu","Europe/Amsterdam" // 437 - ,"Europe/Andorra","Europe/Astrakhan","Europe/Athens" // 440 - ,"Europe/Belfast","Europe/Belgrade","Europe/Berlin" // 443 - ,"Europe/Bratislava","Europe/Brussels","Europe/Bucharest" // 446 - ,"Europe/Budapest","Europe/Busingen","Europe/Chisinau" // 449 - ,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 452 - ,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 455 - ,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 458 - ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 462 - ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 465 - ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 469 - ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 473 - ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 477 - ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 480 - ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 483 - ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 486 - ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 489 - ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 492 - ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 495 - ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 498 - ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 504 - ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 510 - ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 514 - ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 517 - ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 520 - ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 523 - ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 529 - ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 535 - ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 540 - ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 548 - ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 551 - ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 554 - ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 557 - ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 560 - ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 563 - ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati" // 566 - ,"Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro" // 569 - ,"Pacific/Marquesas","Pacific/Midway","Pacific/Nauru" // 572 - ,"Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 575 - ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 578 - ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 581 - ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 584 - ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 587 - ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 591 - ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 597 - ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 601 - ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 605 - ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 608 - ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 613 - ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 617 - ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 621 - ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 625 - ,"UTC","Universal","VST","W-SU","WET","Zulu" // 631 + ,"America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet" // 192 + ,"America/Recife","America/Regina","America/Resolute" // 195 + ,"America/Rio_Branco","America/Rosario","America/Santa_Isabel" // 198 + ,"America/Santarem","America/Santiago","America/Santo_Domingo" // 201 + ,"America/Sao_Paulo","America/Scoresbysund","America/Shiprock" // 204 + ,"America/Sitka","America/St_Barthelemy","America/St_Johns" // 207 + ,"America/St_Kitts","America/St_Lucia","America/St_Thomas" // 210 + ,"America/St_Vincent","America/Swift_Current","America/Tegucigalpa" // 213 + ,"America/Thule","America/Thunder_Bay","America/Tijuana" // 216 + ,"America/Toronto","America/Tortola","America/Vancouver" // 219 + ,"America/Virgin","America/Whitehorse","America/Winnipeg" // 222 + ,"America/Yakutat","America/Yellowknife","Antarctica/Casey" // 225 + ,"Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie" // 228 + ,"Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer" // 231 + ,"Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa" // 234 + ,"Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen" // 237 + ,"Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr" // 241 + ,"Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad" // 245 + ,"Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku" // 249 + ,"Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek" // 253 + ,"Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan" // 257 + ,"Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca" // 261 + ,"Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai" // 265 + ,"Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin" // 269 + ,"Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong" // 272 + ,"Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta" // 276 + ,"Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka" // 280 + ,"Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu" // 284 + ,"Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk" // 287 + ,"Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao" // 291 + ,"Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila" // 295 + ,"Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk" // 299 + ,"Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak" // 303 + ,"Asia/Pyongyang","Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon" // 307 + ,"Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand" // 311 + ,"Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk" // 315 + ,"Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran" // 319 + ,"Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo" // 323 + ,"Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar" // 326 + ,"Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane" // 330 + ,"Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg" // 334 + ,"Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda" // 337 + ,"Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe" // 340 + ,"Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira" // 343 + ,"Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena" // 346 + ,"Atlantic/Stanley","Australia/ACT","Australia/Adelaide" // 349 + ,"Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra" // 352 + ,"Australia/Currie","Australia/Darwin","Australia/Eucla" // 355 + ,"Australia/Hobart","Australia/LHI","Australia/Lindeman" // 358 + ,"Australia/Lord_Howe","Australia/Melbourne","Australia/NSW" // 361 + ,"Australia/North","Australia/Perth","Australia/Queensland" // 364 + ,"Australia/South","Australia/Sydney","Australia/Tasmania" // 367 + ,"Australia/Victoria","Australia/West","Australia/Yancowinna" // 370 + ,"BET","BST","Brazil/Acre","Brazil/DeNoronha","Brazil/East" // 375 + ,"Brazil/West","CAT","CET","CNT","CST","CST6CDT","CTT" // 382 + ,"Canada/Atlantic","Canada/Central","Canada/East-Saskatchewan" // 385 + ,"Canada/Eastern","Canada/Mountain","Canada/Newfoundland" // 388 + ,"Canada/Pacific","Canada/Saskatchewan","Canada/Yukon" // 391 + ,"Chile/Continental","Chile/EasterIsland","Cuba","EAT" // 395 + ,"ECT","EET","EST","EST5EDT","Egypt","Eire","Etc/GMT" // 402 + ,"Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11" // 406 + ,"Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5" // 411 + ,"Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-0" // 416 + ,"Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12" // 420 + ,"Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3" // 424 + ,"Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8" // 429 + ,"Etc/GMT-9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/UTC" // 434 + ,"Etc/Universal","Etc/Unknown","Etc/Zulu","Europe/Amsterdam" // 438 + ,"Europe/Andorra","Europe/Astrakhan","Europe/Athens" // 441 + ,"Europe/Belfast","Europe/Belgrade","Europe/Berlin" // 444 + ,"Europe/Bratislava","Europe/Brussels","Europe/Bucharest" // 447 + ,"Europe/Budapest","Europe/Busingen","Europe/Chisinau" // 450 + ,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 453 + ,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 456 + ,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 459 + ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 463 + ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 466 + ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 470 + ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 474 + ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 478 + ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 481 + ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 484 + ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 487 + ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 490 + ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 493 + ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 496 + ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 499 + ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 505 + ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 511 + ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 515 + ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 518 + ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 521 + ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 524 + ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 530 + ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 536 + ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 541 + ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 549 + ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 552 + ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 555 + ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 558 + ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 561 + ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 564 + ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati" // 567 + ,"Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro" // 570 + ,"Pacific/Marquesas","Pacific/Midway","Pacific/Nauru" // 573 + ,"Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 576 + ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 579 + ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 582 + ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 585 + ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 588 + ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 592 + ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 598 + ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 602 + ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 606 + ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 609 + ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 614 + ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 618 + ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 622 + ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 626 + ,"UTC","Universal","VST","W-SU","WET","Zulu" // 632 } Rules { AN:intvector { @@ -3109,26 +3106,26 @@ zoneinfo64:table(nofallback) { Fiji:intvector { 10, 1, -1, 7200, 0, 0, 15, -1, 10800, 0, 3600 } //_#12 + Haiti:intvector { + 2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600 + } //_#13 Iran:intvector { 2, 21, 0, 0, 0, 8, 21, 0, 0, 0, 3600 - } //_#13 + } //_#14 Jordan:intvector { 2, -31, -5, 86400, 0, 9, -31, -6, 0, 1, 3600 - } //_#14 + } //_#15 LH:intvector { 9, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 1800 - } //_#15 + } //_#16 Lebanon:intvector { 2, -31, -1, 0, 0, 9, -31, -1, 0, 0, 3600 - } //_#16 + } //_#17 Mexico:intvector { 3, 1, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600 - } //_#17 + } //_#18 Moldova:intvector { 2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600 - } //_#18 - Mongol:intvector { - 2, -31, -7, 7200, 0, 8, -30, -7, 0, 0, 3600 } //_#19 Morocco:intvector { 2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600 @@ -3361,447 +3358,448 @@ zoneinfo64:table(nofallback) { "BR", //Z#187 America/Porto_Acre "BR", //Z#188 America/Porto_Velho "PR", //Z#189 America/Puerto_Rico - "CA", //Z#190 America/Rainy_River - "CA", //Z#191 America/Rankin_Inlet - "BR", //Z#192 America/Recife - "CA", //Z#193 America/Regina - "CA", //Z#194 America/Resolute - "BR", //Z#195 America/Rio_Branco - "AR", //Z#196 America/Rosario - "MX", //Z#197 America/Santa_Isabel - "BR", //Z#198 America/Santarem - "CL", //Z#199 America/Santiago - "DO", //Z#200 America/Santo_Domingo - "BR", //Z#201 America/Sao_Paulo - "GL", //Z#202 America/Scoresbysund - "US", //Z#203 America/Shiprock - "US", //Z#204 America/Sitka - "BL", //Z#205 America/St_Barthelemy - "CA", //Z#206 America/St_Johns - "KN", //Z#207 America/St_Kitts - "LC", //Z#208 America/St_Lucia - "VI", //Z#209 America/St_Thomas - "VC", //Z#210 America/St_Vincent - "CA", //Z#211 America/Swift_Current - "HN", //Z#212 America/Tegucigalpa - "GL", //Z#213 America/Thule - "CA", //Z#214 America/Thunder_Bay - "MX", //Z#215 America/Tijuana - "CA", //Z#216 America/Toronto - "VG", //Z#217 America/Tortola - "CA", //Z#218 America/Vancouver - "TT", //Z#219 America/Virgin - "CA", //Z#220 America/Whitehorse - "CA", //Z#221 America/Winnipeg - "US", //Z#222 America/Yakutat - "CA", //Z#223 America/Yellowknife - "AQ", //Z#224 Antarctica/Casey - "AQ", //Z#225 Antarctica/Davis - "AQ", //Z#226 Antarctica/DumontDUrville - "AU", //Z#227 Antarctica/Macquarie - "AQ", //Z#228 Antarctica/Mawson - "AQ", //Z#229 Antarctica/McMurdo - "AQ", //Z#230 Antarctica/Palmer - "AQ", //Z#231 Antarctica/Rothera - "NZ", //Z#232 Antarctica/South_Pole - "AQ", //Z#233 Antarctica/Syowa - "AQ", //Z#234 Antarctica/Troll - "AQ", //Z#235 Antarctica/Vostok - "SJ", //Z#236 Arctic/Longyearbyen - "YE", //Z#237 Asia/Aden - "KZ", //Z#238 Asia/Almaty - "JO", //Z#239 Asia/Amman - "RU", //Z#240 Asia/Anadyr - "KZ", //Z#241 Asia/Aqtau - "KZ", //Z#242 Asia/Aqtobe - "TM", //Z#243 Asia/Ashgabat - "TM", //Z#244 Asia/Ashkhabad - "KZ", //Z#245 Asia/Atyrau - "IQ", //Z#246 Asia/Baghdad - "BH", //Z#247 Asia/Bahrain - "AZ", //Z#248 Asia/Baku - "TH", //Z#249 Asia/Bangkok - "RU", //Z#250 Asia/Barnaul - "LB", //Z#251 Asia/Beirut - "KG", //Z#252 Asia/Bishkek - "BN", //Z#253 Asia/Brunei - "IN", //Z#254 Asia/Calcutta - "RU", //Z#255 Asia/Chita - "MN", //Z#256 Asia/Choibalsan - "CN", //Z#257 Asia/Chongqing - "CN", //Z#258 Asia/Chungking - "LK", //Z#259 Asia/Colombo - "BD", //Z#260 Asia/Dacca - "SY", //Z#261 Asia/Damascus - "BD", //Z#262 Asia/Dhaka - "TL", //Z#263 Asia/Dili - "AE", //Z#264 Asia/Dubai - "TJ", //Z#265 Asia/Dushanbe - "CY", //Z#266 Asia/Famagusta - "PS", //Z#267 Asia/Gaza - "CN", //Z#268 Asia/Harbin - "PS", //Z#269 Asia/Hebron - "VN", //Z#270 Asia/Ho_Chi_Minh - "HK", //Z#271 Asia/Hong_Kong - "MN", //Z#272 Asia/Hovd - "RU", //Z#273 Asia/Irkutsk - "TR", //Z#274 Asia/Istanbul - "ID", //Z#275 Asia/Jakarta - "ID", //Z#276 Asia/Jayapura - "IL", //Z#277 Asia/Jerusalem - "AF", //Z#278 Asia/Kabul - "RU", //Z#279 Asia/Kamchatka - "PK", //Z#280 Asia/Karachi - "CN", //Z#281 Asia/Kashgar - "NP", //Z#282 Asia/Kathmandu - "NP", //Z#283 Asia/Katmandu - "RU", //Z#284 Asia/Khandyga - "IN", //Z#285 Asia/Kolkata - "RU", //Z#286 Asia/Krasnoyarsk - "MY", //Z#287 Asia/Kuala_Lumpur - "MY", //Z#288 Asia/Kuching - "KW", //Z#289 Asia/Kuwait - "MO", //Z#290 Asia/Macao - "MO", //Z#291 Asia/Macau - "RU", //Z#292 Asia/Magadan - "ID", //Z#293 Asia/Makassar - "PH", //Z#294 Asia/Manila - "OM", //Z#295 Asia/Muscat - "CY", //Z#296 Asia/Nicosia - "RU", //Z#297 Asia/Novokuznetsk - "RU", //Z#298 Asia/Novosibirsk - "RU", //Z#299 Asia/Omsk - "KZ", //Z#300 Asia/Oral - "KH", //Z#301 Asia/Phnom_Penh - "ID", //Z#302 Asia/Pontianak - "KP", //Z#303 Asia/Pyongyang - "QA", //Z#304 Asia/Qatar - "KZ", //Z#305 Asia/Qyzylorda - "MM", //Z#306 Asia/Rangoon - "SA", //Z#307 Asia/Riyadh - "VN", //Z#308 Asia/Saigon - "RU", //Z#309 Asia/Sakhalin - "UZ", //Z#310 Asia/Samarkand - "KR", //Z#311 Asia/Seoul - "CN", //Z#312 Asia/Shanghai - "SG", //Z#313 Asia/Singapore - "RU", //Z#314 Asia/Srednekolymsk - "TW", //Z#315 Asia/Taipei - "UZ", //Z#316 Asia/Tashkent - "GE", //Z#317 Asia/Tbilisi - "IR", //Z#318 Asia/Tehran - "IL", //Z#319 Asia/Tel_Aviv - "BT", //Z#320 Asia/Thimbu - "BT", //Z#321 Asia/Thimphu - "JP", //Z#322 Asia/Tokyo - "RU", //Z#323 Asia/Tomsk - "ID", //Z#324 Asia/Ujung_Pandang - "MN", //Z#325 Asia/Ulaanbaatar - "MN", //Z#326 Asia/Ulan_Bator - "CN", //Z#327 Asia/Urumqi - "RU", //Z#328 Asia/Ust-Nera - "LA", //Z#329 Asia/Vientiane - "RU", //Z#330 Asia/Vladivostok - "RU", //Z#331 Asia/Yakutsk - "MM", //Z#332 Asia/Yangon - "RU", //Z#333 Asia/Yekaterinburg - "AM", //Z#334 Asia/Yerevan - "PT", //Z#335 Atlantic/Azores - "BM", //Z#336 Atlantic/Bermuda - "ES", //Z#337 Atlantic/Canary - "CV", //Z#338 Atlantic/Cape_Verde - "FO", //Z#339 Atlantic/Faeroe - "FO", //Z#340 Atlantic/Faroe - "NO", //Z#341 Atlantic/Jan_Mayen - "PT", //Z#342 Atlantic/Madeira - "IS", //Z#343 Atlantic/Reykjavik - "GS", //Z#344 Atlantic/South_Georgia - "SH", //Z#345 Atlantic/St_Helena - "FK", //Z#346 Atlantic/Stanley - "AU", //Z#347 Australia/ACT - "AU", //Z#348 Australia/Adelaide - "AU", //Z#349 Australia/Brisbane - "AU", //Z#350 Australia/Broken_Hill - "AU", //Z#351 Australia/Canberra - "AU", //Z#352 Australia/Currie - "AU", //Z#353 Australia/Darwin - "AU", //Z#354 Australia/Eucla - "AU", //Z#355 Australia/Hobart - "AU", //Z#356 Australia/LHI - "AU", //Z#357 Australia/Lindeman - "AU", //Z#358 Australia/Lord_Howe - "AU", //Z#359 Australia/Melbourne - "AU", //Z#360 Australia/NSW - "AU", //Z#361 Australia/North - "AU", //Z#362 Australia/Perth - "AU", //Z#363 Australia/Queensland - "AU", //Z#364 Australia/South - "AU", //Z#365 Australia/Sydney - "AU", //Z#366 Australia/Tasmania - "AU", //Z#367 Australia/Victoria - "AU", //Z#368 Australia/West - "AU", //Z#369 Australia/Yancowinna - "BR", //Z#370 BET - "BD", //Z#371 BST - "BR", //Z#372 Brazil/Acre - "BR", //Z#373 Brazil/DeNoronha - "BR", //Z#374 Brazil/East - "BR", //Z#375 Brazil/West - "MZ", //Z#376 CAT - "001",//Z#377 CET - "CA", //Z#378 CNT - "US", //Z#379 CST - "001",//Z#380 CST6CDT - "CN", //Z#381 CTT - "CA", //Z#382 Canada/Atlantic - "CA", //Z#383 Canada/Central - "CA", //Z#384 Canada/East-Saskatchewan - "CA", //Z#385 Canada/Eastern - "CA", //Z#386 Canada/Mountain - "CA", //Z#387 Canada/Newfoundland - "CA", //Z#388 Canada/Pacific - "CA", //Z#389 Canada/Saskatchewan - "CA", //Z#390 Canada/Yukon - "CL", //Z#391 Chile/Continental - "CL", //Z#392 Chile/EasterIsland - "CU", //Z#393 Cuba - "KE", //Z#394 EAT - "FR", //Z#395 ECT - "001",//Z#396 EET - "001",//Z#397 EST - "001",//Z#398 EST5EDT - "EG", //Z#399 Egypt - "IE", //Z#400 Eire - "001",//Z#401 Etc/GMT - "001",//Z#402 Etc/GMT+0 - "001",//Z#403 Etc/GMT+1 - "001",//Z#404 Etc/GMT+10 - "001",//Z#405 Etc/GMT+11 - "001",//Z#406 Etc/GMT+12 - "001",//Z#407 Etc/GMT+2 - "001",//Z#408 Etc/GMT+3 - "001",//Z#409 Etc/GMT+4 - "001",//Z#410 Etc/GMT+5 - "001",//Z#411 Etc/GMT+6 - "001",//Z#412 Etc/GMT+7 - "001",//Z#413 Etc/GMT+8 - "001",//Z#414 Etc/GMT+9 - "001",//Z#415 Etc/GMT-0 - "001",//Z#416 Etc/GMT-1 - "001",//Z#417 Etc/GMT-10 - "001",//Z#418 Etc/GMT-11 - "001",//Z#419 Etc/GMT-12 - "001",//Z#420 Etc/GMT-13 - "001",//Z#421 Etc/GMT-14 - "001",//Z#422 Etc/GMT-2 - "001",//Z#423 Etc/GMT-3 - "001",//Z#424 Etc/GMT-4 - "001",//Z#425 Etc/GMT-5 - "001",//Z#426 Etc/GMT-6 - "001",//Z#427 Etc/GMT-7 - "001",//Z#428 Etc/GMT-8 - "001",//Z#429 Etc/GMT-9 - "001",//Z#430 Etc/GMT0 - "001",//Z#431 Etc/Greenwich - "001",//Z#432 Etc/UCT - "001",//Z#433 Etc/UTC - "001",//Z#434 Etc/Universal - "001",//Z#435 Etc/Unknown - "001",//Z#436 Etc/Zulu - "NL", //Z#437 Europe/Amsterdam - "AD", //Z#438 Europe/Andorra - "RU", //Z#439 Europe/Astrakhan - "GR", //Z#440 Europe/Athens - "GB", //Z#441 Europe/Belfast - "RS", //Z#442 Europe/Belgrade - "DE", //Z#443 Europe/Berlin - "SK", //Z#444 Europe/Bratislava - "BE", //Z#445 Europe/Brussels - "RO", //Z#446 Europe/Bucharest - "HU", //Z#447 Europe/Budapest - "DE", //Z#448 Europe/Busingen - "MD", //Z#449 Europe/Chisinau - "DK", //Z#450 Europe/Copenhagen - "IE", //Z#451 Europe/Dublin - "GI", //Z#452 Europe/Gibraltar - "GG", //Z#453 Europe/Guernsey - "FI", //Z#454 Europe/Helsinki - "IM", //Z#455 Europe/Isle_of_Man - "TR", //Z#456 Europe/Istanbul - "JE", //Z#457 Europe/Jersey - "RU", //Z#458 Europe/Kaliningrad - "UA", //Z#459 Europe/Kiev - "RU", //Z#460 Europe/Kirov - "PT", //Z#461 Europe/Lisbon - "SI", //Z#462 Europe/Ljubljana - "GB", //Z#463 Europe/London - "LU", //Z#464 Europe/Luxembourg - "ES", //Z#465 Europe/Madrid - "MT", //Z#466 Europe/Malta - "AX", //Z#467 Europe/Mariehamn - "BY", //Z#468 Europe/Minsk - "MC", //Z#469 Europe/Monaco - "RU", //Z#470 Europe/Moscow - "CY", //Z#471 Europe/Nicosia - "NO", //Z#472 Europe/Oslo - "FR", //Z#473 Europe/Paris - "ME", //Z#474 Europe/Podgorica - "CZ", //Z#475 Europe/Prague - "LV", //Z#476 Europe/Riga - "IT", //Z#477 Europe/Rome - "RU", //Z#478 Europe/Samara - "SM", //Z#479 Europe/San_Marino - "BA", //Z#480 Europe/Sarajevo - "RU", //Z#481 Europe/Saratov - "UA", //Z#482 Europe/Simferopol - "MK", //Z#483 Europe/Skopje - "BG", //Z#484 Europe/Sofia - "SE", //Z#485 Europe/Stockholm - "EE", //Z#486 Europe/Tallinn - "AL", //Z#487 Europe/Tirane - "MD", //Z#488 Europe/Tiraspol - "RU", //Z#489 Europe/Ulyanovsk - "UA", //Z#490 Europe/Uzhgorod - "LI", //Z#491 Europe/Vaduz - "VA", //Z#492 Europe/Vatican - "AT", //Z#493 Europe/Vienna - "LT", //Z#494 Europe/Vilnius - "RU", //Z#495 Europe/Volgograd - "PL", //Z#496 Europe/Warsaw - "HR", //Z#497 Europe/Zagreb - "UA", //Z#498 Europe/Zaporozhye - "CH", //Z#499 Europe/Zurich - "001",//Z#500 Factory - "GB", //Z#501 GB - "GB", //Z#502 GB-Eire - "001",//Z#503 GMT - "001",//Z#504 GMT+0 - "001",//Z#505 GMT-0 - "001",//Z#506 GMT0 - "001",//Z#507 Greenwich - "001",//Z#508 HST - "HK", //Z#509 Hongkong - "US", //Z#510 IET - "IN", //Z#511 IST - "IS", //Z#512 Iceland - "MG", //Z#513 Indian/Antananarivo - "IO", //Z#514 Indian/Chagos - "CX", //Z#515 Indian/Christmas - "CC", //Z#516 Indian/Cocos - "KM", //Z#517 Indian/Comoro - "TF", //Z#518 Indian/Kerguelen - "SC", //Z#519 Indian/Mahe - "MV", //Z#520 Indian/Maldives - "MU", //Z#521 Indian/Mauritius - "YT", //Z#522 Indian/Mayotte - "RE", //Z#523 Indian/Reunion - "IR", //Z#524 Iran - "IL", //Z#525 Israel - "JP", //Z#526 JST - "JM", //Z#527 Jamaica - "JP", //Z#528 Japan - "MH", //Z#529 Kwajalein - "LY", //Z#530 Libya - "001",//Z#531 MET - "WS", //Z#532 MIT - "001",//Z#533 MST - "001",//Z#534 MST7MDT - "MX", //Z#535 Mexico/BajaNorte - "MX", //Z#536 Mexico/BajaSur - "MX", //Z#537 Mexico/General - "AM", //Z#538 NET - "NZ", //Z#539 NST - "NZ", //Z#540 NZ - "NZ", //Z#541 NZ-CHAT - "US", //Z#542 Navajo - "PK", //Z#543 PLT - "US", //Z#544 PNT - "CN", //Z#545 PRC - "PR", //Z#546 PRT - "US", //Z#547 PST - "001",//Z#548 PST8PDT - "WS", //Z#549 Pacific/Apia - "NZ", //Z#550 Pacific/Auckland - "PG", //Z#551 Pacific/Bougainville - "NZ", //Z#552 Pacific/Chatham - "FM", //Z#553 Pacific/Chuuk - "CL", //Z#554 Pacific/Easter - "VU", //Z#555 Pacific/Efate - "KI", //Z#556 Pacific/Enderbury - "TK", //Z#557 Pacific/Fakaofo - "FJ", //Z#558 Pacific/Fiji - "TV", //Z#559 Pacific/Funafuti - "EC", //Z#560 Pacific/Galapagos - "PF", //Z#561 Pacific/Gambier - "SB", //Z#562 Pacific/Guadalcanal - "GU", //Z#563 Pacific/Guam - "US", //Z#564 Pacific/Honolulu - "UM", //Z#565 Pacific/Johnston - "KI", //Z#566 Pacific/Kiritimati - "FM", //Z#567 Pacific/Kosrae - "MH", //Z#568 Pacific/Kwajalein - "MH", //Z#569 Pacific/Majuro - "PF", //Z#570 Pacific/Marquesas - "UM", //Z#571 Pacific/Midway - "NR", //Z#572 Pacific/Nauru - "NU", //Z#573 Pacific/Niue - "NF", //Z#574 Pacific/Norfolk - "NC", //Z#575 Pacific/Noumea - "AS", //Z#576 Pacific/Pago_Pago - "PW", //Z#577 Pacific/Palau - "PN", //Z#578 Pacific/Pitcairn - "FM", //Z#579 Pacific/Pohnpei - "FM", //Z#580 Pacific/Ponape - "PG", //Z#581 Pacific/Port_Moresby - "CK", //Z#582 Pacific/Rarotonga - "MP", //Z#583 Pacific/Saipan - "AS", //Z#584 Pacific/Samoa - "PF", //Z#585 Pacific/Tahiti - "KI", //Z#586 Pacific/Tarawa - "TO", //Z#587 Pacific/Tongatapu - "FM", //Z#588 Pacific/Truk - "UM", //Z#589 Pacific/Wake - "WF", //Z#590 Pacific/Wallis - "FM", //Z#591 Pacific/Yap - "PL", //Z#592 Poland - "PT", //Z#593 Portugal - "TW", //Z#594 ROC - "KR", //Z#595 ROK - "SB", //Z#596 SST - "SG", //Z#597 Singapore - "001",//Z#598 SystemV/AST4 - "001",//Z#599 SystemV/AST4ADT - "001",//Z#600 SystemV/CST6 - "001",//Z#601 SystemV/CST6CDT - "001",//Z#602 SystemV/EST5 - "001",//Z#603 SystemV/EST5EDT - "001",//Z#604 SystemV/HST10 - "001",//Z#605 SystemV/MST7 - "001",//Z#606 SystemV/MST7MDT - "001",//Z#607 SystemV/PST8 - "001",//Z#608 SystemV/PST8PDT - "001",//Z#609 SystemV/YST9 - "001",//Z#610 SystemV/YST9YDT - "TR", //Z#611 Turkey - "001",//Z#612 UCT - "US", //Z#613 US/Alaska - "US", //Z#614 US/Aleutian - "US", //Z#615 US/Arizona - "US", //Z#616 US/Central - "US", //Z#617 US/East-Indiana - "US", //Z#618 US/Eastern - "US", //Z#619 US/Hawaii - "US", //Z#620 US/Indiana-Starke - "US", //Z#621 US/Michigan - "US", //Z#622 US/Mountain - "US", //Z#623 US/Pacific - "US", //Z#624 US/Pacific-New - "AS", //Z#625 US/Samoa - "001",//Z#626 UTC - "001",//Z#627 Universal - "VN", //Z#628 VST - "RU", //Z#629 W-SU - "001",//Z#630 WET - "001",//Z#631 Zulu + "CL", //Z#190 America/Punta_Arenas + "CA", //Z#191 America/Rainy_River + "CA", //Z#192 America/Rankin_Inlet + "BR", //Z#193 America/Recife + "CA", //Z#194 America/Regina + "CA", //Z#195 America/Resolute + "BR", //Z#196 America/Rio_Branco + "AR", //Z#197 America/Rosario + "MX", //Z#198 America/Santa_Isabel + "BR", //Z#199 America/Santarem + "CL", //Z#200 America/Santiago + "DO", //Z#201 America/Santo_Domingo + "BR", //Z#202 America/Sao_Paulo + "GL", //Z#203 America/Scoresbysund + "US", //Z#204 America/Shiprock + "US", //Z#205 America/Sitka + "BL", //Z#206 America/St_Barthelemy + "CA", //Z#207 America/St_Johns + "KN", //Z#208 America/St_Kitts + "LC", //Z#209 America/St_Lucia + "VI", //Z#210 America/St_Thomas + "VC", //Z#211 America/St_Vincent + "CA", //Z#212 America/Swift_Current + "HN", //Z#213 America/Tegucigalpa + "GL", //Z#214 America/Thule + "CA", //Z#215 America/Thunder_Bay + "MX", //Z#216 America/Tijuana + "CA", //Z#217 America/Toronto + "VG", //Z#218 America/Tortola + "CA", //Z#219 America/Vancouver + "TT", //Z#220 America/Virgin + "CA", //Z#221 America/Whitehorse + "CA", //Z#222 America/Winnipeg + "US", //Z#223 America/Yakutat + "CA", //Z#224 America/Yellowknife + "AQ", //Z#225 Antarctica/Casey + "AQ", //Z#226 Antarctica/Davis + "AQ", //Z#227 Antarctica/DumontDUrville + "AU", //Z#228 Antarctica/Macquarie + "AQ", //Z#229 Antarctica/Mawson + "AQ", //Z#230 Antarctica/McMurdo + "AQ", //Z#231 Antarctica/Palmer + "AQ", //Z#232 Antarctica/Rothera + "NZ", //Z#233 Antarctica/South_Pole + "AQ", //Z#234 Antarctica/Syowa + "AQ", //Z#235 Antarctica/Troll + "AQ", //Z#236 Antarctica/Vostok + "SJ", //Z#237 Arctic/Longyearbyen + "YE", //Z#238 Asia/Aden + "KZ", //Z#239 Asia/Almaty + "JO", //Z#240 Asia/Amman + "RU", //Z#241 Asia/Anadyr + "KZ", //Z#242 Asia/Aqtau + "KZ", //Z#243 Asia/Aqtobe + "TM", //Z#244 Asia/Ashgabat + "TM", //Z#245 Asia/Ashkhabad + "KZ", //Z#246 Asia/Atyrau + "IQ", //Z#247 Asia/Baghdad + "BH", //Z#248 Asia/Bahrain + "AZ", //Z#249 Asia/Baku + "TH", //Z#250 Asia/Bangkok + "RU", //Z#251 Asia/Barnaul + "LB", //Z#252 Asia/Beirut + "KG", //Z#253 Asia/Bishkek + "BN", //Z#254 Asia/Brunei + "IN", //Z#255 Asia/Calcutta + "RU", //Z#256 Asia/Chita + "MN", //Z#257 Asia/Choibalsan + "CN", //Z#258 Asia/Chongqing + "CN", //Z#259 Asia/Chungking + "LK", //Z#260 Asia/Colombo + "BD", //Z#261 Asia/Dacca + "SY", //Z#262 Asia/Damascus + "BD", //Z#263 Asia/Dhaka + "TL", //Z#264 Asia/Dili + "AE", //Z#265 Asia/Dubai + "TJ", //Z#266 Asia/Dushanbe + "CY", //Z#267 Asia/Famagusta + "PS", //Z#268 Asia/Gaza + "CN", //Z#269 Asia/Harbin + "PS", //Z#270 Asia/Hebron + "VN", //Z#271 Asia/Ho_Chi_Minh + "HK", //Z#272 Asia/Hong_Kong + "MN", //Z#273 Asia/Hovd + "RU", //Z#274 Asia/Irkutsk + "TR", //Z#275 Asia/Istanbul + "ID", //Z#276 Asia/Jakarta + "ID", //Z#277 Asia/Jayapura + "IL", //Z#278 Asia/Jerusalem + "AF", //Z#279 Asia/Kabul + "RU", //Z#280 Asia/Kamchatka + "PK", //Z#281 Asia/Karachi + "CN", //Z#282 Asia/Kashgar + "NP", //Z#283 Asia/Kathmandu + "NP", //Z#284 Asia/Katmandu + "RU", //Z#285 Asia/Khandyga + "IN", //Z#286 Asia/Kolkata + "RU", //Z#287 Asia/Krasnoyarsk + "MY", //Z#288 Asia/Kuala_Lumpur + "MY", //Z#289 Asia/Kuching + "KW", //Z#290 Asia/Kuwait + "MO", //Z#291 Asia/Macao + "MO", //Z#292 Asia/Macau + "RU", //Z#293 Asia/Magadan + "ID", //Z#294 Asia/Makassar + "PH", //Z#295 Asia/Manila + "OM", //Z#296 Asia/Muscat + "CY", //Z#297 Asia/Nicosia + "RU", //Z#298 Asia/Novokuznetsk + "RU", //Z#299 Asia/Novosibirsk + "RU", //Z#300 Asia/Omsk + "KZ", //Z#301 Asia/Oral + "KH", //Z#302 Asia/Phnom_Penh + "ID", //Z#303 Asia/Pontianak + "KP", //Z#304 Asia/Pyongyang + "QA", //Z#305 Asia/Qatar + "KZ", //Z#306 Asia/Qyzylorda + "MM", //Z#307 Asia/Rangoon + "SA", //Z#308 Asia/Riyadh + "VN", //Z#309 Asia/Saigon + "RU", //Z#310 Asia/Sakhalin + "UZ", //Z#311 Asia/Samarkand + "KR", //Z#312 Asia/Seoul + "CN", //Z#313 Asia/Shanghai + "SG", //Z#314 Asia/Singapore + "RU", //Z#315 Asia/Srednekolymsk + "TW", //Z#316 Asia/Taipei + "UZ", //Z#317 Asia/Tashkent + "GE", //Z#318 Asia/Tbilisi + "IR", //Z#319 Asia/Tehran + "IL", //Z#320 Asia/Tel_Aviv + "BT", //Z#321 Asia/Thimbu + "BT", //Z#322 Asia/Thimphu + "JP", //Z#323 Asia/Tokyo + "RU", //Z#324 Asia/Tomsk + "ID", //Z#325 Asia/Ujung_Pandang + "MN", //Z#326 Asia/Ulaanbaatar + "MN", //Z#327 Asia/Ulan_Bator + "CN", //Z#328 Asia/Urumqi + "RU", //Z#329 Asia/Ust-Nera + "LA", //Z#330 Asia/Vientiane + "RU", //Z#331 Asia/Vladivostok + "RU", //Z#332 Asia/Yakutsk + "MM", //Z#333 Asia/Yangon + "RU", //Z#334 Asia/Yekaterinburg + "AM", //Z#335 Asia/Yerevan + "PT", //Z#336 Atlantic/Azores + "BM", //Z#337 Atlantic/Bermuda + "ES", //Z#338 Atlantic/Canary + "CV", //Z#339 Atlantic/Cape_Verde + "FO", //Z#340 Atlantic/Faeroe + "FO", //Z#341 Atlantic/Faroe + "NO", //Z#342 Atlantic/Jan_Mayen + "PT", //Z#343 Atlantic/Madeira + "IS", //Z#344 Atlantic/Reykjavik + "GS", //Z#345 Atlantic/South_Georgia + "SH", //Z#346 Atlantic/St_Helena + "FK", //Z#347 Atlantic/Stanley + "AU", //Z#348 Australia/ACT + "AU", //Z#349 Australia/Adelaide + "AU", //Z#350 Australia/Brisbane + "AU", //Z#351 Australia/Broken_Hill + "AU", //Z#352 Australia/Canberra + "AU", //Z#353 Australia/Currie + "AU", //Z#354 Australia/Darwin + "AU", //Z#355 Australia/Eucla + "AU", //Z#356 Australia/Hobart + "AU", //Z#357 Australia/LHI + "AU", //Z#358 Australia/Lindeman + "AU", //Z#359 Australia/Lord_Howe + "AU", //Z#360 Australia/Melbourne + "AU", //Z#361 Australia/NSW + "AU", //Z#362 Australia/North + "AU", //Z#363 Australia/Perth + "AU", //Z#364 Australia/Queensland + "AU", //Z#365 Australia/South + "AU", //Z#366 Australia/Sydney + "AU", //Z#367 Australia/Tasmania + "AU", //Z#368 Australia/Victoria + "AU", //Z#369 Australia/West + "AU", //Z#370 Australia/Yancowinna + "BR", //Z#371 BET + "BD", //Z#372 BST + "BR", //Z#373 Brazil/Acre + "BR", //Z#374 Brazil/DeNoronha + "BR", //Z#375 Brazil/East + "BR", //Z#376 Brazil/West + "MZ", //Z#377 CAT + "001",//Z#378 CET + "CA", //Z#379 CNT + "US", //Z#380 CST + "001",//Z#381 CST6CDT + "CN", //Z#382 CTT + "CA", //Z#383 Canada/Atlantic + "CA", //Z#384 Canada/Central + "CA", //Z#385 Canada/East-Saskatchewan + "CA", //Z#386 Canada/Eastern + "CA", //Z#387 Canada/Mountain + "CA", //Z#388 Canada/Newfoundland + "CA", //Z#389 Canada/Pacific + "CA", //Z#390 Canada/Saskatchewan + "CA", //Z#391 Canada/Yukon + "CL", //Z#392 Chile/Continental + "CL", //Z#393 Chile/EasterIsland + "CU", //Z#394 Cuba + "KE", //Z#395 EAT + "FR", //Z#396 ECT + "001",//Z#397 EET + "001",//Z#398 EST + "001",//Z#399 EST5EDT + "EG", //Z#400 Egypt + "IE", //Z#401 Eire + "001",//Z#402 Etc/GMT + "001",//Z#403 Etc/GMT+0 + "001",//Z#404 Etc/GMT+1 + "001",//Z#405 Etc/GMT+10 + "001",//Z#406 Etc/GMT+11 + "001",//Z#407 Etc/GMT+12 + "001",//Z#408 Etc/GMT+2 + "001",//Z#409 Etc/GMT+3 + "001",//Z#410 Etc/GMT+4 + "001",//Z#411 Etc/GMT+5 + "001",//Z#412 Etc/GMT+6 + "001",//Z#413 Etc/GMT+7 + "001",//Z#414 Etc/GMT+8 + "001",//Z#415 Etc/GMT+9 + "001",//Z#416 Etc/GMT-0 + "001",//Z#417 Etc/GMT-1 + "001",//Z#418 Etc/GMT-10 + "001",//Z#419 Etc/GMT-11 + "001",//Z#420 Etc/GMT-12 + "001",//Z#421 Etc/GMT-13 + "001",//Z#422 Etc/GMT-14 + "001",//Z#423 Etc/GMT-2 + "001",//Z#424 Etc/GMT-3 + "001",//Z#425 Etc/GMT-4 + "001",//Z#426 Etc/GMT-5 + "001",//Z#427 Etc/GMT-6 + "001",//Z#428 Etc/GMT-7 + "001",//Z#429 Etc/GMT-8 + "001",//Z#430 Etc/GMT-9 + "001",//Z#431 Etc/GMT0 + "001",//Z#432 Etc/Greenwich + "001",//Z#433 Etc/UCT + "001",//Z#434 Etc/UTC + "001",//Z#435 Etc/Universal + "001",//Z#436 Etc/Unknown + "001",//Z#437 Etc/Zulu + "NL", //Z#438 Europe/Amsterdam + "AD", //Z#439 Europe/Andorra + "RU", //Z#440 Europe/Astrakhan + "GR", //Z#441 Europe/Athens + "GB", //Z#442 Europe/Belfast + "RS", //Z#443 Europe/Belgrade + "DE", //Z#444 Europe/Berlin + "SK", //Z#445 Europe/Bratislava + "BE", //Z#446 Europe/Brussels + "RO", //Z#447 Europe/Bucharest + "HU", //Z#448 Europe/Budapest + "DE", //Z#449 Europe/Busingen + "MD", //Z#450 Europe/Chisinau + "DK", //Z#451 Europe/Copenhagen + "IE", //Z#452 Europe/Dublin + "GI", //Z#453 Europe/Gibraltar + "GG", //Z#454 Europe/Guernsey + "FI", //Z#455 Europe/Helsinki + "IM", //Z#456 Europe/Isle_of_Man + "TR", //Z#457 Europe/Istanbul + "JE", //Z#458 Europe/Jersey + "RU", //Z#459 Europe/Kaliningrad + "UA", //Z#460 Europe/Kiev + "RU", //Z#461 Europe/Kirov + "PT", //Z#462 Europe/Lisbon + "SI", //Z#463 Europe/Ljubljana + "GB", //Z#464 Europe/London + "LU", //Z#465 Europe/Luxembourg + "ES", //Z#466 Europe/Madrid + "MT", //Z#467 Europe/Malta + "AX", //Z#468 Europe/Mariehamn + "BY", //Z#469 Europe/Minsk + "MC", //Z#470 Europe/Monaco + "RU", //Z#471 Europe/Moscow + "CY", //Z#472 Europe/Nicosia + "NO", //Z#473 Europe/Oslo + "FR", //Z#474 Europe/Paris + "ME", //Z#475 Europe/Podgorica + "CZ", //Z#476 Europe/Prague + "LV", //Z#477 Europe/Riga + "IT", //Z#478 Europe/Rome + "RU", //Z#479 Europe/Samara + "SM", //Z#480 Europe/San_Marino + "BA", //Z#481 Europe/Sarajevo + "RU", //Z#482 Europe/Saratov + "UA", //Z#483 Europe/Simferopol + "MK", //Z#484 Europe/Skopje + "BG", //Z#485 Europe/Sofia + "SE", //Z#486 Europe/Stockholm + "EE", //Z#487 Europe/Tallinn + "AL", //Z#488 Europe/Tirane + "MD", //Z#489 Europe/Tiraspol + "RU", //Z#490 Europe/Ulyanovsk + "UA", //Z#491 Europe/Uzhgorod + "LI", //Z#492 Europe/Vaduz + "VA", //Z#493 Europe/Vatican + "AT", //Z#494 Europe/Vienna + "LT", //Z#495 Europe/Vilnius + "RU", //Z#496 Europe/Volgograd + "PL", //Z#497 Europe/Warsaw + "HR", //Z#498 Europe/Zagreb + "UA", //Z#499 Europe/Zaporozhye + "CH", //Z#500 Europe/Zurich + "001",//Z#501 Factory + "GB", //Z#502 GB + "GB", //Z#503 GB-Eire + "001",//Z#504 GMT + "001",//Z#505 GMT+0 + "001",//Z#506 GMT-0 + "001",//Z#507 GMT0 + "001",//Z#508 Greenwich + "001",//Z#509 HST + "HK", //Z#510 Hongkong + "US", //Z#511 IET + "IN", //Z#512 IST + "IS", //Z#513 Iceland + "MG", //Z#514 Indian/Antananarivo + "IO", //Z#515 Indian/Chagos + "CX", //Z#516 Indian/Christmas + "CC", //Z#517 Indian/Cocos + "KM", //Z#518 Indian/Comoro + "TF", //Z#519 Indian/Kerguelen + "SC", //Z#520 Indian/Mahe + "MV", //Z#521 Indian/Maldives + "MU", //Z#522 Indian/Mauritius + "YT", //Z#523 Indian/Mayotte + "RE", //Z#524 Indian/Reunion + "IR", //Z#525 Iran + "IL", //Z#526 Israel + "JP", //Z#527 JST + "JM", //Z#528 Jamaica + "JP", //Z#529 Japan + "MH", //Z#530 Kwajalein + "LY", //Z#531 Libya + "001",//Z#532 MET + "WS", //Z#533 MIT + "001",//Z#534 MST + "001",//Z#535 MST7MDT + "MX", //Z#536 Mexico/BajaNorte + "MX", //Z#537 Mexico/BajaSur + "MX", //Z#538 Mexico/General + "AM", //Z#539 NET + "NZ", //Z#540 NST + "NZ", //Z#541 NZ + "NZ", //Z#542 NZ-CHAT + "US", //Z#543 Navajo + "PK", //Z#544 PLT + "US", //Z#545 PNT + "CN", //Z#546 PRC + "PR", //Z#547 PRT + "US", //Z#548 PST + "001",//Z#549 PST8PDT + "WS", //Z#550 Pacific/Apia + "NZ", //Z#551 Pacific/Auckland + "PG", //Z#552 Pacific/Bougainville + "NZ", //Z#553 Pacific/Chatham + "FM", //Z#554 Pacific/Chuuk + "CL", //Z#555 Pacific/Easter + "VU", //Z#556 Pacific/Efate + "KI", //Z#557 Pacific/Enderbury + "TK", //Z#558 Pacific/Fakaofo + "FJ", //Z#559 Pacific/Fiji + "TV", //Z#560 Pacific/Funafuti + "EC", //Z#561 Pacific/Galapagos + "PF", //Z#562 Pacific/Gambier + "SB", //Z#563 Pacific/Guadalcanal + "GU", //Z#564 Pacific/Guam + "US", //Z#565 Pacific/Honolulu + "UM", //Z#566 Pacific/Johnston + "KI", //Z#567 Pacific/Kiritimati + "FM", //Z#568 Pacific/Kosrae + "MH", //Z#569 Pacific/Kwajalein + "MH", //Z#570 Pacific/Majuro + "PF", //Z#571 Pacific/Marquesas + "UM", //Z#572 Pacific/Midway + "NR", //Z#573 Pacific/Nauru + "NU", //Z#574 Pacific/Niue + "NF", //Z#575 Pacific/Norfolk + "NC", //Z#576 Pacific/Noumea + "AS", //Z#577 Pacific/Pago_Pago + "PW", //Z#578 Pacific/Palau + "PN", //Z#579 Pacific/Pitcairn + "FM", //Z#580 Pacific/Pohnpei + "FM", //Z#581 Pacific/Ponape + "PG", //Z#582 Pacific/Port_Moresby + "CK", //Z#583 Pacific/Rarotonga + "MP", //Z#584 Pacific/Saipan + "AS", //Z#585 Pacific/Samoa + "PF", //Z#586 Pacific/Tahiti + "KI", //Z#587 Pacific/Tarawa + "TO", //Z#588 Pacific/Tongatapu + "FM", //Z#589 Pacific/Truk + "UM", //Z#590 Pacific/Wake + "WF", //Z#591 Pacific/Wallis + "FM", //Z#592 Pacific/Yap + "PL", //Z#593 Poland + "PT", //Z#594 Portugal + "TW", //Z#595 ROC + "KR", //Z#596 ROK + "SB", //Z#597 SST + "SG", //Z#598 Singapore + "001",//Z#599 SystemV/AST4 + "001",//Z#600 SystemV/AST4ADT + "001",//Z#601 SystemV/CST6 + "001",//Z#602 SystemV/CST6CDT + "001",//Z#603 SystemV/EST5 + "001",//Z#604 SystemV/EST5EDT + "001",//Z#605 SystemV/HST10 + "001",//Z#606 SystemV/MST7 + "001",//Z#607 SystemV/MST7MDT + "001",//Z#608 SystemV/PST8 + "001",//Z#609 SystemV/PST8PDT + "001",//Z#610 SystemV/YST9 + "001",//Z#611 SystemV/YST9YDT + "TR", //Z#612 Turkey + "001",//Z#613 UCT + "US", //Z#614 US/Alaska + "US", //Z#615 US/Aleutian + "US", //Z#616 US/Arizona + "US", //Z#617 US/Central + "US", //Z#618 US/East-Indiana + "US", //Z#619 US/Eastern + "US", //Z#620 US/Hawaii + "US", //Z#621 US/Indiana-Starke + "US", //Z#622 US/Michigan + "US", //Z#623 US/Mountain + "US", //Z#624 US/Pacific + "US", //Z#625 US/Pacific-New + "AS", //Z#626 US/Samoa + "001",//Z#627 UTC + "001",//Z#628 Universal + "VN", //Z#629 VST + "RU", //Z#630 W-SU + "001",//Z#631 WET + "001",//Z#632 Zulu } } diff --git a/chromium/third_party/icu/source/data/translit/root_subset.txt b/chromium/third_party/icu/source/data/translit/root_subset.txt index b27191cffd4..2f5c4baec34 100644 --- a/chromium/third_party/icu/source/data/translit/root_subset.txt +++ b/chromium/third_party/icu/source/data/translit/root_subset.txt @@ -3,25 +3,14 @@ // * Corporation; Unicode, Inc.; and others. All Rights Reserved. // * // *************************************************************************** -// File: root.txt -// Only include: -// For Chinese script detection: -// Chinese Simplified-Traditional and Traditional-Simplified transform -// rules, and their aliases Hans-Hant and Hant-Hans, respectively. +// This file specifies transliteration rulesets that are to be kept for Chromium +// releases. +// +// Currently no rule sets in use. +// Note that RuleBasedTransliteratorIDs block has to be present. Otherwise, +// built-in transforms such as NFD/NFC would fail. root { RuleBasedTransliteratorIDs { - Hans-Hant { - file { - resource:process(transliterator) {"Hans_Hant.txt"} - direction {"FORWARD"} - } - } - Hant-Hans { - file { - resource:process(transliterator) {"Hans_Hant.txt"} - direction {"REVERSE"} - } - } } } diff --git a/chromium/third_party/icu/source/data/translit/trnslocal.mk b/chromium/third_party/icu/source/data/translit/trnslocal.mk index a3aba1b829b..1540b8d10ce 100644 --- a/chromium/third_party/icu/source/data/translit/trnslocal.mk +++ b/chromium/third_party/icu/source/data/translit/trnslocal.mk @@ -1 +1 @@ -TRANSLIT_SOURCE=css3transform.txt +TRANSLIT_SOURCE=root_subset.txt diff --git a/chromium/third_party/pdfium/core/fxcrt/fx_basic_coords.cpp b/chromium/third_party/pdfium/core/fxcrt/fx_basic_coords.cpp index b73dc6d8254..cb5a0104271 100644 --- a/chromium/third_party/pdfium/core/fxcrt/fx_basic_coords.cpp +++ b/chromium/third_party/pdfium/core/fxcrt/fx_basic_coords.cpp @@ -4,8 +4,9 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include <limits.h> + #include <algorithm> -#include <limits> #include "core/fxcrt/fx_coordinates.h" #include "core/fxcrt/fx_ext.h" @@ -230,7 +231,7 @@ CFX_FloatRect CFX_FloatRect::GetBBox(const CFX_PointF* pPoints, int nPoints) { void CFX_Matrix::SetReverse(const CFX_Matrix& m) { FX_FLOAT i = m.a * m.d - m.b * m.c; - if (FXSYS_fabs(i) <= std::numeric_limits<float>::epsilon()) + if (FXSYS_fabs(i) == 0) return; FX_FLOAT j = -i; diff --git a/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.cc b/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.cc index 84b162bdfee..e29109d32c8 100644 --- a/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.cc +++ b/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.cc @@ -57,12 +57,6 @@ Rotation DxgiRotationToRotation(DXGI_MODE_ROTATION rotation) { return Rotation::CLOCK_WISE_0; } -// Translates |rect| with the reverse of |offset| -DesktopRect ReverseTranslate(DesktopRect rect, DesktopVector offset) { - rect.Translate(-offset.x(), -offset.y()); - return rect; -} - } // namespace DxgiOutputDuplicator::DxgiOutputDuplicator(const D3dDevice& device, @@ -132,8 +126,7 @@ bool DxgiOutputDuplicator::DuplicateOutput() { } rotation_ = DxgiRotationToRotation(desc_.Rotation); - unrotated_size_ = - RotateSize(desktop_rect_.size(), ReverseRotation(rotation_)); + unrotated_size_ = RotateSize(desktop_size(), ReverseRotation(rotation_)); return true; } @@ -157,7 +150,7 @@ bool DxgiOutputDuplicator::Duplicate(Context* context, RTC_DCHECK(texture_); RTC_DCHECK(target); if (!DesktopRect::MakeSize(target->size()) - .ContainsRect(TranslatedDesktopRect(offset))) { + .ContainsRect(GetTranslatedDesktopRect(offset))) { // target size is not large enough to cover current output region. return false; } @@ -175,37 +168,43 @@ bool DxgiOutputDuplicator::Duplicate(Context* context, // We need to merge updated region with the one from context, but only spread // updated region from current frame. So keeps a copy of updated region from - // context here. + // context here. The |updated_region| always starts from (0, 0). DesktopRegion updated_region; updated_region.Swap(&context->updated_region); if (error.Error() == S_OK && frame_info.AccumulatedFrames > 0 && resource) { - DetectUpdatedRegion(frame_info, offset, &context->updated_region); + DetectUpdatedRegion(frame_info, &context->updated_region); + SpreadContextChange(context); if (!texture_->CopyFrom(frame_info, resource.Get())) { return false; } - SpreadContextChange(context); updated_region.AddRegion(context->updated_region); + // TODO(zijiehe): Figure out why clearing context->updated_region() here + // triggers screen flickering? const DesktopFrame& source = texture_->AsDesktopFrame(); if (rotation_ != Rotation::CLOCK_WISE_0) { for (DesktopRegion::Iterator it(updated_region); !it.IsAtEnd(); it.Advance()) { - const DesktopRect source_rect = - RotateRect(ReverseTranslate(it.rect(), offset), - desktop_rect().size(), ReverseRotation(rotation_)); + // The |updated_region| returned by Windows is rotated, but the |source| + // frame is not. So we need to rotate it reversely. + const DesktopRect source_rect = RotateRect( + it.rect(), desktop_size(), ReverseRotation(rotation_)); RotateDesktopFrame(source, source_rect, rotation_, offset, target); } } else { for (DesktopRegion::Iterator it(updated_region); !it.IsAtEnd(); it.Advance()) { - target->CopyPixelsFrom( - source, ReverseTranslate(it.rect(), offset).top_left(), it.rect()); + // The DesktopRect in |target|, starts from offset. + DesktopRect dest_rect = it.rect(); + dest_rect.Translate(offset); + target->CopyPixelsFrom(source, it.rect().top_left(), dest_rect); } } last_frame_ = target->Share(); last_frame_offset_ = offset; + updated_region.Translate(offset.x(), offset.y()); target->mutable_updated_region()->AddRegion(updated_region); num_frames_captured_++; return texture_->Release() && ReleaseFrame(); @@ -216,8 +215,15 @@ bool DxgiOutputDuplicator::Duplicate(Context* context, // export last frame to the target. for (DesktopRegion::Iterator it(updated_region); !it.IsAtEnd(); it.Advance()) { - target->CopyPixelsFrom(*last_frame_, it.rect().top_left(), it.rect()); + // The DesktopRect in |source|, starts from last_frame_offset_. + DesktopRect source_rect = it.rect(); + // The DesktopRect in |target|, starts from offset. + DesktopRect target_rect = source_rect; + source_rect.Translate(last_frame_offset_); + target_rect.Translate(offset); + target->CopyPixelsFrom(*last_frame_, source_rect.top_left(), target_rect); } + updated_region.Translate(offset.x(), offset.y()); target->mutable_updated_region()->AddRegion(updated_region); } else { // If we were at the very first frame, and capturing failed, the @@ -229,23 +235,26 @@ bool DxgiOutputDuplicator::Duplicate(Context* context, return error.Error() == DXGI_ERROR_WAIT_TIMEOUT || ReleaseFrame(); } -DesktopRect DxgiOutputDuplicator::TranslatedDesktopRect(DesktopVector offset) { - DesktopRect result(DesktopRect::MakeSize(desktop_rect_.size())); +DesktopRect DxgiOutputDuplicator::GetTranslatedDesktopRect( + DesktopVector offset) const { + DesktopRect result(DesktopRect::MakeSize(desktop_size())); result.Translate(offset); return result; } +DesktopRect DxgiOutputDuplicator::GetUntranslatedDesktopRect() const { + return DesktopRect::MakeSize(desktop_size()); +} + void DxgiOutputDuplicator::DetectUpdatedRegion( const DXGI_OUTDUPL_FRAME_INFO& frame_info, - DesktopVector offset, DesktopRegion* updated_region) { if (DoDetectUpdatedRegion(frame_info, updated_region)) { - updated_region->Translate(offset.x(), offset.y()); // Make sure even a region returned by Windows API is out of the scope of // desktop_rect_, we still won't export it to the target DesktopFrame. - updated_region->IntersectWith(TranslatedDesktopRect(offset)); + updated_region->IntersectWith(GetUntranslatedDesktopRect()); } else { - updated_region->SetRect(TranslatedDesktopRect(offset)); + updated_region->SetRect(GetUntranslatedDesktopRect()); } } @@ -325,7 +334,7 @@ bool DxgiOutputDuplicator::DoDetectUpdatedRegion( void DxgiOutputDuplicator::Setup(Context* context) { RTC_DCHECK(context->updated_region.is_empty()); // Always copy entire monitor during the first Duplicate() function call. - context->updated_region.AddRect(desktop_rect_); + context->updated_region.AddRect(GetUntranslatedDesktopRect()); RTC_DCHECK(std::find(contexts_.begin(), contexts_.end(), context) == contexts_.end()); contexts_.push_back(context); @@ -346,6 +355,10 @@ void DxgiOutputDuplicator::SpreadContextChange(const Context* const source) { } } +DesktopSize DxgiOutputDuplicator::desktop_size() const { + return desktop_rect_.size(); +} + int64_t DxgiOutputDuplicator::num_frames_captured() const { #if !defined(NDEBUG) RTC_DCHECK_EQ(!!last_frame_, num_frames_captured_ > 0); diff --git a/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.h b/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.h index 2ac0a75eabe..2e85bf7a08a 100644 --- a/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.h +++ b/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.h @@ -36,8 +36,8 @@ class DxgiOutputDuplicator { public: struct Context { // The updated region DxgiOutputDuplicator::DetectUpdatedRegion() output - // during last Duplicate() function call. It's a DesktopRegion translated by - // offset of each DxgiOutputDuplicator instance. + // during last Duplicate() function call. It's always relative to the + // (0, 0). DesktopRegion updated_region; }; @@ -80,11 +80,9 @@ class DxgiOutputDuplicator { int64_t num_frames_captured() const; private: - // Detects updated region translated by offset from IDXGIOutput1. This - // function will set the |updated_region| as entire DesktopRect starts from - // offset if it failed to execute Windows APIs. + // Calls DoDetectUpdatedRegion(). If it fails, this function sets the + // |updated_region| as entire UntranslatedDesktopRect(). void DetectUpdatedRegion(const DXGI_OUTDUPL_FRAME_INFO& frame_info, - DesktopVector offset, DesktopRegion* updated_region); // Returns untranslated updated region, which are directly returned by Windows @@ -98,14 +96,21 @@ class DxgiOutputDuplicator { // Returns false if system does not support IDXGIOutputDuplication. bool DuplicateOutput(); - // Returns a DesktopRect with the same size of desktop_size_, but translated + // Returns a DesktopRect with the same size of desktop_size(), but translated // by offset. - DesktopRect TranslatedDesktopRect(DesktopVector offset); + DesktopRect GetTranslatedDesktopRect(DesktopVector offset) const; + + // Returns a DesktopRect with the same size of desktop_size(), but starts from + // (0, 0). + DesktopRect GetUntranslatedDesktopRect() const; // Spreads changes from |context| to other registered Context(s) in // contexts_. void SpreadContextChange(const Context* const context); + // Returns the size of desktop rectangle current instance representing. + DesktopSize desktop_size() const; + const D3dDevice device_; const Microsoft::WRL::ComPtr<IDXGIOutput1> output_; const DesktopRect desktop_rect_; diff --git a/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc b/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc index 31ad0b0acac..1afd2341b3f 100644 --- a/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc +++ b/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc @@ -252,12 +252,12 @@ void WindowCapturerWin::CaptureFrame() { frame->mutable_updated_region()->SetRect( DesktopRect::MakeSize(frame->size())); - if (!result) { + if (result) { + callback_->OnCaptureResult(Result::SUCCESS, std::move(frame)); + } else { LOG(LS_ERROR) << "Both PrintWindow() and BitBlt() failed."; - frame.reset(); + callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr); } - - callback_->OnCaptureResult(Result::SUCCESS, std::move(frame)); } } // namespace diff --git a/chromium/third_party/webrtc/modules/video_coding/frame_buffer2.cc b/chromium/third_party/webrtc/modules/video_coding/frame_buffer2.cc index dcbcb1f9bdf..8736567f8d2 100644 --- a/chromium/third_party/webrtc/modules/video_coding/frame_buffer2.cc +++ b/chromium/third_party/webrtc/modules/video_coding/frame_buffer2.cc @@ -90,7 +90,8 @@ FrameBuffer::ReturnReason FrameBuffer::NextFrame( if (continuous_end_it != frames_.end()) ++continuous_end_it; - for (; frame_it != continuous_end_it; ++frame_it) { + for (; frame_it != continuous_end_it && frame_it != frames_.end(); + ++frame_it) { if (!frame_it->second.continuous || frame_it->second.num_missing_decodable > 0) { continue; @@ -222,6 +223,17 @@ int FrameBuffer::InsertFrame(std::unique_ptr<FrameObject> frame) { } } + // Test if inserting this frame would cause the order of the frames to become + // ambiguous (covering more than half the interval of 2^16). This can happen + // when the picture id make large jumps mid stream. + if (!frames_.empty() && + key < frames_.begin()->first && + frames_.rbegin()->first < key) { + LOG(LS_WARNING) << "A jump in picture id was detected, clearing buffer."; + ClearFramesAndHistory(); + last_continuous_picture_id = -1; + } + auto info = frames_.insert(std::make_pair(key, FrameInfo())).first; if (info->second.frame) { diff --git a/chromium/third_party/webrtc/modules/video_coding/frame_buffer2_unittest.cc b/chromium/third_party/webrtc/modules/video_coding/frame_buffer2_unittest.cc index b67d99376fd..04ce5595a55 100644 --- a/chromium/third_party/webrtc/modules/video_coding/frame_buffer2_unittest.cc +++ b/chromium/third_party/webrtc/modules/video_coding/frame_buffer2_unittest.cc @@ -497,5 +497,24 @@ TEST_F(TestFrameBuffer2, StatsCallback) { CheckFrame(0, pid, 0); } +TEST_F(TestFrameBuffer2, ForwardJumps) { + EXPECT_EQ(5453, InsertFrame(5453, 0, 1, false)); + ExtractFrame(); + EXPECT_EQ(5454, InsertFrame(5454, 0, 1, false, 5453)); + ExtractFrame(); + EXPECT_EQ(15670, InsertFrame(15670, 0, 1, false)); + ExtractFrame(); + EXPECT_EQ(29804, InsertFrame(29804, 0, 1, false)); + ExtractFrame(); + EXPECT_EQ(29805, InsertFrame(29805, 0, 1, false, 29804)); + ExtractFrame(); + EXPECT_EQ(29806, InsertFrame(29806, 0, 1, false, 29805)); + ExtractFrame(); + EXPECT_EQ(33819, InsertFrame(33819, 0, 1, false)); + ExtractFrame(); + EXPECT_EQ(41248, InsertFrame(41248, 0, 1, false)); + ExtractFrame(); +} + } // namespace video_coding } // namespace webrtc diff --git a/chromium/tools/mb/mb_config.pyl b/chromium/tools/mb/mb_config.pyl index ad91f61bb9c..655c67bf758 100644 --- a/chromium/tools/mb/mb_config.pyl +++ b/chromium/tools/mb/mb_config.pyl @@ -439,7 +439,7 @@ 'official.desktop': { 'linux64': 'official', 'mac64': 'official', - 'precise64': 'official', + 'mac64-recipes': 'official', # Currently the official bots set mini_installer_official_deps=1 # but it's not clear if that's actually used anywhere. @@ -456,12 +456,19 @@ '1': 'official_chrome_pgo_phase_1', '2': 'official_chrome_pgo_phase_2', }, + # TODO(mmoss): Remove this once all official Windows recipes are working. + 'win-recipes': 'official', }, 'official.desktop.continuous': { 'mac beta': 'official', 'mac stable': 'official', 'mac trunk': 'official', + 'linux64 beta': 'official_six_concurrent_links', + 'linux64 stable': 'official_six_concurrent_links', + 'linux64 trunk': 'official_six_concurrent_links', + # TODO(mmoss): These precise64 entries can go away once the newly renamed + # builders are fully deployed. 'precise64 beta': 'official_six_concurrent_links', 'precise64 stable': 'official_six_concurrent_links', 'precise64 trunk': 'official_six_concurrent_links', diff --git a/chromium/ui/arc/notification/arc_custom_notification_item.cc b/chromium/ui/arc/notification/arc_custom_notification_item.cc index e0b0417d9f7..521145ddf06 100644 --- a/chromium/ui/arc/notification/arc_custom_notification_item.cc +++ b/chromium/ui/arc/notification/arc_custom_notification_item.cc @@ -102,6 +102,7 @@ void ArcCustomNotificationItem::UpdateWithArcNotificationData( pinned_ = rich_data.pinned; expand_state_ = data->expand_state; + shown_contents_ = data->shown_contents; if (!data->snapshot_image || data->snapshot_image->isNull()) { snapshot_ = gfx::ImageSkia(); diff --git a/chromium/ui/arc/notification/arc_custom_notification_item.h b/chromium/ui/arc/notification/arc_custom_notification_item.h index 3a671b9549a..f4ed4567b5d 100644 --- a/chromium/ui/arc/notification/arc_custom_notification_item.h +++ b/chromium/ui/arc/notification/arc_custom_notification_item.h @@ -53,11 +53,16 @@ class ArcCustomNotificationItem : public ArcNotificationItem { mojom::ArcNotificationExpandState expand_state() const { return expand_state_; } + mojom::ArcNotificationShownContents shown_contents() const { + return shown_contents_; + } private: bool pinned_ = false; mojom::ArcNotificationExpandState expand_state_ = mojom::ArcNotificationExpandState::FIXED_SIZE; + mojom::ArcNotificationShownContents shown_contents_ = + mojom::ArcNotificationShownContents::CONTENTS_SHOWN; gfx::ImageSkia snapshot_; int window_ref_count_ = 0; diff --git a/chromium/ui/arc/notification/arc_custom_notification_view.cc b/chromium/ui/arc/notification/arc_custom_notification_view.cc index d640556c32c..0c8c2ea4043 100644 --- a/chromium/ui/arc/notification/arc_custom_notification_view.cc +++ b/chromium/ui/arc/notification/arc_custom_notification_view.cc @@ -13,12 +13,15 @@ #include "ui/base/resource/resource_bundle.h" #include "ui/compositor/layer_animation_observer.h" #include "ui/events/event_handler.h" +#include "ui/gfx/animation/linear_animation.h" +#include "ui/gfx/animation/tween.h" #include "ui/gfx/canvas.h" #include "ui/gfx/transform.h" #include "ui/message_center/message_center_style.h" #include "ui/message_center/views/custom_notification_view.h" #include "ui/message_center/views/toast_contents_view.h" #include "ui/strings/grit/ui_strings.h" +#include "ui/views/background.h" #include "ui/views/focus/focus_manager.h" #include "ui/views/layout/box_layout.h" #include "ui/views/painter.h" @@ -28,6 +31,22 @@ namespace arc { +namespace { + +// This value should be the same as the duration of reveal animation of +// the settings view of an Android notification. +constexpr int kBackgroundColorChangeDuration = 360; + +SkColor GetControlButtonBackgroundColor( + const mojom::ArcNotificationShownContents& shown_contents) { + if (shown_contents == mojom::ArcNotificationShownContents::CONTENTS_SHOWN) + return message_center::kControlButtonBackgroundColor; + else + return SK_ColorTRANSPARENT; +} + +} // namespace + class ArcCustomNotificationView::EventForwarder : public ui::EventHandler { public: explicit EventForwarder(ArcCustomNotificationView* owner) : owner_(owner) {} @@ -48,14 +67,17 @@ class ArcCustomNotificationView::EventForwarder : public ui::EventHandler { ForwardScrollEvent(event->AsScrollEvent()); } else if (event->IsMouseWheelEvent()) { ForwardMouseWheelEvent(event->AsMouseWheelEvent()); - } else if (!event->IsTouchEvent()) { + } else if (!event->IsTouchEvent() && event->type() != ui::ET_GESTURE_TAP) { // TODO(yoshiki): Use a better tigger (eg. focusing EditText on // notification) than clicking (crbug.com/697379). if (event->type() == ui::ET_MOUSE_PRESSED) owner_->ActivateToast(); - // Forward the rest events to |owner_| except touches because View - // should no longer receive touch events. See View::OnTouchEvent. + // Forward the rest events to |owner_| except for: + // 1. Touches, because View should no longer receive touch events. + // See View::OnTouchEvent. + // 2. Tap gestures are handled on the Android side, so ignore them. + // See crbug.com/709911. owner_->OnEvent(event); } } @@ -186,7 +208,15 @@ class ArcCustomNotificationView::ContentViewDelegate ArcCustomNotificationView::ControlButton::ControlButton( ArcCustomNotificationView* owner) - : message_center::PaddedButton(owner), owner_(owner) {} + : message_center::PaddedButton(owner), owner_(owner) { + if (owner_->item_) { + set_background(views::Background::CreateSolidBackground( + GetControlButtonBackgroundColor(owner_->item_->shown_contents()))); + } else { + set_background(views::Background::CreateSolidBackground( + message_center::kControlButtonBackgroundColor)); + } +} void ArcCustomNotificationView::ControlButton::OnFocus() { message_center::PaddedButton::OnFocus(); @@ -237,6 +267,7 @@ ArcCustomNotificationView::CreateContentViewDelegate() { void ArcCustomNotificationView::CreateCloseButton() { DCHECK(control_buttons_view_); + DCHECK(item_); close_button_ = base::MakeUnique<ControlButton>(this); close_button_->SetImage(views::CustomButton::STATE_NORMAL, @@ -251,6 +282,7 @@ void ArcCustomNotificationView::CreateCloseButton() { void ArcCustomNotificationView::CreateSettingsButton() { DCHECK(control_buttons_view_); + DCHECK(item_); settings_button_ = new ControlButton(this); settings_button_->SetImage(views::CustomButton::STATE_NORMAL, @@ -262,11 +294,12 @@ void ArcCustomNotificationView::CreateSettingsButton() { control_buttons_view_->AddChildView(settings_button_); } -void ArcCustomNotificationView::CreateFloatingControlButtons() { +void ArcCustomNotificationView::MaybeCreateFloatingControlButtons() { // Floating close button is a transient child of |surface_| and also part // of the hosting widget's focus chain. It could only be created when both - // are present. - if (!surface_ || !GetWidget()) + // are present. Further, if we are being destroyed (|item_| is null), don't + // create the control buttons. + if (!surface_ || !GetWidget() || !item_) return; // Creates the control_buttons_view_, which collects all control buttons into @@ -275,9 +308,10 @@ void ArcCustomNotificationView::CreateFloatingControlButtons() { control_buttons_view_->SetLayoutManager( new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); - if (item_ && item_->IsOpeningSettingsSupported()) + if (item_->IsOpeningSettingsSupported()) CreateSettingsButton(); - CreateCloseButton(); + if (!item_->pinned()) + CreateCloseButton(); views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL); params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; @@ -317,7 +351,7 @@ void ArcCustomNotificationView::SetSurface(exo::NotificationSurface* surface) { surface_->window()->AddObserver(this); surface_->window()->AddPreTargetHandler(event_forwarder_.get()); - CreateFloatingControlButtons(); + MaybeCreateFloatingControlButtons(); if (GetWidget()) AttachSurface(); @@ -342,9 +376,22 @@ void ArcCustomNotificationView::UpdatePreferredSize() { } void ArcCustomNotificationView::UpdateControlButtonsVisibility() { - if (!surface_ || !floating_control_buttons_widget_) + if (!surface_) return; + // TODO(edcourtney, yhanada): Creating the floating control widget here is not + // correct. This function may be called during the destruction of + // |floating_control_buttons_widget_|. This can lead to memory corruption. + // Rather than creating it here, we should fix the behaviour of OnMouseExited + // and OnMouseEntered for ARC notifications in MessageCenterView. See + // crbug.com/714587 and crbug.com/709862. + if (!floating_control_buttons_widget_) { + // This may update |floating_control_buttons_widget_|. + MaybeCreateFloatingControlButtons(); + if (!floating_control_buttons_widget_) + return; + } + const bool target_visiblity = IsMouseHovered() || (close_button_ && close_button_->HasFocus()) || (settings_button_ && settings_button_->HasFocus()); @@ -358,7 +405,8 @@ void ArcCustomNotificationView::UpdateControlButtonsVisibility() { } void ArcCustomNotificationView::UpdatePinnedState() { - DCHECK(item_); + if (!item_) + return; if (item_->pinned() && close_button_) { control_buttons_view_->RemoveChildView(close_button_.get()); @@ -403,6 +451,30 @@ void ArcCustomNotificationView::AttachSurface() { UpdatePinnedState(); } +void ArcCustomNotificationView::StartControlButtonsColorAnimation() { + if (control_button_color_animation_) + control_button_color_animation_->End(); + control_button_color_animation_.reset(new gfx::LinearAnimation(this)); + control_button_color_animation_->SetDuration(kBackgroundColorChangeDuration); + control_button_color_animation_->Start(); +} + +bool ArcCustomNotificationView::ShouldUpdateControlButtonsColor() const { + // Don't update the control button color when we are about to be destroyed. + if (!item_) + return false; + + if (settings_button_ && + settings_button_->background()->get_color() != + GetControlButtonBackgroundColor(item_->shown_contents())) + return true; + if (close_button_ && + close_button_->background()->get_color() != + GetControlButtonBackgroundColor(item_->shown_contents())) + return true; + return false; +} + void ArcCustomNotificationView::ViewHierarchyChanged( const views::View::ViewHierarchyChangedDetails& details) { views::Widget* widget = GetWidget(); @@ -524,6 +596,11 @@ void ArcCustomNotificationView::OnFocus() { } void ArcCustomNotificationView::OnBlur() { + if (!parent()) { + // OnBlur may be called when this view is being removed. + return; + } + CHECK_EQ(message_center::CustomNotificationView::kViewClassName, parent()->GetClassName()); @@ -553,9 +630,12 @@ bool ArcCustomNotificationView::OnMousePressed(const ui::MouseEvent& event) { // All mouse clicks or touches should be sent to corresponding Android view // because the surface is on this view, so receiving a mouse pressed event // means the event is generated by automation API. - if (event.IsOnlyLeftMouseButton() && + // We can distinguish events from automation API by checking the target of the + // event because the target of all events generated by automation API is set + // to nullptr. + if (event.IsOnlyLeftMouseButton() && item_ && item_->expand_state() != mojom::ArcNotificationExpandState::FIXED_SIZE && - event.target() != surface_->window()) { + event.target() == nullptr) { item_->ToggleExpansion(); return true; } @@ -602,6 +682,8 @@ void ArcCustomNotificationView::OnItemDestroying() { void ArcCustomNotificationView::OnItemUpdated() { UpdatePinnedState(); UpdateSnapshot(); + if (ShouldUpdateControlButtonsColor()) + StartControlButtonsColorAnimation(); } void ArcCustomNotificationView::OnNotificationSurfaceAdded( @@ -620,4 +702,36 @@ void ArcCustomNotificationView::OnNotificationSurfaceRemoved( SetSurface(nullptr); } +void ArcCustomNotificationView::AnimationEnded( + const gfx::Animation* animation) { + DCHECK_EQ(animation, control_button_color_animation_.get()); + control_button_color_animation_.reset(); +} + +void ArcCustomNotificationView::AnimationProgressed( + const gfx::Animation* animation) { + DCHECK_EQ(animation, control_button_color_animation_.get()); + + if (item_) { + const SkColor target = + GetControlButtonBackgroundColor(item_->shown_contents()); + const SkColor start = + target == message_center::kControlButtonBackgroundColor + ? SK_ColorTRANSPARENT + : message_center::kControlButtonBackgroundColor; + const SkColor current_color = gfx::Tween::ColorValueBetween( + animation->GetCurrentValue(), start, target); + if (settings_button_) { + settings_button_->set_background( + views::Background::CreateSolidBackground(current_color)); + settings_button_->SchedulePaint(); + } + if (close_button_) { + close_button_->set_background( + views::Background::CreateSolidBackground(current_color)); + close_button_->SchedulePaint(); + } + } +} + } // namespace arc diff --git a/chromium/ui/arc/notification/arc_custom_notification_view.h b/chromium/ui/arc/notification/arc_custom_notification_view.h index 2ecb192bf21..6af56841a2a 100644 --- a/chromium/ui/arc/notification/arc_custom_notification_view.h +++ b/chromium/ui/arc/notification/arc_custom_notification_view.h @@ -12,6 +12,7 @@ #include "ui/arc/notification/arc_custom_notification_item.h" #include "ui/arc/notification/arc_notification_surface_manager.h" #include "ui/aura/window_observer.h" +#include "ui/gfx/animation/animation_delegate.h" #include "ui/message_center/views/custom_notification_content_view_delegate.h" #include "ui/message_center/views/padded_button.h" #include "ui/views/controls/button/button.h" @@ -21,6 +22,10 @@ namespace exo { class NotificationSurface; } +namespace gfx { +class LinearAnimation; +} + namespace views { class FocusTraversable; class Widget; @@ -33,7 +38,8 @@ class ArcCustomNotificationView public views::ButtonListener, public aura::WindowObserver, public ArcCustomNotificationItem::Observer, - public ArcNotificationSurfaceManager::Observer { + public ArcNotificationSurfaceManager::Observer, + public gfx::AnimationDelegate { public: explicit ArcCustomNotificationView(ArcCustomNotificationItem* item); ~ArcCustomNotificationView() override; @@ -64,7 +70,7 @@ class ArcCustomNotificationView void CreateCloseButton(); void CreateSettingsButton(); - void CreateFloatingControlButtons(); + void MaybeCreateFloatingControlButtons(); void SetSurface(exo::NotificationSurface* surface); void UpdatePreferredSize(); void UpdateControlButtonsVisibility(); @@ -72,6 +78,8 @@ class ArcCustomNotificationView void UpdateSnapshot(); void AttachSurface(); void ActivateToast(); + void StartControlButtonsColorAnimation(); + bool ShouldUpdateControlButtonsColor() const; // views::NativeViewHost void ViewHierarchyChanged( @@ -104,6 +112,12 @@ class ArcCustomNotificationView void OnNotificationSurfaceAdded(exo::NotificationSurface* surface) override; void OnNotificationSurfaceRemoved(exo::NotificationSurface* surface) override; + // AnimationDelegate + void AnimationEnded(const gfx::Animation* animation) override; + void AnimationProgressed(const gfx::Animation* animation) override; + + // If |item_| is null, we may be about to be destroyed. In this case, + // we have to be careful about what we do. ArcCustomNotificationItem* item_ = nullptr; exo::NotificationSurface* surface_ = nullptr; @@ -133,6 +147,8 @@ class ArcCustomNotificationView // Protects from call loops between Layout and OnWindowBoundsChanged. bool in_layout_ = false; + std::unique_ptr<gfx::LinearAnimation> control_button_color_animation_; + DISALLOW_COPY_AND_ASSIGN(ArcCustomNotificationView); }; diff --git a/chromium/ui/events/ozone/evdev/touch_evdev_types.h b/chromium/ui/events/ozone/evdev/touch_evdev_types.h index 55699aace92..cd54f749dde 100644 --- a/chromium/ui/events/ozone/evdev/touch_evdev_types.h +++ b/chromium/ui/events/ozone/evdev/touch_evdev_types.h @@ -48,6 +48,8 @@ struct EVENTS_OZONE_EVDEV_EXPORT InProgressTouchEvdev { float radius_y = 0; float pressure = 0; int tool_code = 0; + float tilt_x = 0; + float tilt_y = 0; ui::EventPointerType reported_tool_type = ui::EventPointerType::POINTER_TYPE_TOUCH; diff --git a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc index 8f16691c1cf..5ef3467c2fd 100644 --- a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc +++ b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc @@ -46,6 +46,11 @@ struct TouchCalibration { int bezel_bottom; }; +// Convert tilt from [min, min + num_values) to [-90deg, +90deg) +float ScaleTilt(int value, int min_value, int num_values) { + return 180.f * (value - min_value) / num_values - 90.f; +} + void GetTouchCalibration(TouchCalibration* cal) { std::vector<std::string> parts = base::SplitString( base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( @@ -139,6 +144,11 @@ void TouchEventConverterEvdev::Initialize(const EventDeviceInfo& info) { x_num_tuxels_ = info.GetAbsMaximum(ABS_X) - x_min_tuxels_ + 1; y_min_tuxels_ = info.GetAbsMinimum(ABS_Y); y_num_tuxels_ = info.GetAbsMaximum(ABS_Y) - y_min_tuxels_ + 1; + tilt_x_min_ = info.GetAbsMinimum(ABS_TILT_X); + tilt_y_min_ = info.GetAbsMinimum(ABS_TILT_Y); + tilt_x_range_ = info.GetAbsMaximum(ABS_TILT_X) - tilt_x_min_ + 1; + tilt_y_range_ = info.GetAbsMaximum(ABS_TILT_Y) - tilt_y_min_ + 1; + touch_points_ = 1; major_max_ = 0; current_slot_ = 0; @@ -202,6 +212,8 @@ void TouchEventConverterEvdev::Initialize(const EventDeviceInfo& info) { events_[0].radius_y = 0; events_[0].pressure = 0; events_[0].tool_code = 0; + events_[0].tilt_x = 0; + events_[0].tilt_y = 0; events_[0].cancelled = false; } if (cancelled_state) @@ -412,6 +424,16 @@ void TouchEventConverterEvdev::ProcessAbs(const input_event& input) { return; } break; + case ABS_TILT_X: + if (!has_mt_) { + events_[0].tilt_x = ScaleTilt(input.value, tilt_x_min_, tilt_x_range_); + } + break; + case ABS_TILT_Y: + if (!has_mt_) { + events_[0].tilt_y = ScaleTilt(input.value, tilt_y_min_, tilt_y_range_); + } + break; default: DVLOG(5) << "unhandled code for EV_ABS: " << input.code; return; @@ -471,7 +493,7 @@ void TouchEventConverterEvdev::ReportTouchEvent( base::TimeTicks timestamp) { ui::PointerDetails details(event.reported_tool_type, event.radius_x, event.radius_y, event.pressure, - /* tilt_x */ 0.0f, /* tilt_y */ 0.0f); + event.tilt_x, event.tilt_y); dispatcher_->DispatchTouchEvent( TouchEventParams(input_device_.id, event.slot, event_type, gfx::PointF(event.x, event.y), details, timestamp)); diff --git a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h index 8ae2de71d94..3ad2a364902 100644 --- a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h +++ b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h @@ -112,6 +112,12 @@ class EVENTS_OZONE_EVDEV_EXPORT TouchEventConverterEvdev int pressure_min_; int pressure_max_; // Used to normalize pressure values. + // Input range for tilt. + int tilt_x_min_; + int tilt_x_range_; + int tilt_y_min_; + int tilt_y_range_; + // Input range for x-axis. float x_min_tuxels_; float x_num_tuxels_; diff --git a/chromium/ui/message_center/message_center_impl.cc b/chromium/ui/message_center/message_center_impl.cc index 4e90822a60c..982611a8d3b 100644 --- a/chromium/ui/message_center/message_center_impl.cc +++ b/chromium/ui/message_center/message_center_impl.cc @@ -795,10 +795,13 @@ void MessageCenterImpl::ClickOnNotificationButton(const std::string& id, void MessageCenterImpl::ClickOnSettingsButton(const std::string& id) { scoped_refptr<NotificationDelegate> delegate = notification_list_->GetNotificationDelegate(id); + + bool handled_by_delegate = false; if (delegate.get()) - delegate->SettingsClick(); + handled_by_delegate = delegate->SettingsClick(); + for (auto& observer : observer_list_) - observer.OnNotificationSettingsClicked(); + observer.OnNotificationSettingsClicked(handled_by_delegate); } void MessageCenterImpl::MarkSinglePopupAsShown(const std::string& id, diff --git a/chromium/ui/message_center/message_center_observer.h b/chromium/ui/message_center/message_center_observer.h index e6315ccb929..e738bcb910d 100644 --- a/chromium/ui/message_center/message_center_observer.h +++ b/chromium/ui/message_center/message_center_observer.h @@ -40,8 +40,9 @@ class MESSAGE_CENTER_EXPORT MessageCenterObserver { virtual void OnNotificationButtonClicked(const std::string& notification_id, int button_index) {} - // Called when notification settings button is clicked. - virtual void OnNotificationSettingsClicked() {} + // Called when notification settings button is clicked. The |handled| argument + // indicates whether the notification delegate already handled the operation. + virtual void OnNotificationSettingsClicked(bool handled) {} // Called when the notification associated with |notification_id| is actually // displayed. diff --git a/chromium/ui/message_center/message_center_style.h b/chromium/ui/message_center/message_center_style.h index e3e245aea3d..289903d35d2 100644 --- a/chromium/ui/message_center/message_center_style.h +++ b/chromium/ui/message_center/message_center_style.h @@ -96,6 +96,9 @@ const SkColor kFocusBorderColor = SkColorSetRGB(64, 128, 250); const SkColor kSmallImageMaskForegroundColor = SK_ColorWHITE; // Background of small icon image. const SkColor kSmallImageMaskBackgroundColor = SkColorSetRGB(0xa3, 0xa3, 0xa3); +// Background of the close button and the settings button +const SkColor kControlButtonBackgroundColor = + SkColorSetA(SK_ColorWHITE, 0.9 * 0xff); // Limits. diff --git a/chromium/ui/message_center/message_center_tray.cc b/chromium/ui/message_center/message_center_tray.cc index 69cdd6e4fa5..9d368b0d430 100644 --- a/chromium/ui/message_center/message_center_tray.cc +++ b/chromium/ui/message_center/message_center_tray.cc @@ -235,6 +235,11 @@ void MessageCenterTray::OnNotificationButtonClicked( OnMessageCenterChanged(); } +void MessageCenterTray::OnNotificationSettingsClicked(bool handled) { + if (!handled) + ShowNotifierSettingsBubble(); +} + void MessageCenterTray::OnNotificationDisplayed( const std::string& notification_id, const DisplaySource source) { diff --git a/chromium/ui/message_center/message_center_tray.h b/chromium/ui/message_center/message_center_tray.h index 166f3f2b664..86d35f745be 100644 --- a/chromium/ui/message_center/message_center_tray.h +++ b/chromium/ui/message_center/message_center_tray.h @@ -77,6 +77,7 @@ class MESSAGE_CENTER_EXPORT MessageCenterTray : public MessageCenterObserver { void OnNotificationClicked(const std::string& notification_id) override; void OnNotificationButtonClicked(const std::string& notification_id, int button_index) override; + void OnNotificationSettingsClicked(bool handled) override; void OnNotificationDisplayed(const std::string& notification_id, const DisplaySource source) override; void OnQuietModeChanged(bool in_quiet_mode) override; diff --git a/chromium/ui/message_center/notification_delegate.cc b/chromium/ui/message_center/notification_delegate.cc index 70675233293..de8b60de442 100644 --- a/chromium/ui/message_center/notification_delegate.cc +++ b/chromium/ui/message_center/notification_delegate.cc @@ -25,7 +25,9 @@ void NotificationDelegate::ButtonClickWithReply(int button_index, NOTIMPLEMENTED(); } -void NotificationDelegate::SettingsClick() {} +bool NotificationDelegate::SettingsClick() { + return false; +} bool NotificationDelegate::ShouldDisplaySettingsButton() { return false; diff --git a/chromium/ui/message_center/notification_delegate.h b/chromium/ui/message_center/notification_delegate.h index b9432fb12bc..a66d3760e69 100644 --- a/chromium/ui/message_center/notification_delegate.h +++ b/chromium/ui/message_center/notification_delegate.h @@ -49,7 +49,8 @@ class MESSAGE_CENTER_EXPORT NotificationDelegate const base::string16& reply); // To be called when the user clicks the settings button in a notification. - virtual void SettingsClick(); + // Returns whether the settings click was handled by the delegate. + virtual bool SettingsClick(); // To be called in order to detect if a settings button should be displayed. virtual bool ShouldDisplaySettingsButton(); diff --git a/chromium/ui/message_center/popup_timer.h b/chromium/ui/message_center/popup_timer.h index 494e360b88b..8137d3d2fe9 100644 --- a/chromium/ui/message_center/popup_timer.h +++ b/chromium/ui/message_center/popup_timer.h @@ -41,6 +41,9 @@ class PopupTimer { // subsequent calls to Start the timer will continue where it left off. void Pause(); + // Returns whether the underlying timer is running or not. + bool IsRunning() { return timer_->IsRunning(); } + private: // Notification ID for which this timer applies. const std::string id_; diff --git a/chromium/ui/message_center/popup_timers_controller.cc b/chromium/ui/message_center/popup_timers_controller.cc index aae50daf81b..a967681d1f0 100644 --- a/chromium/ui/message_center/popup_timers_controller.cc +++ b/chromium/ui/message_center/popup_timers_controller.cc @@ -100,8 +100,20 @@ void PopupTimersController::OnNotificationUpdated(const std::string& id) { return; } + auto timer = popup_timers_.find(id); + // The timer must already have been started and not be running. Relies on + // the invariant that |popup_timers_| only contains timers that have been + // started. + bool was_paused = timer != popup_timers_.end() && !timer->second->IsRunning(); CancelTimer(id); StartTimer(id, GetTimeoutForNotification(*iter)); + + // If a timer was paused before, pause it afterwards as well. + // See crbug.com/710298 + if (was_paused) { + auto timer = popup_timers_.find(id); + timer->second->Pause(); + } } void PopupTimersController::OnNotificationRemoved(const std::string& id, diff --git a/chromium/ui/message_center/views/message_center_view.cc b/chromium/ui/message_center/views/message_center_view.cc index 375d42be82d..defba470f0d 100644 --- a/chromium/ui/message_center/views/message_center_view.cc +++ b/chromium/ui/message_center/views/message_center_view.cc @@ -105,6 +105,7 @@ MessageCenterView::MessageCenterView(MessageCenter* message_center, scroller_->layer()->SetMasksToBounds(true); message_list_view_.reset(new MessageListView()); + message_list_view_->set_scroller(scroller_); message_list_view_->set_owned_by_client(); message_list_view_->AddObserver(this); @@ -176,7 +177,7 @@ void MessageCenterView::ClearAllClosableNotifications() { if (is_closing_) return; - is_clearing_ = true; + is_clearing_all_notifications_ = true; UpdateButtonBarStatus(); SetViewHierarchyEnabled(scroller_, false); message_list_view_->ClearAllClosableNotifications( @@ -184,7 +185,7 @@ void MessageCenterView::ClearAllClosableNotifications() { } void MessageCenterView::OnAllNotificationsCleared() { - is_clearing_ = false; + is_clearing_all_notifications_ = false; SetViewHierarchyEnabled(scroller_, true); button_bar_->SetCloseAllButtonEnabled(false); @@ -395,6 +396,7 @@ bool MessageCenterView::SetRepositionTarget() { if (message_list_view_->IsMouseHovered()) { for (const auto& hover_id_view : notification_views_) { MessageView* hover_view = hover_id_view.second; + if (hover_view->IsMouseHovered()) { message_list_view_->SetRepositionTarget(hover_view->bounds()); return true; @@ -405,6 +407,8 @@ bool MessageCenterView::SetRepositionTarget() { } void MessageCenterView::OnNotificationUpdated(const std::string& id) { + // TODO(edcourtney): We may be able to remove this, since |UpdateNotification| + // checks it anyway. NotificationViewsMap::const_iterator view_iter = notification_views_.find(id); if (view_iter == notification_views_.end()) return; @@ -414,30 +418,7 @@ void MessageCenterView::OnNotificationUpdated(const std::string& id) { if (!SetRepositionTarget()) message_list_view_->ResetRepositionSession(); - // TODO(dimich): add MessageCenter::GetVisibleNotificationById(id) - MessageView* view = view_iter->second; - const NotificationList::Notifications& notifications = - message_center_->GetVisibleNotifications(); - for (NotificationList::Notifications::const_iterator iter = - notifications.begin(); iter != notifications.end(); ++iter) { - if ((*iter)->id() == id) { - int old_width = view->width(); - int old_height = view->height(); - bool old_pinned = view->IsPinned(); - message_list_view_->UpdateNotification(view, **iter); - if (view->GetHeightForWidth(old_width) != old_height) { - Update(true /* animate */); - } else if (view->IsPinned() != old_pinned) { - // Animate flag is false, since the pinned flag transition doesn't need - // animation. - Update(false /* animate */); - } - break; - } - } - - // Notify accessibility that the contents have changed. - view->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false); + UpdateNotification(id); } void MessageCenterView::OnLockedStateChanged(bool locked) { @@ -479,7 +460,14 @@ void MessageCenterView::ClickOnSettingsButton( void MessageCenterView::UpdateNotificationSize( const std::string& notification_id) { - OnNotificationUpdated(notification_id); + // TODO(edcourtney, yoshiki): We don't call OnNotificationUpdated directly + // because it resets the reposition session, which can end up deleting + // notification items when it cancels animations. This causes problems for + // ARC notifications. See crbug.com/714493. OnNotificationUpdated should not + // have to consider the reposition session, but OnMouseEntered and + // OnMouseExited don't work properly for ARC notifications at the moment. + // See crbug.com/714587. + UpdateNotification(notification_id); } void MessageCenterView::AnimationEnded(const gfx::Animation* animation) { @@ -637,7 +625,7 @@ void MessageCenterView::SetVisibilityMode(Mode mode, bool animate) { void MessageCenterView::UpdateButtonBarStatus() { // Disables all buttons during animation of cleaning of all notifications. - if (is_clearing_) { + if (is_clearing_all_notifications_) { button_bar_->SetSettingsAndQuietModeButtonsEnabled(false); button_bar_->SetCloseAllButtonEnabled(false); return; @@ -671,4 +659,38 @@ void MessageCenterView::SetNotificationViewForTest(MessageView* view) { message_list_view_->AddNotificationAt(view, 0); } +void MessageCenterView::UpdateNotification(const std::string& id) { + // TODO(edcourtney, yoshiki): This check seems like it should not be needed. + // Investigate what circumstances (if any) trigger it. + NotificationViewsMap::const_iterator view_iter = notification_views_.find(id); + if (view_iter == notification_views_.end()) + return; + + // TODO(dimich): add MessageCenter::GetVisibleNotificationById(id) + MessageView* view = view_iter->second; + const NotificationList::Notifications& notifications = + message_center_->GetVisibleNotifications(); + for (NotificationList::Notifications::const_iterator iter = + notifications.begin(); + iter != notifications.end(); ++iter) { + if ((*iter)->id() == id) { + int old_width = view->width(); + int old_height = view->height(); + bool old_pinned = view->IsPinned(); + message_list_view_->UpdateNotification(view, **iter); + if (view->GetHeightForWidth(old_width) != old_height) { + Update(true /* animate */); + } else if (view->IsPinned() != old_pinned) { + // Animate flag is false, since the pinned flag transition doesn't need + // animation. + Update(false /* animate */); + } + break; + } + } + + // Notify accessibility that the contents have changed. + view->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false); +} + } // namespace message_center diff --git a/chromium/ui/message_center/views/message_center_view.h b/chromium/ui/message_center/views/message_center_view.h index 60f9d73d8fb..8ff0637968b 100644 --- a/chromium/ui/message_center/views/message_center_view.h +++ b/chromium/ui/message_center/views/message_center_view.h @@ -122,6 +122,7 @@ class MESSAGE_CENTER_EXPORT MessageCenterView void UpdateButtonBarStatus(); void EnableCloseAllIfAppropriate(); void SetNotificationViewForTest(MessageView* view); + void UpdateNotification(const std::string& notification_id); MessageCenter* message_center_; // Weak reference. MessageCenterTray* tray_; // Weak reference. @@ -155,7 +156,7 @@ class MESSAGE_CENTER_EXPORT MessageCenterView // ignored. bool is_closing_; - bool is_clearing_ = false; + bool is_clearing_all_notifications_ = false; bool is_locked_ = false; // Current view mode. During animation, it is the target mode. diff --git a/chromium/ui/message_center/views/message_center_view_unittest.cc b/chromium/ui/message_center/views/message_center_view_unittest.cc index 4f8a0a16942..35d2cfe347b 100644 --- a/chromium/ui/message_center/views/message_center_view_unittest.cc +++ b/chromium/ui/message_center/views/message_center_view_unittest.cc @@ -126,6 +126,8 @@ class MockMessageCenterView : public MessageCenterView { bool SetRepositionTarget() override; + void PreferredSizeChanged() override; + private: DISALLOW_COPY_AND_ASSIGN(MockMessageCenterView); }; @@ -146,6 +148,11 @@ bool MockMessageCenterView::SetRepositionTarget() { return true; } +void MockMessageCenterView::PreferredSizeChanged() { + SetSize(GetPreferredSize()); + MessageCenterView::PreferredSizeChanged(); +} + /* Test fixture ***************************************************************/ class MessageCenterViewTest : public views::ViewsTestBase, @@ -247,9 +254,9 @@ void MessageCenterViewTest::SetUp() { // Then create a new MockMessageCenterView with that single notification. message_center_view_.reset( - new MockMessageCenterView(message_center_.get(), NULL, 100, false)); + new MockMessageCenterView(message_center_.get(), NULL, 600, false)); GetMessageListView()->quit_message_loop_after_animation_for_test_ = true; - GetMessageCenterView()->SetBounds(0, 0, 380, 600); + GetMessageCenterView()->SetBounds(0, 0, 380, 100); message_center_view_->SetNotifications(notifications); message_center_view_->set_owned_by_client(); @@ -560,6 +567,7 @@ TEST_F(MessageCenterViewTest, SizeAfterUpdateOfRepositionTarget) { } TEST_F(MessageCenterViewTest, SizeAfterRemove) { + int original_height = GetMessageListView()->height(); EXPECT_EQ(2, GetMessageListView()->child_count()); RemoveNotification(kNotificationId1, false); @@ -569,13 +577,9 @@ TEST_F(MessageCenterViewTest, SizeAfterRemove) { EXPECT_EQ(1, GetMessageListView()->child_count()); - int width = - GetMessageListView()->width() - GetMessageListView()->GetInsets().width(); EXPECT_FALSE(GetNotificationView(kNotificationId1)); EXPECT_TRUE(GetNotificationView(kNotificationId2)); - EXPECT_EQ(GetMessageListView()->height(), - GetNotificationView(kNotificationId2)->GetHeightForWidth(width) + - GetMessageListView()->GetInsets().height()); + EXPECT_EQ(GetMessageListView()->height(), original_height); } TEST_F(MessageCenterViewTest, PositionAfterUpdate) { @@ -620,8 +624,6 @@ TEST_F(MessageCenterViewTest, PositionAfterRemove) { int previous_height = GetMessageListView()->height(); int previous_notification2_y = GetNotificationView(kNotificationId2)->bounds().y(); - int previous_notification2_height = - GetNotificationView(kNotificationId2)->bounds().height(); EXPECT_EQ(2, GetMessageListView()->child_count()); RemoveNotification(kNotificationId2, false); @@ -647,10 +649,8 @@ TEST_F(MessageCenterViewTest, PositionAfterRemove) { // target in the message list. FireOnMouseExitedEvent(); - // The height should shrink from the height of the removed notification 2. - EXPECT_EQ(previous_height - previous_notification2_height - - (kMarginBetweenItems - MessageView::GetShadowInsets().bottom()), - GetMessageListView()->height()); + // The height should be kept even after the cursor moved out. + EXPECT_EQ(previous_height, GetMessageListView()->height()); } TEST_F(MessageCenterViewTest, CloseButton) { diff --git a/chromium/ui/message_center/views/message_list_view.cc b/chromium/ui/message_center/views/message_list_view.cc index 92d5d7fd7ed..06cce39c28a 100644 --- a/chromium/ui/message_center/views/message_list_view.cc +++ b/chromium/ui/message_center/views/message_list_view.cc @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <algorithm> + #include "base/command_line.h" #include "base/location.h" #include "base/single_thread_task_runner.h" @@ -100,6 +102,20 @@ void MessageListView::AddNotificationAt(MessageView* view, int index) { void MessageListView::RemoveNotification(MessageView* view) { DCHECK_EQ(view->parent(), this); + // TODO(yhananda): We should consider consolidating clearing_all_views_, + // deleting_views_ and deleted_when_done_. + if (std::find(clearing_all_views_.begin(), clearing_all_views_.end(), view) != + clearing_all_views_.end() || + deleting_views_.find(view) != deleting_views_.end() || + deleted_when_done_.find(view) != deleted_when_done_.end()) { + // Let's skip deleting the view if it's already scheduled for deleting. + // Even if we check clearing_all_views_ here, we actualy have no idea + // whether the view is due to be removed or not because it could be in its + // animation before removal. + // In short, we could delete the view twice even if we check these three + // lists. + return; + } if (GetContentsBounds().IsEmpty()) { delete view; @@ -120,6 +136,11 @@ void MessageListView::RemoveNotification(MessageView* view) { void MessageListView::UpdateNotification(MessageView* view, const Notification& notification) { + // Skip updating the notification being cleared + if (std::find(clearing_all_views_.begin(), clearing_all_views_.end(), view) != + clearing_all_views_.end()) + return; + int index = GetIndexOf(view); DCHECK_LE(0, index); // GetIndexOf is negative if not a child. @@ -175,9 +196,41 @@ void MessageListView::ReorderChildLayers(ui::Layer* parent_layer) { } } +void MessageListView::UpdateFixedHeight(int requested_height, + bool prevent_scroll) { + int previous_fixed_height = fixed_height_; + int min_height; + + // When the |prevent_scroll| flag is set, we use |fixed_height_|, which is the + // bottom position of the visible rect. It's to keep the current visible + // window, in other words, not to be scrolled, when the visible rect has a + // blank area at the bottom. + // Otherwise (in else block), we use the height of the visible rect to make + // the height of the message list as small as possible. + if (prevent_scroll) { + // TODO(yoshiki): Consider the case with scrolling. If the message center + // has scrollbar and its height is maximum, we may not need to keep the + // height of the list in the scroll view. + min_height = fixed_height_; + } else { + if (scroller_) { + gfx::Rect visible_rect = scroller_->GetVisibleRect(); + min_height = visible_rect.height(); + } else { + // Fallback for testing. + min_height = fixed_height_; + } + } + fixed_height_ = std::max(min_height, requested_height); + + if (previous_fixed_height != fixed_height_) { + PreferredSizeChanged(); + } +} + void MessageListView::SetRepositionTarget(const gfx::Rect& target) { reposition_top_ = std::max(target.y(), 0); - fixed_height_ = GetHeightForWidth(width()); + UpdateFixedHeight(GetHeightForWidth(width()), false); } void MessageListView::ResetRepositionSession() { @@ -195,7 +248,8 @@ void MessageListView::ResetRepositionSession() { } reposition_top_ = -1; - fixed_height_ = 0; + + UpdateFixedHeight(fixed_height_, false); } void MessageListView::ClearAllClosableNotifications( @@ -209,6 +263,15 @@ void MessageListView::ClearAllClosableNotifications( continue; if (child->IsPinned()) continue; + if (deleting_views_.find(child) != deleting_views_.end() || + deleted_when_done_.find(child) != deleted_when_done_.end()) { + // We don't check clearing_all_views_ here, so this can lead to a + // notification being deleted twice. Even if we do check it, there is a + // problem similar to the problem in RemoveNotification(), it could be + // currently in its animation before removal, and we could similarly + // delete it twice. This is a bug. + continue; + } clearing_all_views_.push_back(child); } if (clearing_all_views_.empty()) { @@ -265,7 +328,9 @@ bool MessageListView::IsValidChild(const views::View* child) const { deleting_views_.find(const_cast<views::View*>(child)) == deleting_views_.end() && deleted_when_done_.find(const_cast<views::View*>(child)) == - deleted_when_done_.end(); + deleted_when_done_.end() && + std::find(clearing_all_views_.begin(), clearing_all_views_.end(), + child) == clearing_all_views_.end(); } void MessageListView::DoUpdateIfPossible() { @@ -279,7 +344,8 @@ void MessageListView::DoUpdateIfPossible() { } if (!clearing_all_views_.empty()) { - AnimateClearingOneNotification(); + if (!clear_all_started_) + AnimateClearingOneNotification(); return; } @@ -290,7 +356,7 @@ void MessageListView::DoUpdateIfPossible() { switches::kEnableMessageCenterAlwaysScrollUpUponNotificationRemoval)) AnimateNotificationsBelowTarget(); else - AnimateNotificationsAboveTarget(); + AnimateNotifications(); adding_views_.clear(); deleting_views_.clear(); @@ -299,6 +365,7 @@ void MessageListView::DoUpdateIfPossible() { GetWidget()->SynthesizeMouseMoveEvent(); } +// TODO(yoshiki): Remove this method. It is no longer maintained. void MessageListView::AnimateNotificationsBelowTarget() { int target_index = -1; int padding = kMarginBetweenItems - MessageView::GetShadowInsets().bottom(); @@ -362,11 +429,17 @@ std::vector<int> MessageListView::ComputeRepositionOffsets( vertical_gap_to_target_from_top += heights[i] + padding; } - // If the calculated length is changed from |repositon_top_|, it means that - // some of items above the target are updated and their height are changed. + // If the calculated length is expanded from |repositon_top_|, it means that + // some of items above the target are updated and their height increased. // Adjust the vertical length above the target. - fixed_height_ -= reposition_top_ - vertical_gap_to_target_from_top; - reposition_top_ = vertical_gap_to_target_from_top; + if (vertical_gap_to_target_from_top > reposition_top_) { + fixed_height_ += vertical_gap_to_target_from_top - reposition_top_; + reposition_top_ = vertical_gap_to_target_from_top; + } + + // TODO(yoshiki): Scroll the parent container to keep the physical position + // of the target notification when the scrolling is caused by a size change + // of notification above. std::vector<int> positions; positions.reserve(heights.size()); @@ -377,7 +450,8 @@ std::vector<int> MessageListView::ComputeRepositionOffsets( if (!deleting[i]) y += heights[i] + padding; } - DCHECK_EQ(y, reposition_top_); + DCHECK_EQ(y, vertical_gap_to_target_from_top); + DCHECK_LE(y, reposition_top_); // Match the top with |reposition_top_|. y = reposition_top_; @@ -387,15 +461,18 @@ std::vector<int> MessageListView::ComputeRepositionOffsets( if (!deleting[i]) y += heights[i] + padding; } - // If the target view, or any views below it expand they might exceed - // |fixed_height_|. Rather than letting them push out the bottom and be - // clipped, instead increase |fixed_height_|. - fixed_height_ = std::max(fixed_height_, y - padding + GetInsets().bottom()); + + // Update the fixed height. |requested_height| is the height to have all + // notifications in the list and to keep the vertical position of the target + // notification. It may not just a total of all the notification heights if + // the target exists. + int requested_height = y - padding + GetInsets().bottom(); + UpdateFixedHeight(requested_height, true); return positions; } -void MessageListView::AnimateNotificationsAboveTarget() { +void MessageListView::AnimateNotifications() { int target_index = -1; int padding = kMarginBetweenItems - MessageView::GetShadowInsets().bottom(); gfx::Rect child_area = GetContentsBounds(); @@ -410,15 +487,6 @@ void MessageListView::AnimateNotificationsAboveTarget() { break; } } - // If no items are below |reposition_top_|, use the last item as the target. - if (target_index == -1) { - target_index = child_count() - 1; - for (; target_index != -1; target_index--) { - views::View* target_view = child_at(target_index); - if (deleting_views_.find(target_view) == deleting_views_.end()) - break; - } - } } if (target_index != -1) { @@ -434,7 +502,9 @@ void MessageListView::AnimateNotificationsAboveTarget() { std::vector<int> ys = ComputeRepositionOffsets(heights, deleting, target_index, padding); for (int i = 0; i < child_count(); ++i) { - AnimateChild(child_at(i), ys[i], heights[i], true /* animate_on_move */); + bool above_target = (i < target_index); + AnimateChild(child_at(i), ys[i], heights[i], + !above_target /* animate_on_move */); } } else { // Layout all the items. @@ -445,7 +515,8 @@ void MessageListView::AnimateNotificationsAboveTarget() { if (AnimateChild(child, y, height, true)) y += height + padding; } - fixed_height_ = y - padding + GetInsets().bottom(); + int new_height = y - padding + GetInsets().bottom(); + UpdateFixedHeight(new_height, false); } } diff --git a/chromium/ui/message_center/views/message_list_view.h b/chromium/ui/message_center/views/message_list_view.h index 1104b47cfeb..843991e8573 100644 --- a/chromium/ui/message_center/views/message_list_view.h +++ b/chromium/ui/message_center/views/message_list_view.h @@ -17,6 +17,7 @@ #include "ui/message_center/notification.h" #include "ui/views/animation/bounds_animator.h" #include "ui/views/animation/bounds_animator_observer.h" +#include "ui/views/controls/scroll_view.h" #include "ui/views/view.h" namespace ui { @@ -55,6 +56,8 @@ class MESSAGE_CENTER_EXPORT MessageListView void SetRepositionTargetForTest( const gfx::Rect& target_rect); + void set_scroller(views::ScrollView* scroller) { scroller_ = scroller; } + protected: // Overridden from views::View. void Layout() override; @@ -77,9 +80,9 @@ class MESSAGE_CENTER_EXPORT MessageListView // Animates all notifications below target upwards to align with the top of // the last closed notification. void AnimateNotificationsBelowTarget(); - // Animates all notifications above target downwards to align with the top of - // the last closed notification. - void AnimateNotificationsAboveTarget(); + // Animates all notifications to align with the top of the last closed + // notification. + void AnimateNotifications(); // Computes reposition offsets for |AnimateNotificationsAboveTarget|. std::vector<int> ComputeRepositionOffsets(const std::vector<int>& heights, const std::vector<bool>& deleting, @@ -93,6 +96,10 @@ class MESSAGE_CENTER_EXPORT MessageListView int height, bool animate_even_on_move); + // Calculate the new fixed height and update with it. |requested_height| + // is the minimum height, and actual fixed height should be more than it. + void UpdateFixedHeight(int requested_height, bool prevent_scroll); + // Animate clearing one notification. void AnimateClearingOneNotification(); @@ -110,6 +117,8 @@ class MESSAGE_CENTER_EXPORT MessageListView std::list<views::View*> clearing_all_views_; views::BoundsAnimator animator_; + views::ScrollView* scroller_ = nullptr; + // If true, the message loop will be quitted after the animation finishes. // This is just for tests and has no setter. bool quit_message_loop_after_animation_for_test_; diff --git a/chromium/ui/message_center/views/message_list_view_unittest.cc b/chromium/ui/message_center/views/message_list_view_unittest.cc index dd534b22a07..d6054ef3a65 100644 --- a/chromium/ui/message_center/views/message_list_view_unittest.cc +++ b/chromium/ui/message_center/views/message_list_view_unittest.cc @@ -220,148 +220,148 @@ TEST_F(MessageListViewTest, RepositionOffsets) { EXPECT_EQ(4 + insets.height() + 1, fixed_height()); EXPECT_EQ(1 + top + 1, reposition_top()); - // Notification above shrinks. |reposition_top| should remain at the same - // offset from the bottom. + // Notification above shrinks. The message center keeps its height. + // All notifications should remain at the same position from the top. fixed_height() = 5 + insets.height(); reposition_top() = 2 + top; positions = ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); - EXPECT_EQ(4 + insets.height(), fixed_height()); - EXPECT_EQ(1 + top, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4)); + EXPECT_EQ(5 + insets.height(), fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Notification above is being deleted. |reposition_top| should remain at the - // same offset from the bottom. - fixed_height() = 4 + insets.height(); - reposition_top() = 1 + top; + // same place. + fixed_height() = 5 + insets.height(); + reposition_top() = 2 + top; positions = ComputeRepositionOffsets({1, 1, 1, 1}, {true, false, false, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top, top + 1, top + 2)); - EXPECT_EQ(4 + insets.height() - 1, fixed_height()); - EXPECT_EQ(1 + top - 1, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4)); + EXPECT_EQ(5 + insets.height(), fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Notification above is inserted. |reposition_top| should remain at the // same offset from the bottom. - fixed_height() = 3 + insets.height(); - reposition_top() = top; + fixed_height() = 5 + insets.height(); + reposition_top() = 2 + top; positions = ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); - EXPECT_EQ(3 + insets.height() + 1, fixed_height()); - EXPECT_EQ(top + 1, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4)); + EXPECT_EQ(5 + insets.height(), fixed_height()); + EXPECT_EQ(top + 2, reposition_top()); // Target notification grows with no free space. |reposition_top| is forced to // change its offset from the bottom. - fixed_height() = 4 + insets.height(); - reposition_top() = 1 + top; + fixed_height() = 5 + insets.height(); + reposition_top() = 2 + top; positions = ComputeRepositionOffsets({1, 2, 1, 1}, {false, false, false, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 3, top + 4)); - EXPECT_EQ(4 + insets.height() + 1, fixed_height()); - EXPECT_EQ(1 + top, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 4, top + 5)); + EXPECT_EQ(5 + insets.height() + 1, fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Target notification grows with free space. |reposition_top| should remain // at the same offset from the bottom. - fixed_height() = 5 + insets.height(); - reposition_top() = 1 + top; + fixed_height() = 6 + insets.height(); + reposition_top() = 2 + top; positions = ComputeRepositionOffsets({1, 2, 1, 1}, {false, false, false, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 3, top + 4)); - EXPECT_EQ(5 + insets.height(), fixed_height()); - EXPECT_EQ(1 + top, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 4, top + 5)); + EXPECT_EQ(6 + insets.height(), fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Target notification grows with not enough free space. |reposition_top| // should change its offset as little as possible, and consume the free space. - fixed_height() = 5 + insets.height(); - reposition_top() = 1 + top; + fixed_height() = 6 + insets.height(); + reposition_top() = 2 + top; positions = ComputeRepositionOffsets({1, 3, 1, 1}, {false, false, false, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 4, top + 5)); - EXPECT_EQ(5 + insets.height() + 1, fixed_height()); - EXPECT_EQ(1 + top, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 5, top + 6)); + EXPECT_EQ(6 + insets.height() + 1, fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Target notification shrinks. |reposition_top| should remain at the // same offset from the bottom. - fixed_height() = 5 + insets.height(); - reposition_top() = 1 + top; + fixed_height() = 7 + insets.height(); + reposition_top() = 2 + top; positions = ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); - EXPECT_EQ(5 + insets.height(), fixed_height()); - EXPECT_EQ(1 + top, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4)); + EXPECT_EQ(7 + insets.height(), fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Notification below grows with no free space. |reposition_top| is forced to // change its offset from the bottom. - fixed_height() = 4 + insets.height(); - reposition_top() = 1 + top; + fixed_height() = 7 + insets.height(); + reposition_top() = 2 + top; positions = - ComputeRepositionOffsets({1, 1, 2, 1}, {false, false, false, false}, + ComputeRepositionOffsets({1, 1, 4, 1}, {false, false, false, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 4)); - EXPECT_EQ(4 + insets.height() + 1, fixed_height()); - EXPECT_EQ(1 + top, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 7)); + EXPECT_EQ(7 + insets.height() + 1, fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Notification below grows with free space. |reposition_top| should remain // at the same offset from the bottom. - fixed_height() = 5 + insets.height(); - reposition_top() = 1 + top; + fixed_height() = 8 + insets.height(); + reposition_top() = 2 + top; positions = ComputeRepositionOffsets({1, 1, 2, 1}, {false, false, false, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 4)); - EXPECT_EQ(5 + insets.height(), fixed_height()); - EXPECT_EQ(1 + top, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 5)); + EXPECT_EQ(8 + insets.height(), fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Notification below shrinks. |reposition_top| should remain at the same // offset from the bottom. - fixed_height() = 5 + insets.height(); - reposition_top() = 1 + top; + fixed_height() = 8 + insets.height(); + reposition_top() = 2 + top; positions = ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); - EXPECT_EQ(5 + insets.height(), fixed_height()); - EXPECT_EQ(1 + top, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4)); + EXPECT_EQ(8 + insets.height(), fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Notification below is being deleted. |reposition_top| should remain at the // same offset from the bottom. - fixed_height() = 4 + insets.height(); - reposition_top() = 1 + top; + fixed_height() = 8 + insets.height(); + reposition_top() = 2 + top; positions = ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, true, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 2)); - EXPECT_EQ(4 + insets.height(), fixed_height()); - EXPECT_EQ(1 + top, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 3)); + EXPECT_EQ(8 + insets.height(), fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Notification below is inserted with free space. |reposition_top| should // remain at the same offset from the bottom. - fixed_height() = 4 + insets.height(); - reposition_top() = 1 + top; + fixed_height() = 8 + insets.height(); + reposition_top() = 2 + top; positions = ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); - EXPECT_EQ(4 + insets.height(), fixed_height()); - EXPECT_EQ(1 + top, reposition_top()); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4)); + EXPECT_EQ(8 + insets.height(), fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Notification below is inserted with no free space. |reposition_top| is // forced to change its offset from the bottom. - fixed_height() = 3 + insets.height(); - reposition_top() = 1 + top; - positions = - ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, - 1 /* target_index */, 0 /* padding */); - EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); - EXPECT_EQ(3 + insets.height() + 1, fixed_height()); - EXPECT_EQ(1 + top, reposition_top()); + fixed_height() = 8 + insets.height(); + reposition_top() = 2 + top; + positions = ComputeRepositionOffsets({1, 1, 1, 4, 1}, + {false, false, false, false, false}, + 1 /* target_index */, 0 /* padding */); + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4, top + 8)); + EXPECT_EQ(8 + insets.height() + 1, fixed_height()); + EXPECT_EQ(2 + top, reposition_top()); // Test padding. fixed_height() = 20 + insets.height(); diff --git a/chromium/ui/message_center/views/message_popup_collection.cc b/chromium/ui/message_center/views/message_popup_collection.cc index c9556d3d712..0a2afc4caa5 100644 --- a/chromium/ui/message_center/views/message_popup_collection.cc +++ b/chromium/ui/message_center/views/message_popup_collection.cc @@ -138,6 +138,26 @@ void MessagePopupCollection::MarkAllPopupsShown() { } } +void MessagePopupCollection::PausePopupTimers() { + DCHECK(timer_pause_counter_ >= 0); + if (timer_pause_counter_ <= 0) { + message_center_->PausePopupTimers(); + timer_pause_counter_ = 1; + } else { + timer_pause_counter_++; + } +} + +void MessagePopupCollection::RestartPopupTimers() { + DCHECK(timer_pause_counter_ >= 1); + if (timer_pause_counter_ <= 1) { + message_center_->RestartPopupTimers(); + timer_pause_counter_ = 0; + } else { + timer_pause_counter_--; + } +} + void MessagePopupCollection::UpdateWidgets() { if (message_center_->IsMessageCenterVisible()) { DCHECK_EQ(0u, message_center_->GetPopupNotifications().size()); @@ -229,7 +249,7 @@ void MessagePopupCollection::OnMouseEntered(ToastContentsView* toast_entered) { // toasts. So we need to keep track of which one is the currently active one. latest_toast_entered_ = toast_entered; - message_center_->PausePopupTimers(); + PausePopupTimers(); if (user_is_closing_toasts_by_clicking_) defer_timer_->Stop(); @@ -249,7 +269,7 @@ void MessagePopupCollection::OnMouseExited(ToastContentsView* toast_exited) { this, &MessagePopupCollection::OnDeferTimerExpired); } else { - message_center_->RestartPopupTimers(); + RestartPopupTimers(); } } @@ -412,7 +432,7 @@ void MessagePopupCollection::OnDeferTimerExpired() { user_is_closing_toasts_by_clicking_ = false; DecrementDeferCounter(); - message_center_->RestartPopupTimers(); + RestartPopupTimers(); } void MessagePopupCollection::OnNotificationUpdated( diff --git a/chromium/ui/message_center/views/message_popup_collection.h b/chromium/ui/message_center/views/message_popup_collection.h index fa0068dec84..eff6cc5981a 100644 --- a/chromium/ui/message_center/views/message_popup_collection.h +++ b/chromium/ui/message_center/views/message_popup_collection.h @@ -72,6 +72,11 @@ class MESSAGE_CENTER_EXPORT MessagePopupCollection void MarkAllPopupsShown(); + // Inclement the timer counter, and pause the popup timer if necessary. + void PausePopupTimers(); + // Declement the timer counter, and restart the popup timer if necessary. + void RestartPopupTimers(); + // Since these events are really coming from individual toast widgets, // it helps to be able to keep track of the sender. void OnMouseEntered(ToastContentsView* toast_entered); @@ -165,6 +170,10 @@ class MESSAGE_CENTER_EXPORT MessagePopupCollection // Only to be used when user_is_closing_toasts_by_clicking_ is true. int target_top_edge_; + // This is the number of pause request for timer. If it's more than zero, the + // timer is paused. If zero, the timer is not paused. + int timer_pause_counter_ = 0; + // Weak, only exists temporarily in tests. std::unique_ptr<base::RunLoop> run_loop_for_test_; diff --git a/chromium/ui/message_center/views/padded_button.cc b/chromium/ui/message_center/views/padded_button.cc index 4c73a90f41f..08e3e6f1620 100644 --- a/chromium/ui/message_center/views/padded_button.cc +++ b/chromium/ui/message_center/views/padded_button.cc @@ -22,8 +22,8 @@ PaddedButton::PaddedButton(views::ButtonListener* listener) SetFocusPainter(views::Painter::CreateSolidFocusPainter( kFocusBorderColor, gfx::Insets(1, 2, 2, 2))); - set_background(views::Background::CreateSolidBackground( - SkColorSetA(SK_ColorWHITE, 0.9 * 0xff))); + set_background( + views::Background::CreateSolidBackground(kControlButtonBackgroundColor)); SetBorder(views::CreateEmptyBorder(gfx::Insets(kControlButtonBorderSize))); set_animate_on_state_change(false); diff --git a/chromium/ui/message_center/views/toast_contents_view.cc b/chromium/ui/message_center/views/toast_contents_view.cc index 44dfcf410fe..64e9d91ddeb 100644 --- a/chromium/ui/message_center/views/toast_contents_view.cc +++ b/chromium/ui/message_center/views/toast_contents_view.cc @@ -278,6 +278,14 @@ void ToastContentsView::OnWorkAreaChanged() { Screen::GetScreen()->GetDisplayNearestWindow(native_view)); } +void ToastContentsView::OnWidgetActivationChanged(views::Widget* widget, + bool active) { + if (active) + collection_->PausePopupTimers(); + else + collection_->RestartPopupTimers(); +} + // views::View void ToastContentsView::OnMouseEntered(const ui::MouseEvent& event) { if (collection_) @@ -389,6 +397,7 @@ void ToastContentsView::CreateWidget( views::Widget* widget = new views::Widget(); alignment_delegate->ConfigureWidgetInitParamsForContainer(widget, ¶ms); widget->set_focus_on_creation(false); + widget->AddObserver(this); #if defined(OS_WIN) // We want to ensure that this toast always goes to the native desktop, diff --git a/chromium/ui/message_center/views/toast_contents_view.h b/chromium/ui/message_center/views/toast_contents_view.h index 77a4def3513..1161a0b0534 100644 --- a/chromium/ui/message_center/views/toast_contents_view.h +++ b/chromium/ui/message_center/views/toast_contents_view.h @@ -15,6 +15,7 @@ #include "ui/message_center/message_center_export.h" #include "ui/message_center/views/message_center_controller.h" #include "ui/views/widget/widget_delegate.h" +#include "ui/views/widget/widget_observer.h" namespace gfx { class Animation; @@ -42,6 +43,7 @@ class PopupAlignmentDelegate; // widget/views are closed/destructed. class MESSAGE_CENTER_EXPORT ToastContentsView : public views::WidgetDelegateView, + public views::WidgetObserver, public MessageCenterController, public gfx::AnimationDelegate { public: @@ -117,6 +119,9 @@ class MESSAGE_CENTER_EXPORT ToastContentsView void OnDisplayChanged() override; void OnWorkAreaChanged() override; + // Overridden from views::WidgetObserver: + void OnWidgetActivationChanged(views::Widget* widget, bool active) override; + // Recalculates preferred size from underlying view and notifies about it. void UpdatePreferredSize(); diff --git a/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc b/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc index 09e9b425728..0c72261ccd7 100644 --- a/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc +++ b/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc @@ -45,6 +45,19 @@ void FillModesetBuffer(const scoped_refptr<DrmDevice>& drm, return; } + uint32_t fourcc_format = buffer->GetFramebufferPixelFormat(); + const auto& modifiers = controller->GetFormatModifiers(fourcc_format); + for (const uint64_t modifier : modifiers) { + // A value of 0 means DRM_FORMAT_MOD_NONE. If the CRTC has any other + // modifier (tiling, compression, etc.) we can't read the fb and assume it's + // a linear buffer. + if (modifier) { + VLOG(2) << "Crtc has a modifier and we might not know how to interpret " + "the fb."; + return; + } + } + // If the display controller is in mirror mode, the CRTCs should be sharing // the same framebuffer. DrmConsoleBuffer saved_buffer(drm, saved_crtc->buffer_id); diff --git a/chromium/ui/strings/translations/ui_strings_ca.xtb b/chromium/ui/strings/translations/ui_strings_ca.xtb index 72931684a3a..efa1370baad 100644 --- a/chromium/ui/strings/translations/ui_strings_ca.xtb +++ b/chromium/ui/strings/translations/ui_strings_ca.xtb @@ -86,7 +86,7 @@ <translation id="6364916375976753737">Desplaçament a l'esquerra</translation> <translation id="6394627529324717982">Coma</translation> <translation id="6404817160109697034">{SECONDS,plural, =1{fa 1 s}other{fa # s}}</translation> -<translation id="6528179044667508675">No molesteu</translation> +<translation id="6528179044667508675">No molestis</translation> <translation id="6612467943526193239">Prem Esc per sortir del calibratge.</translation> <translation id="6620110761915583480">Desa el fitxer</translation> <translation id="6699343763173986273">Fitxer multimèdia: pista següent</translation> @@ -112,7 +112,7 @@ <translation id="7658239707568436148">Cancel·la</translation> <translation id="7781829728241885113">Ahir</translation> <translation id="7814458197256864873">&Copia</translation> -<translation id="7850320739366109486">No molesteu</translation> +<translation id="7850320739366109486">No molestis</translation> <translation id="7907591526440419938">Obre un fitxer</translation> <translation id="8106081041558092062">{HOURS,plural, =1{fa 1 hora}other{fa # hores}}</translation> <translation id="8131263257437993507">{SECONDS,plural, =1{1 s restant}other{# s restants}}</translation> diff --git a/chromium/ui/views/bubble/bubble_frame_view.cc b/chromium/ui/views/bubble/bubble_frame_view.cc index 14f5622aba1..58b79913675 100644 --- a/chromium/ui/views/bubble/bubble_frame_view.cc +++ b/chromium/ui/views/bubble/bubble_frame_view.cc @@ -259,7 +259,8 @@ gfx::Insets BubbleFrameView::GetInsets() const { const int title_height = std::max(icon_height, label_height) + title_padding; const int close_height = GetWidget()->widget_delegate()->ShouldShowCloseButton() - ? close_->height() + ? close_->height() + + ViewsDelegate::GetInstance()->GetDialogCloseButtonMargin() : 0; insets += gfx::Insets(std::max(title_height, close_height), 0, 0, 0); return insets; diff --git a/chromium/ui/views/bubble/bubble_frame_view_unittest.cc b/chromium/ui/views/bubble/bubble_frame_view_unittest.cc index bf955dd451c..3474899d99a 100644 --- a/chromium/ui/views/bubble/bubble_frame_view_unittest.cc +++ b/chromium/ui/views/bubble/bubble_frame_view_unittest.cc @@ -145,12 +145,12 @@ TEST_F(BubbleFrameViewTest, GetBoundsForClientViewWithClose) { EXPECT_EQ(kArrow, frame.bubble_border()->arrow()); EXPECT_EQ(kColor, frame.bubble_border()->background_color()); - int margin_x = frame.content_margins().left(); - int margin_y = frame.content_margins().top() + - frame.GetCloseButtonForTest()->height(); - gfx::Insets insets = frame.bubble_border()->GetInsets(); - EXPECT_EQ(insets.left() + margin_x, frame.GetBoundsForClientView().x()); - EXPECT_EQ(insets.top() + margin_y, frame.GetBoundsForClientView().y()); + gfx::Insets frame_insets = frame.GetInsets(); + gfx::Insets border_insets = frame.bubble_border()->GetInsets(); + EXPECT_EQ(border_insets.left() + frame_insets.left(), + frame.GetBoundsForClientView().x()); + EXPECT_EQ(border_insets.top() + frame_insets.top(), + frame.GetBoundsForClientView().y()); } // Tests that the arrow is mirrored as needed to better fit the screen. diff --git a/chromium/ui/views/controls/native/native_view_host.cc b/chromium/ui/views/controls/native/native_view_host.cc index 452e5966b48..34f4af7f94c 100644 --- a/chromium/ui/views/controls/native/native_view_host.cc +++ b/chromium/ui/views/controls/native/native_view_host.cc @@ -167,7 +167,8 @@ const char* NativeViewHost::GetClassName() const { } void NativeViewHost::OnFocus() { - native_wrapper_->SetFocus(); + if (native_view_) + native_wrapper_->SetFocus(); NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, true); } diff --git a/chromium/ui/views/window/dialog_delegate_unittest.cc b/chromium/ui/views/window/dialog_delegate_unittest.cc index d11cfddde8f..ff365d4f98b 100644 --- a/chromium/ui/views/window/dialog_delegate_unittest.cc +++ b/chromium/ui/views/window/dialog_delegate_unittest.cc @@ -28,15 +28,7 @@ namespace { class TestDialog : public DialogDelegateView { public: - TestDialog() - : input_(new views::Textfield()), - canceled_(false), - accepted_(false), - closed_(false), - closeable_(false), - should_handle_escape_(false) { - AddChildView(input_); - } + TestDialog() : input_(new views::Textfield()) { AddChildView(input_); } ~TestDialog() override {} void Init() { @@ -51,6 +43,7 @@ class TestDialog : public DialogDelegateView { bool ShouldShowWindowTitle() const override { return !title_.empty(); } + bool ShouldShowCloseButton() const override { return show_close_button_; } // DialogDelegateView overrides: bool Cancel() override { @@ -66,7 +59,6 @@ class TestDialog : public DialogDelegateView { return closeable_; } - // DialogDelegateView overrides: gfx::Size GetPreferredSize() const override { return gfx::Size(200, 200); } bool AcceleratorPressed(const ui::Accelerator& accelerator) override { return should_handle_escape_; @@ -92,6 +84,9 @@ class TestDialog : public DialogDelegateView { } void set_title(const base::string16& title) { title_ = title; } + void set_show_close_button(bool show_close) { + show_close_button_ = show_close; + } void set_should_handle_escape(bool should_handle_escape) { should_handle_escape_ = should_handle_escape; } @@ -100,13 +95,14 @@ class TestDialog : public DialogDelegateView { private: views::Textfield* input_; - bool canceled_; - bool accepted_; - bool closed_; + bool canceled_ = false; + bool accepted_ = false; + bool closed_ = false; // Prevent the dialog from closing, for repeated ok and cancel button clicks. - bool closeable_; + bool closeable_ = false; base::string16 title_; - bool should_handle_escape_; + bool show_close_button_ = true; + bool should_handle_escape_ = false; DISALLOW_COPY_AND_ASSIGN(TestDialog); }; @@ -118,9 +114,8 @@ class DialogTest : public ViewsTestBase { void SetUp() override { ViewsTestBase::SetUp(); - dialog_ = new TestDialog(); - dialog_->Init(); - DialogDelegate::CreateDialogWidget(dialog_, GetContext(), nullptr)->Show(); + InitializeDialog(); + ShowDialog(); } void TearDown() override { @@ -128,6 +123,18 @@ class DialogTest : public ViewsTestBase { ViewsTestBase::TearDown(); } + void InitializeDialog() { + if (dialog_) + dialog_->TearDown(); + + dialog_ = new TestDialog(); + dialog_->Init(); + } + + void ShowDialog() { + DialogDelegate::CreateDialogWidget(dialog_, GetContext(), nullptr)->Show(); + } + void SimulateKeyEvent(const ui::KeyEvent& event) { ui::KeyEvent event_copy = event; if (dialog()->GetFocusManager()->OnKeyEvent(event_copy)) @@ -208,12 +215,38 @@ TEST_F(DialogTest, HitTest_HiddenTitle) { const int point; const int hit; } cases[] = { - { border, HTSYSMENU }, - { border + 10, HTSYSMENU }, - { border + 20, HTCLIENT }, - { border + 50, HTCLIENT }, - { border + 60, HTCLIENT }, - { 1000, HTNOWHERE }, + {border, HTSYSMENU}, + {border + 10, HTSYSMENU}, + {border + 20, HTNOWHERE}, + {border + 50, HTCLIENT /* Space is reserved for the close button. */}, + {border + 60, HTCLIENT}, + {1000, HTNOWHERE}, + }; + + for (size_t i = 0; i < arraysize(cases); ++i) { + gfx::Point point(cases[i].point, cases[i].point); + EXPECT_EQ(cases[i].hit, frame->NonClientHitTest(point)) + << " case " << i << " with border: " << border << ", at point " + << cases[i].point; + } +} + +TEST_F(DialogTest, HitTest_HiddenTitleNoCloseButton) { + InitializeDialog(); + dialog()->set_show_close_button(false); + ShowDialog(); + + const NonClientView* view = dialog()->GetWidget()->non_client_view(); + BubbleFrameView* frame = static_cast<BubbleFrameView*>(view->frame_view()); + const int border = frame->bubble_border()->GetBorderThickness(); + + struct { + const int point; + const int hit; + } cases[] = { + {border, HTSYSMENU}, {border + 10, HTSYSMENU}, + {border + 20, HTCLIENT}, {border + 50, HTCLIENT}, + {border + 60, HTCLIENT}, {1000, HTNOWHERE}, }; for (size_t i = 0; i < arraysize(cases); ++i) { diff --git a/chromium/v8/gypfiles/toolchain.gypi b/chromium/v8/gypfiles/toolchain.gypi index 9c8f4a29012..88afb8612e4 100644 --- a/chromium/v8/gypfiles/toolchain.gypi +++ b/chromium/v8/gypfiles/toolchain.gypi @@ -991,8 +991,6 @@ # present in VS 2003 and earlier. 'msvs_disabled_warnings': [4351], 'msvs_configuration_attributes': { - 'OutputDirectory': '<(DEPTH)\\build\\$(ConfigurationName)', - 'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)', 'CharacterSet': '1', }, }], diff --git a/chromium/v8/include/v8-version.h b/chromium/v8/include/v8-version.h index f61c13da07e..2cc9821769a 100644 --- a/chromium/v8/include/v8-version.h +++ b/chromium/v8/include/v8-version.h @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 5 #define V8_MINOR_VERSION 8 #define V8_BUILD_NUMBER 283 -#define V8_PATCH_LEVEL 24 +#define V8_PATCH_LEVEL 38 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/chromium/v8/src/arm/code-stubs-arm.cc b/chromium/v8/src/arm/code-stubs-arm.cc index 80ef3224b91..67d661e0e82 100644 --- a/chromium/v8/src/arm/code-stubs-arm.cc +++ b/chromium/v8/src/arm/code-stubs-arm.cc @@ -2655,6 +2655,7 @@ void StubFailureTrampolineStub::Generate(MacroAssembler* masm) { void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { if (masm->isolate()->function_entry_hook() != NULL) { ProfileEntryHookStub stub(masm->isolate()); + masm->MaybeCheckConstPool(); PredictableCodeSizeScope predictable(masm); predictable.ExpectSize(masm->CallStubSize(&stub) + 2 * Assembler::kInstrSize); diff --git a/chromium/v8/src/arm/macro-assembler-arm.cc b/chromium/v8/src/arm/macro-assembler-arm.cc index e6323e4ce74..9d036607f79 100644 --- a/chromium/v8/src/arm/macro-assembler-arm.cc +++ b/chromium/v8/src/arm/macro-assembler-arm.cc @@ -88,11 +88,11 @@ int MacroAssembler::CallStubSize( return CallSize(stub->GetCode(), RelocInfo::CODE_TARGET, ast_id, cond); } - -void MacroAssembler::Call(Address target, - RelocInfo::Mode rmode, - Condition cond, - TargetAddressStorageMode mode) { +void MacroAssembler::Call(Address target, RelocInfo::Mode rmode, Condition cond, + TargetAddressStorageMode mode, + bool check_constant_pool) { + // Check if we have to emit the constant pool before we block it. + if (check_constant_pool) MaybeCheckConstPool(); // Block constant pool for the call instruction sequence. BlockConstPoolScope block_const_pool(this); Label start; @@ -138,12 +138,10 @@ int MacroAssembler::CallSize(Handle<Code> code, return CallSize(reinterpret_cast<Address>(code.location()), rmode, cond); } - -void MacroAssembler::Call(Handle<Code> code, - RelocInfo::Mode rmode, - TypeFeedbackId ast_id, - Condition cond, - TargetAddressStorageMode mode) { +void MacroAssembler::Call(Handle<Code> code, RelocInfo::Mode rmode, + TypeFeedbackId ast_id, Condition cond, + TargetAddressStorageMode mode, + bool check_constant_pool) { Label start; bind(&start); DCHECK(RelocInfo::IsCodeTarget(rmode)); @@ -2417,7 +2415,8 @@ void MacroAssembler::CallStub(CodeStub* stub, TypeFeedbackId ast_id, Condition cond) { DCHECK(AllowThisStubCall(stub)); // Stub calls are not allowed in some stubs. - Call(stub->GetCode(), RelocInfo::CODE_TARGET, ast_id, cond); + Call(stub->GetCode(), RelocInfo::CODE_TARGET, ast_id, cond, + CAN_INLINE_TARGET_ADDRESS, false); } diff --git a/chromium/v8/src/arm/macro-assembler-arm.h b/chromium/v8/src/arm/macro-assembler-arm.h index bcba01447e8..821a1096d30 100644 --- a/chromium/v8/src/arm/macro-assembler-arm.h +++ b/chromium/v8/src/arm/macro-assembler-arm.h @@ -107,12 +107,13 @@ class MacroAssembler: public Assembler { void Jump(Address target, RelocInfo::Mode rmode, Condition cond = al); void Jump(Handle<Code> code, RelocInfo::Mode rmode, Condition cond = al); void Call(Register target, Condition cond = al); - void Call(Address target, RelocInfo::Mode rmode, - Condition cond = al, - TargetAddressStorageMode mode = CAN_INLINE_TARGET_ADDRESS); + void Call(Address target, RelocInfo::Mode rmode, Condition cond = al, + TargetAddressStorageMode mode = CAN_INLINE_TARGET_ADDRESS, + bool check_constant_pool = true); void Call(Handle<Code> code, RelocInfo::Mode rmode = RelocInfo::CODE_TARGET, TypeFeedbackId ast_id = TypeFeedbackId::None(), Condition cond = al, - TargetAddressStorageMode mode = CAN_INLINE_TARGET_ADDRESS); + TargetAddressStorageMode mode = CAN_INLINE_TARGET_ADDRESS, + bool check_constant_pool = true); int CallSize(Handle<Code> code, RelocInfo::Mode rmode = RelocInfo::CODE_TARGET, TypeFeedbackId ast_id = TypeFeedbackId::None(), diff --git a/chromium/v8/src/ast/scopes.cc b/chromium/v8/src/ast/scopes.cc index 2bc9b3af64a..225793c7bbc 100644 --- a/chromium/v8/src/ast/scopes.cc +++ b/chromium/v8/src/ast/scopes.cc @@ -1430,7 +1430,11 @@ void DeclarationScope::ResetAfterPreparsing(AstValueFactory* ast_value_factory, DCHECK(is_function_scope()); // Reset all non-trivial members. - params_.Clear(); + if (!aborted || !IsArrowFunction(function_kind_)) { + // Do not remove parameters when lazy parsing an Arrow Function has failed, + // as the formal parameters are not re-parsed. + params_.Clear(); + } decls_.Clear(); locals_.Clear(); inner_scope_ = nullptr; diff --git a/chromium/v8/src/bootstrapper.cc b/chromium/v8/src/bootstrapper.cc index 3e095eafca4..8f9f92a08c6 100644 --- a/chromium/v8/src/bootstrapper.cc +++ b/chromium/v8/src/bootstrapper.cc @@ -2260,6 +2260,15 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, native_context()->set_regexp_last_match_info(*last_match_info); Handle<RegExpMatchInfo> internal_match_info = factory->NewRegExpMatchInfo(); native_context()->set_regexp_internal_match_info(*internal_match_info); + + // Force the RegExp constructor to fast properties, so that we can use the + // fast paths for various things like + // + // x instanceof RegExp + // + // etc. We should probably come up with a more principled approach once + // the JavaScript builtins are gone. + JSObject::MigrateSlowToFast(regexp_fun, 0, "Bootstrapping"); } { // -- E r r o r diff --git a/chromium/v8/src/builtins/builtins-regexp.cc b/chromium/v8/src/builtins/builtins-regexp.cc index 93cb55899b4..f76136b8066 100644 --- a/chromium/v8/src/builtins/builtins-regexp.cc +++ b/chromium/v8/src/builtins/builtins-regexp.cc @@ -247,19 +247,24 @@ Node* RegExpBuiltinsAssembler::RegExpPrototypeExecBodyWithoutResult( Node* const regexp_lastindex = LoadLastIndex(context, regexp, is_fastpath); var_lastindex.Bind(regexp_lastindex); - // Omit ToLength if lastindex is a non-negative smi. - Label call_tolength(this, Label::kDeferred), next(this); - Branch(TaggedIsPositiveSmi(regexp_lastindex), &next, &call_tolength); + if (is_fastpath) { + // ToLength on a positive smi is a nop and can be skipped. + CSA_ASSERT(this, TaggedIsPositiveSmi(regexp_lastindex)); + } else { + // Omit ToLength if lastindex is a non-negative smi. + Label call_tolength(this, Label::kDeferred), next(this); + Branch(TaggedIsPositiveSmi(regexp_lastindex), &next, &call_tolength); + + Bind(&call_tolength); + { + Callable tolength_callable = CodeFactory::ToLength(isolate); + var_lastindex.Bind( + CallStub(tolength_callable, context, regexp_lastindex)); + Goto(&next); + } - Bind(&call_tolength); - { - Callable tolength_callable = CodeFactory::ToLength(isolate); - var_lastindex.Bind( - CallStub(tolength_callable, context, regexp_lastindex)); - Goto(&next); + Bind(&next); } - - Bind(&next); } // Check whether the regexp is global or sticky, which determines whether we @@ -408,7 +413,11 @@ Node* RegExpBuiltinsAssembler::ThrowIfNotJSReceiver( return var_value_map.value(); } -Node* RegExpBuiltinsAssembler::IsInitialRegExpMap(Node* context, Node* map) { +Node* RegExpBuiltinsAssembler::IsInitialRegExpMap(Node* context, Node* object, + Node* map) { + Label out(this); + Variable var_result(this, MachineRepresentation::kWord32); + Node* const native_context = LoadNativeContext(context); Node* const regexp_fun = LoadContextElement(native_context, Context::REGEXP_FUNCTION_INDEX); @@ -416,17 +425,33 @@ Node* RegExpBuiltinsAssembler::IsInitialRegExpMap(Node* context, Node* map) { LoadObjectField(regexp_fun, JSFunction::kPrototypeOrInitialMapOffset); Node* const has_initialmap = WordEqual(map, initial_map); - return has_initialmap; + var_result.Bind(has_initialmap); + GotoIfNot(has_initialmap, &out); + + // The smi check is required to omit ToLength(lastIndex) calls with possible + // user-code execution on the fast path. + Node* const last_index = FastLoadLastIndex(object); + var_result.Bind(TaggedIsPositiveSmi(last_index)); + Goto(&out); + + Bind(&out); + return var_result.value(); } // RegExp fast path implementations rely on unmodified JSRegExp instances. // We use a fairly coarse granularity for this and simply check whether both -// the regexp itself is unmodified (i.e. its map has not changed) and its -// prototype is unmodified. +// the regexp itself is unmodified (i.e. its map has not changed), its +// prototype is unmodified, and lastIndex is a non-negative smi. void RegExpBuiltinsAssembler::BranchIfFastRegExp(Node* const context, + Node* const object, Node* const map, Label* const if_isunmodified, Label* const if_ismodified) { + CSA_ASSERT(this, WordEqual(LoadMap(object), map)); + + // TODO(ishell): Update this check once map changes for constant field + // tracking are landing. + Node* const native_context = LoadNativeContext(context); Node* const regexp_fun = LoadContextElement(native_context, Context::REGEXP_FUNCTION_INDEX); @@ -442,18 +467,21 @@ void RegExpBuiltinsAssembler::BranchIfFastRegExp(Node* const context, Node* const proto_has_initialmap = WordEqual(proto_map, initial_proto_initial_map); - // TODO(ishell): Update this check once map changes for constant field - // tracking are landing. + GotoIfNot(proto_has_initialmap, if_ismodified); - Branch(proto_has_initialmap, if_isunmodified, if_ismodified); + // The smi check is required to omit ToLength(lastIndex) calls with possible + // user-code execution on the fast path. + Node* const last_index = FastLoadLastIndex(object); + Branch(TaggedIsPositiveSmi(last_index), if_isunmodified, if_ismodified); } Node* RegExpBuiltinsAssembler::IsFastRegExpMap(Node* const context, + Node* const object, Node* const map) { Label yup(this), nope(this), out(this); Variable var_result(this, MachineRepresentation::kWord32); - BranchIfFastRegExp(context, map, &yup, &nope); + BranchIfFastRegExp(context, object, map, &yup, &nope); Bind(&yup); var_result.Bind(Int32Constant(1)); @@ -486,16 +514,16 @@ TF_BUILTIN(RegExpPrototypeExec, RegExpBuiltinsAssembler) { Node* const context = Parameter(4); // Ensure {maybe_receiver} is a JSRegExp. - Node* const regexp_map = ThrowIfNotInstanceType( - context, maybe_receiver, JS_REGEXP_TYPE, "RegExp.prototype.exec"); + ThrowIfNotInstanceType(context, maybe_receiver, JS_REGEXP_TYPE, + "RegExp.prototype.exec"); Node* const receiver = maybe_receiver; // Convert {maybe_string} to a String. Node* const string = ToString(context, maybe_string); Label if_isfastpath(this), if_isslowpath(this); - Branch(IsInitialRegExpMap(context, regexp_map), &if_isfastpath, - &if_isslowpath); + Branch(IsInitialRegExpMap(context, receiver, LoadMap(receiver)), + &if_isfastpath, &if_isslowpath); Bind(&if_isfastpath); { @@ -681,7 +709,8 @@ TF_BUILTIN(RegExpPrototypeFlagsGetter, RegExpBuiltinsAssembler) { Node* const receiver = maybe_receiver; Label if_isfastpath(this), if_isslowpath(this, Label::kDeferred); - Branch(IsInitialRegExpMap(context, map), &if_isfastpath, &if_isslowpath); + Branch(IsInitialRegExpMap(context, receiver, map), &if_isfastpath, + &if_isslowpath); Bind(&if_isfastpath); Return(FlagsGetter(context, receiver, true)); @@ -1221,7 +1250,7 @@ Node* RegExpBuiltinsAssembler::RegExpExec(Node* context, Node* regexp, Label out(this), if_isfastpath(this), if_isslowpath(this); Node* const map = LoadMap(regexp); - BranchIfFastRegExp(context, map, &if_isfastpath, &if_isslowpath); + BranchIfFastRegExp(context, regexp, map, &if_isfastpath, &if_isslowpath); Bind(&if_isfastpath); { @@ -1286,16 +1315,17 @@ TF_BUILTIN(RegExpPrototypeTest, RegExpBuiltinsAssembler) { Node* const context = Parameter(4); // Ensure {maybe_receiver} is a JSReceiver. - Node* const map = ThrowIfNotJSReceiver( - context, maybe_receiver, MessageTemplate::kIncompatibleMethodReceiver, - "RegExp.prototype.test"); + ThrowIfNotJSReceiver(context, maybe_receiver, + MessageTemplate::kIncompatibleMethodReceiver, + "RegExp.prototype.test"); Node* const receiver = maybe_receiver; // Convert {maybe_string} to a String. Node* const string = ToString(context, maybe_string); Label fast_path(this), slow_path(this); - BranchIfFastRegExp(context, map, &fast_path, &slow_path); + BranchIfFastRegExp(context, receiver, LoadMap(receiver), &fast_path, + &slow_path); Bind(&fast_path); { @@ -1322,13 +1352,36 @@ TF_BUILTIN(RegExpPrototypeTest, RegExpBuiltinsAssembler) { Node* RegExpBuiltinsAssembler::AdvanceStringIndex(Node* const string, Node* const index, - Node* const is_unicode) { + Node* const is_unicode, + bool is_fastpath) { + CSA_ASSERT(this, IsHeapNumberMap(LoadReceiverMap(index))); + if (is_fastpath) CSA_ASSERT(this, TaggedIsPositiveSmi(index)); + // Default to last_index + 1. - Node* const index_plus_one = SmiAdd(index, SmiConstant(1)); + Node* const index_plus_one = NumberInc(index); Variable var_result(this, MachineRepresentation::kTagged, index_plus_one); + // Advancing the index has some subtle issues involving the distinction + // between Smis and HeapNumbers. There's three cases: + // * {index} is a Smi, {index_plus_one} is a Smi. The standard case. + // * {index} is a Smi, {index_plus_one} overflows into a HeapNumber. + // In this case we can return the result early, because + // {index_plus_one} > {string}.length. + // * {index} is a HeapNumber, {index_plus_one} is a HeapNumber. This can only + // occur when {index} is outside the Smi range since we normalize + // explicitly. Again we can return early. + if (is_fastpath) { + // Must be in Smi range on the fast path. We control the value of {index} + // on all call-sites and can never exceed the length of the string. + STATIC_ASSERT(String::kMaxLength + 2 < Smi::kMaxValue); + CSA_ASSERT(this, TaggedIsPositiveSmi(index_plus_one)); + } + Label if_isunicode(this), out(this); - Branch(is_unicode, &if_isunicode, &out); + GotoIfNot(is_unicode, &out); + + // Keep this unconditional (even on the fast path) just to be safe. + Branch(TaggedIsPositiveSmi(index_plus_one), &if_isunicode, &out); Bind(&if_isunicode); { @@ -1346,7 +1399,7 @@ Node* RegExpBuiltinsAssembler::AdvanceStringIndex(Node* const string, &out); // At a surrogate pair, return index + 2. - Node* const index_plus_two = SmiAdd(index, SmiConstant(2)); + Node* const index_plus_two = NumberInc(index_plus_one); var_result.Bind(index_plus_two); Goto(&out); @@ -1630,12 +1683,23 @@ void RegExpBuiltinsAssembler::RegExpPrototypeMatchBody(Node* const context, GotoIfNot(SmiEqual(match_length, smi_zero), &loop); Node* last_index = LoadLastIndex(context, regexp, is_fastpath); - - Callable tolength_callable = CodeFactory::ToLength(isolate); - last_index = CallStub(tolength_callable, context, last_index); + if (is_fastpath) { + CSA_ASSERT(this, TaggedIsPositiveSmi(last_index)); + } else { + Callable tolength_callable = CodeFactory::ToLength(isolate); + last_index = CallStub(tolength_callable, context, last_index); + } Node* const new_last_index = - AdvanceStringIndex(string, last_index, is_unicode); + AdvanceStringIndex(string, last_index, is_unicode, is_fastpath); + + if (is_fastpath) { + // On the fast path, we can be certain that lastIndex can never be + // incremented to overflow the Smi range since the maximal string + // length is less than the maximal Smi value. + STATIC_ASSERT(String::kMaxLength < Smi::kMaxValue); + CSA_ASSERT(this, TaggedIsPositiveSmi(new_last_index)); + } StoreLastIndex(context, regexp, new_last_index, is_fastpath); @@ -1661,16 +1725,17 @@ TF_BUILTIN(RegExpPrototypeMatch, RegExpBuiltinsAssembler) { Node* const context = Parameter(4); // Ensure {maybe_receiver} is a JSReceiver. - Node* const map = ThrowIfNotJSReceiver( - context, maybe_receiver, MessageTemplate::kIncompatibleMethodReceiver, - "RegExp.prototype.@@match"); + ThrowIfNotJSReceiver(context, maybe_receiver, + MessageTemplate::kIncompatibleMethodReceiver, + "RegExp.prototype.@@match"); Node* const receiver = maybe_receiver; // Convert {maybe_string} to a String. Node* const string = ToString(context, maybe_string); Label fast_path(this), slow_path(this); - BranchIfFastRegExp(context, map, &fast_path, &slow_path); + BranchIfFastRegExp(context, receiver, LoadMap(receiver), &fast_path, + &slow_path); Bind(&fast_path); RegExpPrototypeMatchBody(context, receiver, string, true); @@ -1786,16 +1851,17 @@ TF_BUILTIN(RegExpPrototypeSearch, RegExpBuiltinsAssembler) { Node* const context = Parameter(4); // Ensure {maybe_receiver} is a JSReceiver. - Node* const map = ThrowIfNotJSReceiver( - context, maybe_receiver, MessageTemplate::kIncompatibleMethodReceiver, - "RegExp.prototype.@@search"); + ThrowIfNotJSReceiver(context, maybe_receiver, + MessageTemplate::kIncompatibleMethodReceiver, + "RegExp.prototype.@@search"); Node* const receiver = maybe_receiver; // Convert {maybe_string} to a String. Node* const string = ToString(context, maybe_string); Label fast_path(this), slow_path(this); - BranchIfFastRegExp(context, map, &fast_path, &slow_path); + BranchIfFastRegExp(context, receiver, LoadMap(receiver), &fast_path, + &slow_path); Bind(&fast_path); RegExpPrototypeSearchBodyFast(context, receiver, string); @@ -1939,7 +2005,7 @@ void RegExpBuiltinsAssembler::RegExpPrototypeSplitBody(Node* const context, Node* const is_unicode = FastFlagGetter(regexp, JSRegExp::kUnicode); Node* const new_next_search_from = - AdvanceStringIndex(string, next_search_from, is_unicode); + AdvanceStringIndex(string, next_search_from, is_unicode, true); var_next_search_from.Bind(new_next_search_from); Goto(&loop); @@ -2059,7 +2125,7 @@ TF_BUILTIN(RegExpSplit, RegExpBuiltinsAssembler) { Node* const maybe_limit = Parameter(Descriptor::kLimit); Node* const context = Parameter(Descriptor::kContext); - CSA_ASSERT(this, IsFastRegExpMap(context, LoadMap(regexp))); + CSA_ASSERT(this, IsFastRegExpMap(context, regexp, LoadMap(regexp))); CSA_ASSERT(this, IsString(string)); // TODO(jgruber): Even if map checks send us to the fast path, we still need @@ -2067,13 +2133,23 @@ TF_BUILTIN(RegExpSplit, RegExpBuiltinsAssembler) { // been changed. // Convert {maybe_limit} to a uint32, capping at the maximal smi value. - Variable var_limit(this, MachineRepresentation::kTagged); - Label if_limitissmimax(this), limit_done(this); + Variable var_limit(this, MachineRepresentation::kTagged, maybe_limit); + Label if_limitissmimax(this), limit_done(this), runtime(this); GotoIf(IsUndefined(maybe_limit), &if_limitissmimax); + GotoIf(TaggedIsPositiveSmi(maybe_limit), &limit_done); + Node* const limit = ToUint32(context, maybe_limit); { - Node* const limit = ToUint32(context, maybe_limit); + // ToUint32(limit) could potentially change the shape of the RegExp + // object. Recheck that we are still on the fast path and bail to runtime + // otherwise. + { + Label next(this); + BranchIfFastRegExp(context, regexp, LoadMap(regexp), &next, &runtime); + Bind(&next); + } + GotoIfNot(TaggedIsSmi(limit), &if_limitissmimax); var_limit.Bind(limit); @@ -2093,6 +2169,14 @@ TF_BUILTIN(RegExpSplit, RegExpBuiltinsAssembler) { Node* const limit = var_limit.value(); RegExpPrototypeSplitBody(context, regexp, string, limit); } + + Bind(&runtime); + { + // The runtime call passes in limit to ensure the second ToUint32(limit) + // call is not observable. + CSA_ASSERT(this, IsHeapNumberMap(LoadReceiverMap(limit))); + Return(CallRuntime(Runtime::kRegExpSplit, context, regexp, string, limit)); + } } // ES#sec-regexp.prototype-@@split @@ -2104,16 +2188,16 @@ TF_BUILTIN(RegExpPrototypeSplit, RegExpBuiltinsAssembler) { Node* const context = Parameter(5); // Ensure {maybe_receiver} is a JSReceiver. - Node* const map = ThrowIfNotJSReceiver( - context, maybe_receiver, MessageTemplate::kIncompatibleMethodReceiver, - "RegExp.prototype.@@split"); + ThrowIfNotJSReceiver(context, maybe_receiver, + MessageTemplate::kIncompatibleMethodReceiver, + "RegExp.prototype.@@split"); Node* const receiver = maybe_receiver; // Convert {maybe_string} to a String. Node* const string = ToString(context, maybe_string); Label stub(this), runtime(this, Label::kDeferred); - BranchIfFastRegExp(context, map, &stub, &runtime); + BranchIfFastRegExp(context, receiver, LoadMap(receiver), &stub, &runtime); Bind(&stub); Callable split_callable = CodeFactory::RegExpSplit(isolate()); @@ -2439,7 +2523,7 @@ TF_BUILTIN(RegExpReplace, RegExpBuiltinsAssembler) { Node* const replace_value = Parameter(Descriptor::kReplaceValue); Node* const context = Parameter(Descriptor::kContext); - CSA_ASSERT(this, IsFastRegExpMap(context, LoadMap(regexp))); + CSA_ASSERT(this, IsFastRegExpMap(context, regexp, LoadMap(regexp))); CSA_ASSERT(this, IsString(string)); Label checkreplacestring(this), if_iscallable(this), @@ -2457,6 +2541,15 @@ TF_BUILTIN(RegExpReplace, RegExpBuiltinsAssembler) { Node* const replace_string = CallStub(tostring_callable, context, replace_value); + // ToString(replaceValue) could potentially change the shape of the RegExp + // object. Recheck that we are still on the fast path and bail to runtime + // otherwise. + { + Label next(this); + BranchIfFastRegExp(context, regexp, LoadMap(regexp), &next, &runtime); + Bind(&next); + } + Callable indexof_callable = CodeFactory::StringIndexOf(isolate()); Node* const dollar_string = HeapConstant( isolate()->factory()->LookupSingleCharacterStringFromCode('$')); @@ -2519,9 +2612,9 @@ TF_BUILTIN(RegExpPrototypeReplace, RegExpBuiltinsAssembler) { // } // Ensure {maybe_receiver} is a JSReceiver. - Node* const map = ThrowIfNotJSReceiver( - context, maybe_receiver, MessageTemplate::kIncompatibleMethodReceiver, - "RegExp.prototype.@@replace"); + ThrowIfNotJSReceiver(context, maybe_receiver, + MessageTemplate::kIncompatibleMethodReceiver, + "RegExp.prototype.@@replace"); Node* const receiver = maybe_receiver; // Convert {maybe_string} to a String. @@ -2530,7 +2623,7 @@ TF_BUILTIN(RegExpPrototypeReplace, RegExpBuiltinsAssembler) { // Fast-path checks: 1. Is the {receiver} an unmodified JSRegExp instance? Label stub(this), runtime(this, Label::kDeferred); - BranchIfFastRegExp(context, map, &stub, &runtime); + BranchIfFastRegExp(context, receiver, LoadMap(receiver), &stub, &runtime); Bind(&stub); Callable replace_callable = CodeFactory::RegExpReplace(isolate()); diff --git a/chromium/v8/src/builtins/builtins-regexp.h b/chromium/v8/src/builtins/builtins-regexp.h index f14a41e051f..9e1bfdf48f0 100644 --- a/chromium/v8/src/builtins/builtins-regexp.h +++ b/chromium/v8/src/builtins/builtins-regexp.h @@ -19,8 +19,8 @@ class RegExpBuiltinsAssembler : public CodeStubAssembler { explicit RegExpBuiltinsAssembler(CodeAssemblerState* state) : CodeStubAssembler(state) {} - void BranchIfFastRegExp(Node* const context, Node* const map, - Label* const if_isunmodified, + void BranchIfFastRegExp(Node* const context, Node* const object, + Node* const map, Label* const if_isunmodified, Label* const if_ismodified); protected: @@ -50,9 +50,10 @@ class RegExpBuiltinsAssembler : public CodeStubAssembler { char const* method_name); // Analogous to BranchIfFastRegExp, for use in asserts. - Node* IsFastRegExpMap(Node* const context, Node* const map); + Node* IsFastRegExpMap(Node* const context, Node* const object, + Node* const map); - Node* IsInitialRegExpMap(Node* context, Node* map); + Node* IsInitialRegExpMap(Node* context, Node* object, Node* map); void BranchIfFastRegExpResult(Node* context, Node* map, Label* if_isunmodified, Label* if_ismodified); @@ -73,7 +74,7 @@ class RegExpBuiltinsAssembler : public CodeStubAssembler { Node* RegExpExec(Node* context, Node* regexp, Node* string); Node* AdvanceStringIndex(Node* const string, Node* const index, - Node* const is_unicode); + Node* const is_unicode, bool is_fastpath); void RegExpPrototypeMatchBody(Node* const context, Node* const regexp, Node* const string, const bool is_fastpath); diff --git a/chromium/v8/src/builtins/builtins-string.cc b/chromium/v8/src/builtins/builtins-string.cc index 9967f958601..7cef567cf95 100644 --- a/chromium/v8/src/builtins/builtins-string.cc +++ b/chromium/v8/src/builtins/builtins-string.cc @@ -1224,7 +1224,7 @@ void StringBuiltinsAssembler::MaybeCallFunctionAtSymbol( Label stub_call(this), slow_lookup(this); RegExpBuiltinsAssembler regexp_asm(state()); - regexp_asm.BranchIfFastRegExp(context, object_map, &stub_call, + regexp_asm.BranchIfFastRegExp(context, object, object_map, &stub_call, &slow_lookup); Bind(&stub_call); diff --git a/chromium/v8/src/compiler/js-builtin-reducer.cc b/chromium/v8/src/compiler/js-builtin-reducer.cc index a9af93c80ce..24eb5cea8ec 100644 --- a/chromium/v8/src/compiler/js-builtin-reducer.cc +++ b/chromium/v8/src/compiler/js-builtin-reducer.cc @@ -815,20 +815,42 @@ Reduction JSBuiltinReducer::ReduceArrayPop(Node* node) { // ES6 section 22.1.3.18 Array.prototype.push ( ) Reduction JSBuiltinReducer::ReduceArrayPush(Node* node) { - Handle<Map> receiver_map; // We need exactly target, receiver and value parameters. if (node->op()->ValueInputCount() != 3) return NoChange(); Node* receiver = NodeProperties::GetValueInput(node, 1); Node* effect = NodeProperties::GetEffectInput(node); Node* control = NodeProperties::GetControlInput(node); Node* value = NodeProperties::GetValueInput(node, 2); - if (GetMapWitness(node).ToHandle(&receiver_map) && - CanInlineArrayResizeOperation(receiver_map)) { + ZoneHandleSet<Map> receiver_maps; + NodeProperties::InferReceiverMapsResult result = + NodeProperties::InferReceiverMaps(receiver, effect, &receiver_maps); + if (receiver_maps.size() != 1) return NoChange(); + DCHECK_NE(NodeProperties::kNoReceiverMaps, result); + + // TODO(turbofan): Relax this to deal with multiple {receiver} maps. + Handle<Map> receiver_map = receiver_maps[0]; + if (CanInlineArrayResizeOperation(receiver_map)) { // Install code dependencies on the {receiver} prototype maps and the // global array protector cell. dependencies()->AssumePropertyCell(factory()->array_protector()); dependencies()->AssumePrototypeMapsStable(receiver_map); + // If the {receiver_maps} information is not reliable, we need + // to check that the {receiver} still has one of these maps. + if (result == NodeProperties::kUnreliableReceiverMaps) { + if (receiver_map->is_stable()) { + dependencies()->AssumeMapStable(receiver_map); + } else { + // TODO(turbofan): This is a potential - yet unlikely - deoptimization + // loop, since we might not learn from this deoptimization in baseline + // code. We need a way to learn from deoptimizations in optimized to + // address these problems. + effect = graph()->NewNode( + simplified()->CheckMaps(CheckMapsFlag::kNone, receiver_maps), + receiver, effect, control); + } + } + // TODO(turbofan): Perform type checks on the {value}. We are not guaranteed // to learn from these checks in case they fail, as the witness (i.e. the // map check from the LoadIC for a.push) might not be executed in baseline diff --git a/chromium/v8/src/compiler/js-call-reducer.cc b/chromium/v8/src/compiler/js-call-reducer.cc index fe15f5fa237..c0deb915f81 100644 --- a/chromium/v8/src/compiler/js-call-reducer.cc +++ b/chromium/v8/src/compiler/js-call-reducer.cc @@ -325,7 +325,9 @@ Reduction JSCallReducer::ReduceObjectPrototypeGetProto(Node* node) { // Try to determine the {receiver} map. ZoneHandleSet<Map> receiver_maps; - if (NodeProperties::InferReceiverMaps(receiver, effect, &receiver_maps)) { + NodeProperties::InferReceiverMapsResult result = + NodeProperties::InferReceiverMaps(receiver, effect, &receiver_maps); + if (result == NodeProperties::kReliableReceiverMaps) { Handle<Map> candidate_map( receiver_maps[0]->GetPrototypeChainRootMap(isolate())); Handle<Object> candidate_prototype(candidate_map->prototype(), isolate()); diff --git a/chromium/v8/src/compiler/js-inlining.cc b/chromium/v8/src/compiler/js-inlining.cc index 206cd639fca..c87be6c2362 100644 --- a/chromium/v8/src/compiler/js-inlining.cc +++ b/chromium/v8/src/compiler/js-inlining.cc @@ -309,8 +309,12 @@ bool NeedsConvertReceiver(Node* receiver, Node* effect) { return false; } default: { + // We don't really care about the exact maps here, just the instance + // types, which don't change across potential side-effecting operations. ZoneHandleSet<Map> maps; - if (NodeProperties::InferReceiverMaps(receiver, effect, &maps)) { + NodeProperties::InferReceiverMapsResult result = + NodeProperties::InferReceiverMaps(receiver, effect, &maps); + if (result != NodeProperties::kNoReceiverMaps) { // Check if all {maps} are actually JSReceiver maps. for (size_t i = 0; i < maps.size(); ++i) { if (!maps[i]->IsJSReceiverMap()) return true; diff --git a/chromium/v8/src/compiler/js-native-context-specialization.cc b/chromium/v8/src/compiler/js-native-context-specialization.cc index b72d3ec8bed..c32ee269a08 100644 --- a/chromium/v8/src/compiler/js-native-context-specialization.cc +++ b/chromium/v8/src/compiler/js-native-context-specialization.cc @@ -2256,7 +2256,19 @@ bool JSNativeContextSpecialization::ExtractReceiverMaps( bool JSNativeContextSpecialization::InferReceiverMaps( Node* receiver, Node* effect, MapHandleList* receiver_maps) { ZoneHandleSet<Map> maps; - if (NodeProperties::InferReceiverMaps(receiver, effect, &maps)) { + NodeProperties::InferReceiverMapsResult result = + NodeProperties::InferReceiverMaps(receiver, effect, &maps); + if (result == NodeProperties::kReliableReceiverMaps) { + for (size_t i = 0; i < maps.size(); ++i) { + receiver_maps->Add(maps[i]); + } + return true; + } else if (result == NodeProperties::kUnreliableReceiverMaps) { + // For untrusted receiver maps, we can still use the information + // if the maps are stable. + for (size_t i = 0; i < maps.size(); ++i) { + if (!maps[i]->is_stable()) return false; + } for (size_t i = 0; i < maps.size(); ++i) { receiver_maps->Add(maps[i]); } diff --git a/chromium/v8/src/compiler/node-properties.cc b/chromium/v8/src/compiler/node-properties.cc index e559844cbfa..9243a08583b 100644 --- a/chromium/v8/src/compiler/node-properties.cc +++ b/chromium/v8/src/compiler/node-properties.cc @@ -330,23 +330,26 @@ bool NodeProperties::IsSame(Node* a, Node* b) { } // static -bool NodeProperties::InferReceiverMaps(Node* receiver, Node* effect, - ZoneHandleSet<Map>* maps_return) { +NodeProperties::InferReceiverMapsResult NodeProperties::InferReceiverMaps( + Node* receiver, Node* effect, ZoneHandleSet<Map>* maps_return) { HeapObjectMatcher m(receiver); if (m.HasValue()) { Handle<Map> receiver_map(m.Value()->map()); if (receiver_map->is_stable()) { + // The {receiver_map} is only reliable when we install a stability + // code dependency. *maps_return = ZoneHandleSet<Map>(receiver_map); - return true; + return kUnreliableReceiverMaps; } } + InferReceiverMapsResult result = kReliableReceiverMaps; while (true) { switch (effect->opcode()) { case IrOpcode::kCheckMaps: { Node* const object = GetValueInput(effect, 0); if (IsSame(receiver, object)) { *maps_return = CheckMapsParametersOf(effect->op()).maps(); - return true; + return result; } break; } @@ -362,12 +365,12 @@ bool NodeProperties::InferReceiverMaps(Node* receiver, Node* effect, if (initial_map->constructor_or_backpointer() == *mtarget.Value()) { *maps_return = ZoneHandleSet<Map>(initial_map); - return true; + return result; } } } // We reached the allocation of the {receiver}. - return false; + return kNoReceiverMaps; } break; } @@ -382,12 +385,12 @@ bool NodeProperties::InferReceiverMaps(Node* receiver, Node* effect, HeapObjectMatcher m(value); if (m.HasValue()) { *maps_return = ZoneHandleSet<Map>(Handle<Map>::cast(m.Value())); - return true; + return result; } } // Without alias analysis we cannot tell whether this // StoreField[map] affects {receiver} or not. - return false; + result = kUnreliableReceiverMaps; } break; } @@ -400,10 +403,14 @@ bool NodeProperties::InferReceiverMaps(Node* receiver, Node* effect, } default: { DCHECK_EQ(1, effect->op()->EffectOutputCount()); - if (effect->op()->EffectInputCount() != 1 || - !effect->op()->HasProperty(Operator::kNoWrite)) { + if (effect->op()->EffectInputCount() != 1) { // Didn't find any appropriate CheckMaps node. - return false; + return kNoReceiverMaps; + } + if (!effect->op()->HasProperty(Operator::kNoWrite)) { + // Without alias/escape analysis we cannot tell whether this + // {effect} affects {receiver} or not. + result = kUnreliableReceiverMaps; } break; } diff --git a/chromium/v8/src/compiler/node-properties.h b/chromium/v8/src/compiler/node-properties.h index c82d78a6158..5ed85402d1f 100644 --- a/chromium/v8/src/compiler/node-properties.h +++ b/chromium/v8/src/compiler/node-properties.h @@ -128,10 +128,15 @@ class V8_EXPORT_PRIVATE NodeProperties final { static bool IsSame(Node* a, Node* b); // Walks up the {effect} chain to find a witness that provides map - // information about the {receiver}. Doesn't look through potentially + // information about the {receiver}. Can look through potentially // side effecting nodes. - static bool InferReceiverMaps(Node* receiver, Node* effect, - ZoneHandleSet<Map>* maps_return); + enum InferReceiverMapsResult { + kNoReceiverMaps, // No receiver maps inferred. + kReliableReceiverMaps, // Receiver maps can be trusted. + kUnreliableReceiverMaps // Receiver maps might have changed (side-effect). + }; + static InferReceiverMapsResult InferReceiverMaps( + Node* receiver, Node* effect, ZoneHandleSet<Map>* maps_return); // --------------------------------------------------------------------------- // Context. diff --git a/chromium/v8/src/crankshaft/arm/lithium-codegen-arm.cc b/chromium/v8/src/crankshaft/arm/lithium-codegen-arm.cc index 11c70fb5ce5..4783808ba70 100644 --- a/chromium/v8/src/crankshaft/arm/lithium-codegen-arm.cc +++ b/chromium/v8/src/crankshaft/arm/lithium-codegen-arm.cc @@ -688,7 +688,7 @@ void LCodeGen::CallCodeGeneric(Handle<Code> code, // Block literal pool emission to ensure nop indicating no inlined smi code // is in the correct position. Assembler::BlockConstPoolScope block_const_pool(masm()); - __ Call(code, mode, TypeFeedbackId::None(), al, storage_mode); + __ Call(code, mode, TypeFeedbackId::None(), al, storage_mode, false); RecordSafepointWithLazyDeopt(instr, safepoint_mode); // Signal that we don't inline smi code before these stubs in the @@ -5228,6 +5228,7 @@ void LCodeGen::DoStackCheck(LStackCheck* instr) { __ cmp(sp, Operand(ip)); __ b(hs, &done); Handle<Code> stack_check = isolate()->builtins()->StackCheck(); + masm()->MaybeCheckConstPool(); PredictableCodeSizeScope predictable(masm()); predictable.ExpectSize(CallCodeSize(stack_check, RelocInfo::CODE_TARGET)); DCHECK(instr->context()->IsRegister()); diff --git a/chromium/v8/src/full-codegen/arm/full-codegen-arm.cc b/chromium/v8/src/full-codegen/arm/full-codegen-arm.cc index aff8942fedd..d650f2e47b9 100644 --- a/chromium/v8/src/full-codegen/arm/full-codegen-arm.cc +++ b/chromium/v8/src/full-codegen/arm/full-codegen-arm.cc @@ -312,10 +312,12 @@ void FullCodeGenerator::Generate() { __ cmp(sp, Operand(ip)); __ b(hs, &ok); Handle<Code> stack_check = isolate()->builtins()->StackCheck(); + masm_->MaybeCheckConstPool(); PredictableCodeSizeScope predictable(masm_); predictable.ExpectSize( masm_->CallSize(stack_check, RelocInfo::CODE_TARGET)); - __ Call(stack_check, RelocInfo::CODE_TARGET); + __ Call(stack_check, RelocInfo::CODE_TARGET, TypeFeedbackId::None(), al, + CAN_INLINE_TARGET_ADDRESS, false); __ bind(&ok); } diff --git a/chromium/v8/src/heap/array-buffer-tracker-inl.h b/chromium/v8/src/heap/array-buffer-tracker-inl.h index f5bdead89a5..d20f1280028 100644 --- a/chromium/v8/src/heap/array-buffer-tracker-inl.h +++ b/chromium/v8/src/heap/array-buffer-tracker-inl.h @@ -17,7 +17,7 @@ void ArrayBufferTracker::RegisterNew(Heap* heap, JSArrayBuffer* buffer) { size_t length = NumberToSize(buffer->byte_length()); Page* page = Page::FromAddress(buffer->address()); { - base::LockGuard<base::Mutex> guard(page->mutex()); + base::LockGuard<base::RecursiveMutex> guard(page->mutex()); LocalArrayBufferTracker* tracker = page->local_tracker(); if (tracker == nullptr) { page->AllocateLocalTracker(); @@ -39,7 +39,7 @@ void ArrayBufferTracker::Unregister(Heap* heap, JSArrayBuffer* buffer) { Page* page = Page::FromAddress(buffer->address()); size_t length = 0; { - base::LockGuard<base::Mutex> guard(page->mutex()); + base::LockGuard<base::RecursiveMutex> guard(page->mutex()); LocalArrayBufferTracker* tracker = page->local_tracker(); DCHECK_NOT_NULL(tracker); length = tracker->Remove(buffer); diff --git a/chromium/v8/src/heap/array-buffer-tracker.cc b/chromium/v8/src/heap/array-buffer-tracker.cc index d7bbb941e2c..543d81d23d1 100644 --- a/chromium/v8/src/heap/array-buffer-tracker.cc +++ b/chromium/v8/src/heap/array-buffer-tracker.cc @@ -127,7 +127,7 @@ bool ArrayBufferTracker::ProcessBuffers(Page* page, ProcessingMode mode) { bool ArrayBufferTracker::IsTracked(JSArrayBuffer* buffer) { Page* page = Page::FromAddress(buffer->address()); { - base::LockGuard<base::Mutex> guard(page->mutex()); + base::LockGuard<base::RecursiveMutex> guard(page->mutex()); LocalArrayBufferTracker* tracker = page->local_tracker(); if (tracker == nullptr) return false; return tracker->IsTracked(buffer); diff --git a/chromium/v8/src/heap/heap.cc b/chromium/v8/src/heap/heap.cc index 1524a7821e0..25cb56d20c0 100644 --- a/chromium/v8/src/heap/heap.cc +++ b/chromium/v8/src/heap/heap.cc @@ -1705,12 +1705,14 @@ void Heap::Scavenge() { { // Copy objects reachable from the old generation. TRACE_GC(tracer(), GCTracer::Scope::SCAVENGER_OLD_TO_NEW_POINTERS); - RememberedSet<OLD_TO_NEW>::Iterate(this, [this](Address addr) { - return Scavenger::CheckAndScavengeObject(this, addr); - }); + RememberedSet<OLD_TO_NEW>::Iterate( + this, SYNCHRONIZED, [this](Address addr) { + return Scavenger::CheckAndScavengeObject(this, addr); + }); RememberedSet<OLD_TO_NEW>::IterateTyped( - this, [this](SlotType type, Address host_addr, Address addr) { + this, SYNCHRONIZED, + [this](SlotType type, Address host_addr, Address addr) { return UpdateTypedSlotHelper::UpdateTypedSlot( isolate(), type, addr, [this](Object** addr) { // We expect that objects referenced by code are long living. diff --git a/chromium/v8/src/heap/mark-compact.cc b/chromium/v8/src/heap/mark-compact.cc index 338d954ab02..cf6bdff35df 100644 --- a/chromium/v8/src/heap/mark-compact.cc +++ b/chromium/v8/src/heap/mark-compact.cc @@ -2336,11 +2336,12 @@ void MarkCompactCollector::MarkLiveObjectsInYoungGeneration() { { TRACE_GC(heap()->tracer(), GCTracer::Scope::MINOR_MC_MARK_OLD_TO_NEW_POINTERS); - RememberedSet<OLD_TO_NEW>::Iterate(heap(), [this](Address addr) { - return CheckAndMarkObject(heap(), addr); - }); + RememberedSet<OLD_TO_NEW>::Iterate( + heap(), NON_SYNCHRONIZED, + [this](Address addr) { return CheckAndMarkObject(heap(), addr); }); RememberedSet<OLD_TO_NEW>::IterateTyped( - heap(), [this](SlotType type, Address host_addr, Address addr) { + heap(), NON_SYNCHRONIZED, + [this](SlotType type, Address host_addr, Address addr) { return UpdateTypedSlotHelper::UpdateTypedSlot( isolate(), type, addr, [this](Object** addr) { return CheckAndMarkObject(heap(), @@ -3887,7 +3888,7 @@ int MarkCompactCollector::Sweeper::ParallelSweepPage(Page* page, AllocationSpace identity) { int max_freed = 0; { - base::LockGuard<base::Mutex> guard(page->mutex()); + base::LockGuard<base::RecursiveMutex> guard(page->mutex()); // If this page was already swept in the meantime, we can return here. if (page->SweepingDone()) return 0; DCHECK_EQ(Page::kSweepingPending, diff --git a/chromium/v8/src/heap/remembered-set.h b/chromium/v8/src/heap/remembered-set.h index cf17a46821e..bdb5bfc9a01 100644 --- a/chromium/v8/src/heap/remembered-set.h +++ b/chromium/v8/src/heap/remembered-set.h @@ -14,6 +14,7 @@ namespace v8 { namespace internal { enum PointerDirection { OLD_TO_OLD, OLD_TO_NEW }; +enum RememberedSetIterationMode { SYNCHRONIZED, NON_SYNCHRONIZED }; // TODO(ulan): Investigate performance of de-templatizing this class. template <PointerDirection direction> @@ -100,9 +101,13 @@ class RememberedSet : public AllStatic { // Iterates and filters the remembered set with the given callback. // The callback should take (Address slot) and return SlotCallbackResult. template <typename Callback> - static void Iterate(Heap* heap, Callback callback) { - IterateMemoryChunks( - heap, [callback](MemoryChunk* chunk) { Iterate(chunk, callback); }); + static void Iterate(Heap* heap, RememberedSetIterationMode mode, + Callback callback) { + IterateMemoryChunks(heap, [mode, callback](MemoryChunk* chunk) { + if (mode == SYNCHRONIZED) chunk->mutex()->Lock(); + Iterate(chunk, callback); + if (mode == SYNCHRONIZED) chunk->mutex()->Unlock(); + }); } // Iterates over all memory chunks that contains non-empty slot sets. @@ -180,9 +185,12 @@ class RememberedSet : public AllStatic { // The callback should take (SlotType slot_type, SlotAddress slot) and return // SlotCallbackResult. template <typename Callback> - static void IterateTyped(Heap* heap, Callback callback) { - IterateMemoryChunks(heap, [callback](MemoryChunk* chunk) { + static void IterateTyped(Heap* heap, RememberedSetIterationMode mode, + Callback callback) { + IterateMemoryChunks(heap, [mode, callback](MemoryChunk* chunk) { + if (mode == SYNCHRONIZED) chunk->mutex()->Lock(); IterateTyped(chunk, callback); + if (mode == SYNCHRONIZED) chunk->mutex()->Unlock(); }); } diff --git a/chromium/v8/src/heap/spaces.cc b/chromium/v8/src/heap/spaces.cc index c2a51e44fbf..c35864ed2f5 100644 --- a/chromium/v8/src/heap/spaces.cc +++ b/chromium/v8/src/heap/spaces.cc @@ -535,7 +535,7 @@ MemoryChunk* MemoryChunk::Initialize(Heap* heap, Address base, size_t size, chunk->progress_bar_ = 0; chunk->high_water_mark_.SetValue(static_cast<intptr_t>(area_start - base)); chunk->concurrent_sweeping_state().SetValue(kSweepingDone); - chunk->mutex_ = new base::Mutex(); + chunk->mutex_ = new base::RecursiveMutex(); chunk->available_in_free_list_ = 0; chunk->wasted_memory_ = 0; chunk->ResetLiveBytes(); diff --git a/chromium/v8/src/heap/spaces.h b/chromium/v8/src/heap/spaces.h index a71c63600b7..4bb2db69d0a 100644 --- a/chromium/v8/src/heap/spaces.h +++ b/chromium/v8/src/heap/spaces.h @@ -339,7 +339,7 @@ class MemoryChunk { + kPointerSize // TypedSlotSet* typed_old_to_old_slots_ + kPointerSize // SkipList* skip_list_ + kPointerSize // AtomicValue high_water_mark_ - + kPointerSize // base::Mutex* mutex_ + + kPointerSize // base::RecursiveMutex* mutex_ + kPointerSize // base::AtomicWord concurrent_sweeping_ + 2 * kSizetSize // AtomicNumber free-list statistics + kPointerSize // AtomicValue next_chunk_ @@ -397,7 +397,7 @@ class MemoryChunk { Address address() { return reinterpret_cast<Address>(this); } - base::Mutex* mutex() { return mutex_; } + base::RecursiveMutex* mutex() { return mutex_; } bool Contains(Address addr) { return addr >= area_start() && addr < area_end(); @@ -626,7 +626,7 @@ class MemoryChunk { // count highest number of bytes ever allocated on the page. base::AtomicValue<intptr_t> high_water_mark_; - base::Mutex* mutex_; + base::RecursiveMutex* mutex_; base::AtomicValue<ConcurrentSweepingState> concurrent_sweeping_; diff --git a/chromium/v8/src/i18n.cc b/chromium/v8/src/i18n.cc index d2245ef34a9..7c22871ff5e 100644 --- a/chromium/v8/src/i18n.cc +++ b/chromium/v8/src/i18n.cc @@ -30,8 +30,13 @@ #include "unicode/ucol.h" #include "unicode/ucurr.h" #include "unicode/unum.h" +#include "unicode/uvernum.h" #include "unicode/uversion.h" +#if U_ICU_VERSION_MAJOR_NUM >= 59 +#include "unicode/char16ptr.h" +#endif + namespace v8 { namespace internal { @@ -270,8 +275,13 @@ icu::DecimalFormat* CreateICUNumberFormat( } UErrorCode status_digits = U_ZERO_ERROR; +#if U_ICU_VERSION_MAJOR_NUM >= 59 uint32_t fraction_digits = ucurr_getDefaultFractionDigits( - currency.getTerminatedBuffer(), &status_digits); + icu::toUCharPtr(currency.getTerminatedBuffer()), &status_digits); +#else + uint32_t fraction_digits = ucurr_getDefaultFractionDigits( + currency.getTerminatedBuffer(), &status_digits); +#endif if (U_SUCCESS(status_digits)) { number_format->setMinimumFractionDigits(fraction_digits); number_format->setMaximumFractionDigits(fraction_digits); diff --git a/chromium/v8/src/inspector/inspector.gyp b/chromium/v8/src/inspector/inspector.gyp index c70722f852b..91507bd579f 100644 --- a/chromium/v8/src/inspector/inspector.gyp +++ b/chromium/v8/src/inspector/inspector.gyp @@ -13,6 +13,13 @@ 'targets': [ { 'target_name': 'inspector_injected_script', 'type': 'none', + 'conditions': [ + ['want_separate_host_toolset==1', { + 'toolsets': ['host', 'target'], + }, { + 'toolsets': ['target'], + }] + ], 'actions': [ { 'action_name': 'convert_js_to_cpp_char_array', @@ -37,6 +44,13 @@ }, { 'target_name': 'inspector_debugger_script', 'type': 'none', + 'conditions': [ + ['want_separate_host_toolset==1', { + 'toolsets': ['host', 'target'], + }, { + 'toolsets': ['target'], + }] + ], 'actions': [ { 'action_name': 'convert_js_to_cpp_char_array', @@ -61,6 +75,13 @@ }, { 'target_name': 'protocol_compatibility', 'type': 'none', + 'conditions': [ + ['want_separate_host_toolset==1', { + 'toolsets': ['host', 'target'], + }, { + 'toolsets': ['target'], + }] + ], 'actions': [ { 'action_name': 'protocol_compatibility', @@ -83,6 +104,13 @@ { 'target_name': 'protocol_generated_sources', 'type': 'none', 'dependencies': [ 'protocol_compatibility' ], + 'conditions': [ + ['want_separate_host_toolset==1', { + 'toolsets': ['host', 'target'], + }, { + 'toolsets': ['target'], + }] + ], 'actions': [ { 'action_name': 'protocol_generated_sources', diff --git a/chromium/v8/src/interpreter/bytecode-array-builder.cc b/chromium/v8/src/interpreter/bytecode-array-builder.cc index 5e58f9613d3..c327fb7cd82 100644 --- a/chromium/v8/src/interpreter/bytecode-array-builder.cc +++ b/chromium/v8/src/interpreter/bytecode-array-builder.cc @@ -71,6 +71,12 @@ Register BytecodeArrayBuilder::Parameter(int parameter_index) const { return Register::FromParameterIndex(parameter_index, parameter_count()); } +Register BytecodeArrayBuilder::Local(int index) const { + // TODO(marja): Make a DCHECK once crbug.com/706234 is fixed. + CHECK_LT(index, locals_count()); + return Register(index); +} + Handle<BytecodeArray> BytecodeArrayBuilder::ToBytecodeArray(Isolate* isolate) { DCHECK(return_seen_in_block_); DCHECK(!bytecode_generated_); diff --git a/chromium/v8/src/interpreter/bytecode-array-builder.h b/chromium/v8/src/interpreter/bytecode-array-builder.h index 6c09f5cdf40..0a10c1f485c 100644 --- a/chromium/v8/src/interpreter/bytecode-array-builder.h +++ b/chromium/v8/src/interpreter/bytecode-array-builder.h @@ -71,6 +71,7 @@ class V8_EXPORT_PRIVATE BytecodeArrayBuilder final return register_allocator()->maximum_register_count(); } + Register Local(int index) const; Register Parameter(int parameter_index) const; // Constant loads to accumulator. diff --git a/chromium/v8/src/interpreter/bytecode-generator.cc b/chromium/v8/src/interpreter/bytecode-generator.cc index 038c031ab27..0310509fde6 100644 --- a/chromium/v8/src/interpreter/bytecode-generator.cc +++ b/chromium/v8/src/interpreter/bytecode-generator.cc @@ -892,7 +892,7 @@ void BytecodeGenerator::VisitVariableDeclaration(VariableDeclaration* decl) { } case VariableLocation::LOCAL: if (variable->binding_needs_init()) { - Register destination(variable->index()); + Register destination(builder()->Local(variable->index())); builder()->LoadTheHole().StoreAccumulatorInRegister(destination); } break; @@ -1918,7 +1918,7 @@ void BytecodeGenerator::BuildVariableLoad(Variable* variable, FeedbackSlot slot, TypeofMode typeof_mode) { switch (variable->location()) { case VariableLocation::LOCAL: { - Register source(Register(variable->index())); + Register source(builder()->Local(variable->index())); // We need to load the variable into the accumulator, even when in a // VisitForRegisterScope, in order to avoid register aliasing if // subsequent expressions assign to the same variable. @@ -2112,9 +2112,9 @@ void BytecodeGenerator::BuildVariableAssignment(Variable* variable, case VariableLocation::LOCAL: { Register destination; if (VariableLocation::PARAMETER == variable->location()) { - destination = Register(builder()->Parameter(variable->index() + 1)); + destination = builder()->Parameter(variable->index() + 1); } else { - destination = Register(variable->index()); + destination = builder()->Local(variable->index()); } if (hole_check_mode == HoleCheckMode::kRequired) { diff --git a/chromium/v8/src/parsing/parser-base.h b/chromium/v8/src/parsing/parser-base.h index 869fd2efbd5..cf56c53a8e9 100644 --- a/chromium/v8/src/parsing/parser-base.h +++ b/chromium/v8/src/parsing/parser-base.h @@ -395,6 +395,17 @@ class ParserBase { return scope()->promise_var(); } + void RewindDestructuringAssignments(int pos) { + destructuring_assignments_to_rewrite_.Rewind(pos); + } + + void SetDestructuringAssignmentsScope(int pos, Scope* scope) { + for (int i = pos; i < destructuring_assignments_to_rewrite_.length(); + ++i) { + destructuring_assignments_to_rewrite_[i].scope = scope; + } + } + const ZoneList<DestructuringAssignment>& destructuring_assignments_to_rewrite() const { return destructuring_assignments_to_rewrite_; @@ -1138,9 +1149,14 @@ class ParserBase { ExpressionT ParseMemberExpression(bool* is_async, bool* ok); ExpressionT ParseMemberExpressionContinuation(ExpressionT expression, bool* is_async, bool* ok); + + // `rewritable_length`: length of the destructuring_assignments_to_rewrite() + // queue in the parent function state, prior to parsing of formal parameters. + // If the arrow function is lazy, any items added during formal parameter + // parsing are removed from the queue. ExpressionT ParseArrowFunctionLiteral(bool accept_IN, const FormalParametersT& parameters, - bool* ok); + int rewritable_length, bool* ok); void ParseAsyncFunctionBody(Scope* scope, StatementListT body, FunctionKind kind, FunctionBodyType type, bool accept_IN, int pos, bool* ok); @@ -2679,6 +2695,8 @@ ParserBase<Impl>::ParseAssignmentExpression(bool accept_IN, bool* ok) { this, classifier()->duplicate_finder()); Scope::Snapshot scope_snapshot(scope()); + int rewritable_length = + function_state_->destructuring_assignments_to_rewrite().length(); bool is_async = peek() == Token::ASYNC && !scanner()->HasAnyLineTerminatorAfterNext() && @@ -2732,6 +2750,7 @@ ParserBase<Impl>::ParseAssignmentExpression(bool accept_IN, bool* ok) { this->scope()->PropagateUsageFlagsToScope(scope); scope_snapshot.Reparent(scope); + function_state_->SetDestructuringAssignmentsScope(rewritable_length, scope); FormalParametersT parameters(scope); if (!classifier()->is_simple_parameter_list()) { @@ -2748,7 +2767,8 @@ ParserBase<Impl>::ParseAssignmentExpression(bool accept_IN, bool* ok) { if (duplicate_loc.IsValid()) { classifier()->RecordDuplicateFormalParameterError(duplicate_loc); } - expression = ParseArrowFunctionLiteral(accept_IN, parameters, CHECK_OK); + expression = ParseArrowFunctionLiteral(accept_IN, parameters, + rewritable_length, CHECK_OK); impl()->Discard(); classifier()->RecordPatternError(arrow_loc, MessageTemplate::kUnexpectedToken, @@ -4097,7 +4117,8 @@ bool ParserBase<Impl>::IsTrivialExpression() { template <typename Impl> typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseArrowFunctionLiteral( - bool accept_IN, const FormalParametersT& formal_parameters, bool* ok) { + bool accept_IN, const FormalParametersT& formal_parameters, + int rewritable_length, bool* ok) { const RuntimeCallStats::CounterId counters[2][2] = { {&RuntimeCallStats::ParseBackgroundArrowFunctionLiteral, &RuntimeCallStats::ParseArrowFunctionLiteral}, @@ -4228,6 +4249,14 @@ ParserBase<Impl>::ParseArrowFunctionLiteral( } impl()->CheckConflictingVarDeclarations(formal_parameters.scope, CHECK_OK); + if (is_lazy_top_level_function) { + FunctionState* parent_state = function_state.outer(); + DCHECK_NOT_NULL(parent_state); + DCHECK_GE(parent_state->destructuring_assignments_to_rewrite().length(), + rewritable_length); + parent_state->RewindDestructuringAssignments(rewritable_length); + } + impl()->RewriteDestructuringAssignments(); } diff --git a/chromium/v8/src/parsing/parser.cc b/chromium/v8/src/parsing/parser.cc index b5241dd6768..cc6b6a260b2 100644 --- a/chromium/v8/src/parsing/parser.cc +++ b/chromium/v8/src/parsing/parser.cc @@ -880,6 +880,8 @@ FunctionLiteral* Parser::DoParseFunction(ParseInfo* info, scope->set_start_position(info->start_position()); ExpressionClassifier formals_classifier(this); ParserFormalParameters formals(scope); + int rewritable_length = + function_state.destructuring_assignments_to_rewrite().length(); Checkpoint checkpoint(this); { // Parsing patterns as variable reference expression creates @@ -916,7 +918,8 @@ FunctionLiteral* Parser::DoParseFunction(ParseInfo* info, // Pass `accept_IN=true` to ParseArrowFunctionLiteral --- This should // not be observable, or else the preparser would have failed. - Expression* expression = ParseArrowFunctionLiteral(true, formals, &ok); + Expression* expression = + ParseArrowFunctionLiteral(true, formals, rewritable_length, &ok); if (ok) { // Scanning must end at the same position that was recorded // previously. If not, parsing has been interrupted due to a stack @@ -929,6 +932,10 @@ FunctionLiteral* Parser::DoParseFunction(ParseInfo* info, // must produce a FunctionLiteral. DCHECK(expression->IsFunctionLiteral()); result = expression->AsFunctionLiteral(); + // Rewrite destructuring assignments in the parameters. (The ones + // inside the function body are rewritten by + // ParseArrowFunctionLiteral.) + RewriteDestructuringAssignments(); } else { ok = false; } diff --git a/chromium/v8/src/regexp/regexp-utils.cc b/chromium/v8/src/regexp/regexp-utils.cc index d40431866a3..570a348f74a 100644 --- a/chromium/v8/src/regexp/regexp-utils.cc +++ b/chromium/v8/src/regexp/regexp-utils.cc @@ -145,7 +145,14 @@ bool RegExpUtils::IsUnmodifiedRegExp(Isolate* isolate, Handle<Object> obj) { if (!proto->IsJSReceiver()) return false; Handle<Map> initial_proto_initial_map = isolate->regexp_prototype_map(); - return (JSReceiver::cast(proto)->map() == *initial_proto_initial_map); + if (JSReceiver::cast(proto)->map() != *initial_proto_initial_map) { + return false; + } + + // The smi check is required to omit ToLength(lastIndex) calls with possible + // user-code execution on the fast path. + Object* last_index = JSRegExp::cast(recv)->LastIndex(); + return last_index->IsSmi() && Smi::cast(last_index)->value() >= 0; } int RegExpUtils::AdvanceStringIndex(Isolate* isolate, Handle<String> string, diff --git a/chromium/v8/src/runtime/runtime-i18n.cc b/chromium/v8/src/runtime/runtime-i18n.cc index 0b453819146..e89175a37db 100644 --- a/chromium/v8/src/runtime/runtime-i18n.cc +++ b/chromium/v8/src/runtime/runtime-i18n.cc @@ -43,6 +43,7 @@ #include "unicode/uloc.h" #include "unicode/unistr.h" #include "unicode/unum.h" +#include "unicode/ustring.h" #include "unicode/uversion.h" @@ -609,10 +610,11 @@ RUNTIME_FUNCTION(Runtime_InternalCompare) { String::FlatContent flat2 = string2->GetFlatContent(); std::unique_ptr<uc16[]> sap1; std::unique_ptr<uc16[]> sap2; - const UChar* string_val1 = GetUCharBufferFromFlat(flat1, &sap1, length1); - const UChar* string_val2 = GetUCharBufferFromFlat(flat2, &sap2, length2); - result = - collator->compare(string_val1, length1, string_val2, length2, status); + icu::UnicodeString string_val1( + FALSE, GetUCharBufferFromFlat(flat1, &sap1, length1), length1); + icu::UnicodeString string_val2( + FALSE, GetUCharBufferFromFlat(flat2, &sap2, length2), length2); + result = collator->compare(string_val1, string_val2, status); } if (U_FAILURE(status)) return isolate->ThrowIllegalOperation(); diff --git a/chromium/v8/src/wasm/wasm-debug.cc b/chromium/v8/src/wasm/wasm-debug.cc index c00a4f1ddd0..769f57d9512 100644 --- a/chromium/v8/src/wasm/wasm-debug.cc +++ b/chromium/v8/src/wasm/wasm-debug.cc @@ -362,6 +362,7 @@ Handle<WasmDebugInfo> WasmDebugInfo::New(Handle<WasmInstanceObject> instance) { Isolate* isolate = instance->GetIsolate(); Factory* factory = isolate->factory(); Handle<FixedArray> arr = factory->NewFixedArray(kFieldCount, TENURED); + arr->set(kWrapperTracerHeader, Smi::kZero); arr->set(kInstance, *instance); return Handle<WasmDebugInfo>::cast(arr); } diff --git a/chromium/v8/src/wasm/wasm-js.cc b/chromium/v8/src/wasm/wasm-js.cc index f16d8b29854..281c4e82e6a 100644 --- a/chromium/v8/src/wasm/wasm-js.cc +++ b/chromium/v8/src/wasm/wasm-js.cc @@ -690,6 +690,7 @@ void WebAssemblyMemoryGrow(const v8::FunctionCallbackInfo<v8::Value>& args) { thrower.RangeError("Unable to grow instance memory."); return; } + i::wasm::DetachWebAssemblyMemoryBuffer(i_isolate, old_buffer); v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); return_value.Set(ret); } diff --git a/chromium/v8/src/wasm/wasm-module.cc b/chromium/v8/src/wasm/wasm-module.cc index c218805371d..9df236fa9e9 100644 --- a/chromium/v8/src/wasm/wasm-module.cc +++ b/chromium/v8/src/wasm/wasm-module.cc @@ -2127,7 +2127,8 @@ Handle<JSArrayBuffer> GrowMemoryBuffer(Isolate* isolate, Handle<JSArrayBuffer> old_buffer; Address old_mem_start = nullptr; uint32_t old_size = 0; - if (buffer.ToHandle(&old_buffer) && old_buffer->backing_store() != nullptr) { + if (buffer.ToHandle(&old_buffer) && old_buffer->backing_store() != nullptr && + old_buffer->byte_length()->IsNumber()) { old_mem_start = static_cast<Address>(old_buffer->backing_store()); DCHECK_NOT_NULL(old_mem_start); old_size = old_buffer->byte_length()->Number(); @@ -2169,27 +2170,30 @@ void UncheckedUpdateInstanceMemory(Isolate* isolate, code_specialization.ApplyToWholeInstance(*instance); } -void DetachArrayBuffer(Isolate* isolate, Handle<JSArrayBuffer> buffer) { - const bool has_guard_regions = - (!buffer.is_null() && buffer->has_guard_region()); +void wasm::DetachWebAssemblyMemoryBuffer(Isolate* isolate, + Handle<JSArrayBuffer> buffer) { + int64_t byte_length = + buffer->byte_length()->IsNumber() + ? static_cast<uint32_t>(buffer->byte_length()->Number()) + : 0; + if (buffer.is_null() || byte_length == 0) return; + const bool has_guard_regions = buffer->has_guard_region(); + const bool is_external = buffer->is_external(); void* backing_store = buffer->backing_store(); - if (backing_store != nullptr) { - DCHECK(!buffer->is_neuterable()); - int64_t byte_length = NumberToSize(buffer->byte_length()); - buffer->set_is_neuterable(true); - if (!has_guard_regions) { - buffer->set_is_external(true); - isolate->heap()->UnregisterArrayBuffer(*buffer); - } - buffer->Neuter(); - if (!has_guard_regions) { - isolate->array_buffer_allocator()->Free(backing_store, byte_length); - } else { - base::OS::Free(backing_store, RoundUp(i::wasm::kWasmMaxHeapOffset, - base::OS::CommitPageSize())); - reinterpret_cast<v8::Isolate*>(isolate) - ->AdjustAmountOfExternalAllocatedMemory(-byte_length); - } + DCHECK(!buffer->is_neuterable()); + if (!has_guard_regions && !is_external) { + buffer->set_is_external(true); + isolate->heap()->UnregisterArrayBuffer(*buffer); + } + buffer->set_is_neuterable(true); + buffer->Neuter(); + if (has_guard_regions) { + base::OS::Free(backing_store, RoundUp(i::wasm::kWasmMaxHeapOffset, + base::OS::CommitPageSize())); + reinterpret_cast<v8::Isolate*>(isolate) + ->AdjustAmountOfExternalAllocatedMemory(-byte_length); + } else if (!has_guard_regions && !is_external) { + isolate->array_buffer_allocator()->Free(backing_store, byte_length); } } @@ -2203,8 +2207,10 @@ int32_t wasm::GrowWebAssemblyMemory(Isolate* isolate, Handle<JSArrayBuffer> old_buffer; uint32_t old_size = 0; Address old_mem_start = nullptr; + // Force byte_length to 0, if byte_length fails IsNumber() check. if (memory_buffer.ToHandle(&old_buffer) && - old_buffer->backing_store() != nullptr) { + old_buffer->backing_store() != nullptr && + old_buffer->byte_length()->IsNumber()) { old_size = old_buffer->byte_length()->Number(); old_mem_start = static_cast<Address>(old_buffer->backing_store()); } @@ -2264,7 +2270,6 @@ int32_t wasm::GrowWebAssemblyMemory(Isolate* isolate, } } memory_object->set_buffer(*new_buffer); - DetachArrayBuffer(isolate, old_buffer); DCHECK(old_size % WasmModule::kPageSize == 0); return (old_size / WasmModule::kPageSize); } diff --git a/chromium/v8/src/wasm/wasm-module.h b/chromium/v8/src/wasm/wasm-module.h index 67fff1d2007..1aaf9a4e96e 100644 --- a/chromium/v8/src/wasm/wasm-module.h +++ b/chromium/v8/src/wasm/wasm-module.h @@ -407,6 +407,9 @@ int32_t GrowWebAssemblyMemory(Isolate* isolate, int32_t GrowMemory(Isolate* isolate, Handle<WasmInstanceObject> instance, uint32_t pages); +void DetachWebAssemblyMemoryBuffer(Isolate* isolate, + Handle<JSArrayBuffer> buffer); + void UpdateDispatchTables(Isolate* isolate, Handle<FixedArray> dispatch_tables, int index, Handle<JSFunction> js_function); diff --git a/chromium/v8/src/wasm/wasm-objects.cc b/chromium/v8/src/wasm/wasm-objects.cc index c9b552f4a78..d74bf0c97c0 100644 --- a/chromium/v8/src/wasm/wasm-objects.cc +++ b/chromium/v8/src/wasm/wasm-objects.cc @@ -263,6 +263,8 @@ Handle<WasmTableObject> WasmTableObject::New(Isolate* isolate, uint32_t initial, Handle<JSFunction> table_ctor( isolate->native_context()->wasm_table_constructor()); Handle<JSObject> table_obj = isolate->factory()->NewJSObject(table_ctor); + table_obj->SetInternalField(kWrapperTracerHeader, Smi::kZero); + *js_functions = isolate->factory()->NewFixedArray(initial); Object* null = isolate->heap()->null_value(); for (int i = 0; i < static_cast<int>(initial); ++i) { @@ -340,6 +342,8 @@ Handle<WasmMemoryObject> WasmMemoryObject::New(Isolate* isolate, isolate->native_context()->wasm_memory_constructor()); Handle<JSObject> memory_obj = isolate->factory()->NewJSObject(memory_ctor, TENURED); + memory_obj->SetInternalField(kWrapperTracerHeader, Smi::kZero); + memory_obj->SetInternalField(kArrayBuffer, *buffer); Handle<Object> max = isolate->factory()->NewNumber(maximum); memory_obj->SetInternalField(kMaximum, *max); @@ -447,6 +451,8 @@ Handle<WasmInstanceObject> WasmInstanceObject::New( isolate->native_context()->wasm_instance_constructor()); Handle<JSObject> instance_object = isolate->factory()->NewJSObject(instance_cons, TENURED); + instance_object->SetInternalField(kWrapperTracerHeader, Smi::kZero); + Handle<Symbol> instance_sym(isolate->native_context()->wasm_instance_sym()); Object::SetProperty(instance_object, instance_sym, instance_object, STRICT) .Check(); @@ -499,6 +505,8 @@ Handle<WasmExportedFunction> WasmExportedFunction::New( shared->set_internal_formal_parameter_count(arity); Handle<JSFunction> function = isolate->factory()->NewFunction( isolate->wasm_function_map(), name, export_wrapper); + function->SetInternalField(kWrapperTracerHeader, Smi::kZero); + function->set_shared(*shared); function->SetInternalField(kInstance, *instance); @@ -554,7 +562,7 @@ Handle<WasmSharedModuleData> WasmSharedModuleData::New( Handle<ByteArray> asm_js_offset_table) { Handle<FixedArray> arr = isolate->factory()->NewFixedArray(kFieldCount, TENURED); - + arr->set(kWrapperTracerHeader, Smi::kZero); arr->set(kModuleWrapper, *module_wrapper); if (!module_bytes.is_null()) { arr->set(kModuleBytes, *module_bytes); diff --git a/chromium/v8/src/wasm/wasm-objects.h b/chromium/v8/src/wasm/wasm-objects.h index c526a909b1e..b198cf27551 100644 --- a/chromium/v8/src/wasm/wasm-objects.h +++ b/chromium/v8/src/wasm/wasm-objects.h @@ -44,6 +44,7 @@ class WasmInstanceWrapper; // Representation of a WebAssembly.Module JavaScript-level object. class WasmModuleObject : public JSObject { public: + // If a second field is added, we need a kWrapperTracerHeader field as well. // TODO(titzer): add the brand as an internal field instead of a property. enum Fields { kCompiledModule, kFieldCount }; @@ -58,8 +59,15 @@ class WasmModuleObject : public JSObject { // Representation of a WebAssembly.Table JavaScript-level object. class WasmTableObject : public JSObject { public: + // The 0-th field is used by the Blink Wrapper Tracer. // TODO(titzer): add the brand as an internal field instead of a property. - enum Fields { kFunctions, kMaximum, kDispatchTables, kFieldCount }; + enum Fields { + kWrapperTracerHeader, + kFunctions, + kMaximum, + kDispatchTables, + kFieldCount + }; DECLARE_CASTS(WasmTableObject); DECLARE_ACCESSORS(functions, FixedArray); @@ -83,8 +91,15 @@ class WasmTableObject : public JSObject { // Representation of a WebAssembly.Memory JavaScript-level object. class WasmMemoryObject : public JSObject { public: + // The 0-th field is used by the Blink Wrapper Tracer. // TODO(titzer): add the brand as an internal field instead of a property. - enum Fields : uint8_t { kArrayBuffer, kMaximum, kInstancesLink, kFieldCount }; + enum Fields : uint8_t { + kWrapperTracerHeader, + kArrayBuffer, + kMaximum, + kInstancesLink, + kFieldCount + }; DECLARE_CASTS(WasmMemoryObject); DECLARE_ACCESSORS(buffer, JSArrayBuffer); @@ -107,8 +122,10 @@ class WasmMemoryObject : public JSObject { // Representation of a WebAssembly.Instance JavaScript-level object. class WasmInstanceObject : public JSObject { public: + // The 0-th field is used by the Blink Wrapper Tracer. // TODO(titzer): add the brand as an internal field instead of a property. enum Fields { + kWrapperTracerHeader, kCompiledModule, kMemoryObject, kMemoryArrayBuffer, @@ -142,7 +159,8 @@ class WasmInstanceObject : public JSObject { // Representation of an exported WASM function. class WasmExportedFunction : public JSFunction { public: - enum Fields { kInstance, kIndex, kFieldCount }; + // The 0-th field is used by the Blink Wrapper Tracer. + enum Fields { kWrapperTracerHeader, kInstance, kIndex, kFieldCount }; DECLARE_CASTS(WasmExportedFunction); @@ -158,7 +176,9 @@ class WasmExportedFunction : public JSFunction { // Information shared by all WasmCompiledModule objects for the same module. class WasmSharedModuleData : public FixedArray { + // The 0-th field is used by the Blink Wrapper Tracer. enum Fields { + kWrapperTracerHeader, kModuleWrapper, kModuleBytes, kScript, @@ -408,7 +428,9 @@ class WasmCompiledModule : public FixedArray { class WasmDebugInfo : public FixedArray { public: + // The 0-th field is used by the Blink Wrapper Tracer. enum Fields { + kWrapperTracerHeader, kInstance, kInterpreterHandle, kInterpretedFunctions, |